File: generate_corpus_util.php

package info (click to toggle)
php8.2 8.2.29-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 209,600 kB
  • sloc: ansic: 736,658; php: 33,046; sh: 11,432; cpp: 7,005; pascal: 4,448; javascript: 3,112; asm: 2,404; yacc: 2,222; xml: 1,784; makefile: 689; awk: 148
file content (25 lines) | stat: -rw-r--r-- 966 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

function generate_corpus_from_phpt(string $corpusDir, array $testDirs, int $maxLen = 8 * 1024) {
    @mkdir($corpusDir);
    foreach ($testDirs as $testDir) {
        $it = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($testDir),
            RecursiveIteratorIterator::LEAVES_ONLY
        );

        foreach ($it as $file) {
            if (!preg_match('/\.phpt$/', $file)) continue;
            $fullCode = file_get_contents($file);
            if (!preg_match('/--FILE--\R(.*?)\R--([_A-Z]+)--/s', $fullCode, $matches)) continue;
            $code = $matches[1];
            if (strlen($code) > $maxLen) continue;

            $outFile = str_replace($testDir, '', $file);
            $outFile = str_replace('/', '_', $outFile);
            if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) {
                file_put_contents($corpusDir . '/' . $outFile, $code);
            }
        }
    }
}