forked from php/php-src
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate_corpus_util.php
25 lines (22 loc) · 966 Bytes
/
generate_corpus_util.php
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);
}
}
}
}