J. King
6 years ago
3 changed files with 110 additions and 0 deletions
@ -0,0 +1,99 @@ |
|||||
|
<?php |
||||
|
/** @license MIT |
||||
|
* Copyright 2018 J. King et al. |
||||
|
* See LICENSE and AUTHORS files for details */ |
||||
|
|
||||
|
declare(strict_types=1); |
||||
|
namespace MensBeam\UTF8; |
||||
|
|
||||
|
require __DIR__."/../tests/bootstrap.php"; |
||||
|
|
||||
|
$files = [ |
||||
|
'HTML single-page specification' => ["https://html.spec.whatwg.org/", "html.html"], |
||||
|
'English article on Canada' => ["https://en.wikipedia.org/wiki/Canada", "canada.html"], |
||||
|
'Greek article on Greece' => ["https://el.wikipedia.org/wiki/Ελλάδα", "greece.html"], |
||||
|
'Japanese article on Japan' => ["https://ja.wikipedia.org/wiki/日本", "japan.html"], |
||||
|
]; |
||||
|
|
||||
|
$tests = [ |
||||
|
'Intl code points' => ["intl", function(string $text): int { |
||||
|
$t = 0; |
||||
|
$i = \IntlBreakIterator::createCodePointInstance(); |
||||
|
$i->setText($text); |
||||
|
foreach ($i as $o) { |
||||
|
$p = $i->getLastCodePoint(); |
||||
|
$t++; |
||||
|
} |
||||
|
return $t; |
||||
|
}], |
||||
|
'Native code points' => ["", function(string $text): int { |
||||
|
$t = 0; |
||||
|
$pos = 0; |
||||
|
$eof = strlen($text); |
||||
|
while ($pos <= $eof) { |
||||
|
$p = UTF8::ord($text, $pos, $pos); |
||||
|
$t++; |
||||
|
} |
||||
|
return $t; |
||||
|
}], |
||||
|
'Intl characters' => ["intl", function(string $text): int { |
||||
|
$t = 0; |
||||
|
$i = \IntlBreakIterator::createCodePointInstance(); |
||||
|
$i->setText($text); |
||||
|
foreach ($i as $b) { |
||||
|
$p = \IntlChar::chr($i->getLastCodePoint()); |
||||
|
$t++; |
||||
|
} |
||||
|
return $t; |
||||
|
}], |
||||
|
'Native characters' => ["", function(string $text): int { |
||||
|
$t = 0; |
||||
|
$pos = 0; |
||||
|
$eof = strlen($text); |
||||
|
while ($pos <= $eof) { |
||||
|
$p = UTF8::get($text, $pos, $pos); |
||||
|
$t++; |
||||
|
} |
||||
|
return $t; |
||||
|
}], |
||||
|
'PCRE split characters' => ["pcre", function(string $text): int { |
||||
|
$t = 0; |
||||
|
foreach (preg_split('//u', $text) as $c) { |
||||
|
$p = $c; |
||||
|
$t++; |
||||
|
} |
||||
|
return $t; |
||||
|
}], |
||||
|
]; |
||||
|
|
||||
|
if (!file_exists(__DIR__."/docs/")) { |
||||
|
mkdir(__DIR__."/docs/"); |
||||
|
} |
||||
|
|
||||
|
foreach($files as $fName => $file) { |
||||
|
list($url, $file) = $file; |
||||
|
$file = __DIR__."/docs/$file"; |
||||
|
if (!file_exists($file)) { |
||||
|
$text = file_get_contents($url); |
||||
|
file_put_contents($file, $text); |
||||
|
} else { |
||||
|
$text = file_get_contents($file); |
||||
|
} |
||||
|
echo "$fName:\n"; |
||||
|
foreach($tests as $tName => $test) { |
||||
|
list($req, $test) = $test; |
||||
|
if ($req && !extension_loaded($req)) { |
||||
|
continue; |
||||
|
} else { |
||||
|
echo " $tName: "; |
||||
|
$t = []; |
||||
|
for ($a = 0; $a < 5; $a++) { |
||||
|
$s = microtime(true); |
||||
|
$n = $test($text); |
||||
|
$t[$a] = microtime(true) - $s; |
||||
|
} |
||||
|
$t = array_sum($t) / sizeof($t); |
||||
|
echo number_format($t, 3)." ($n characters)\n"; |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue