| 
<?php/**
 * @Author  Anton Zinovyev
 */
 
 namespace xobotyi\benchmarks;
 
 include_once __DIR__ . '/../vendor/autoload.php';
 
 use Arrayy\Arrayy;
 use xobotyi\A;
 
 $arr = [
 "this" => [
 "is" => [
 "quite" => [
 "simple" => [
 "benchmark" => "yeee!",
 "nullval" => null,
 ],
 "hard" => function () {
 },
 "super.hard" => "benchmark",
 ],
 ],
 ],
 ];
 
 echo "Test array:\n" . print_r($arr, true);
 
 echo "\n\n\n# voku/arrayy: \n";
 echo "\nGet result [this.is.quite.simple.benchmark]: " . Arrayy::create($arr)
 ->get('this.is.quite.simple.benchmark', 'default value');
 echo "\nGet result [this.is.quite.simple.nullval]: " . Arrayy::create($arr)
 ->get('this.is.quite.simple.nullval', 'default value');
 echo "\nGet result [this.is.quite.hard.benchmark]: FAILS WITH FATAL ERROR";
 # Id you'll uncomment it it will fail with fatal
 // . Arrayy::create($arr)->get('this.is.quite.hard.benchmark', 'default value');
 echo "\nGet result [this.is.quite.super\\.hard]: " . Arrayy::create($arr)
 ->get('this.is.quite.super\\.hard', 'default value');
 
 $repeats = 100000;
 
 #bench
 echo "\n\n" . 'GET with Arrayy\\Arrayy object prepared [$arrayy->get(\'this.is.quite.simple.benchmark\')] (' . $repeats . ' repeats): ';
 $arrayy = Arrayy::create($arr);
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 $arrayy->get('this.is.quite.simple.benchmark');
 }
 echo(microtime(true) - $start);
 echo "\n" . 'SET with Arrayy\\Arrayy object prepared [$arrayy->set(\'this.is.quite.simple.benchmark\', \'test!\')] (' . $repeats . ' repeats): ';
 $arrayy = Arrayy::create($arr);
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 $arrayy->set('this.is.quite.simple.benchmark', 'test!');
 }
 echo(microtime(true) - $start);
 
 echo "\n\n\n# adbario/php-dot-notation: \n";
 echo "\nGet result [this.is.quite.simple.benchmark]: " . dot($arr)->get('this.is.quite.simple.benchmark', 'default value');
 echo "\nGet result [this.is.quite.simple.nullval]: " . dot($arr)->get('this.is.quite.simple.nullval', 'default value');
 echo "\nGet result [this.is.quite.hard.benchmark]: " . dot($arr)->get('this.is.quite.hard.benchmark', 'default value');
 echo "\nGet result [this.is.quite.super\\.hard]: " . dot($arr)->get('this.is.quite.super\\.hard', 'default value');
 
 #bench
 echo "\n\n" . 'GET with Adbar\\Dot object prepared [$dot->get($arr, \'this.is.quite.simple.benchmark\')] (' . $repeats . ' repeats): ';
 $start = microtime(true);
 $dot = dot($arr);
 for ($i = 0; $i < $repeats; $i++) {
 $dot->get('this.is.quite.simple.benchmark');
 }
 echo(microtime(true) - $start);
 echo "\n" . 'SET with Adbar\\Dot object prepared [$dot->set($arr, \'this.is.quite.simple.benchmark\', \'test!\')] (' . $repeats . ' repeats): ';
 $start = microtime(true);
 $dot = dot($arr);
 for ($i = 0; $i < $repeats; $i++) {
 $dot->set('this.is.quite.simple.benchmark', 'test!');
 }
 echo(microtime(true) - $start);
 
 echo "\n\n\n# xobotyi/dotarray: \n";
 echo "\nGet result [this.is.quite.simple.benchmark]: " . A::get($arr, 'this.is.quite.simple.benchmark', 'default value');
 echo "\nGet result [this.is.quite.simple.nullval]: " . A::get($arr, 'this.is.quite.simple.nullval', 'default value');
 echo "\nGet result [this.is.quite.hard.benchmark]: " . A::get($arr, 'this.is.quite.hard.benchmark', 'default value');
 echo "\nGet result [this.is.quite.super\\.hard]: " . A::get($arr, 'this.is.quite.super\\.hard', 'default value');
 
 #bench
 echo "\n\n" . 'GET with static A::get [A::get($arr, \'this.is.quite.simple.benchmark\')] (' . $repeats . ' repeats) $safeSeparationMode=true: ';
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 A::get($arr, 'this.is.quite.simple.benchmark');
 }
 echo(microtime(true) - $start);
 echo "\n" . 'SET with static A::get [A::set($arr, \'this.is.quite.simple.benchmark\', \'test!\')] (' . $repeats . ' repeats) $safeSeparationMode=true: ';
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 A::set($arr, 'this.is.quite.simple.benchmark', 'test!');
 }
 echo(microtime(true) - $start);
 
 echo "\n\n" . 'GET with static A::get [A::get($arr, \'this.is.quite.simple.benchmark\')] (' . $repeats . ' repeats) $safeSeparationMode=false: ';
 A::SetSafeSeparationMode(false);
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 A::get($arr, 'this.is.quite.simple.benchmark');
 }
 echo(microtime(true) - $start);
 echo "\n" . 'SET with static A::get [A::set($arr, \'this.is.quite.simple.benchmark\', \'test!\')] (' . $repeats . ' repeats) $safeSeparationMode=false: ';
 $start = microtime(true);
 for ($i = 0; $i < $repeats; $i++) {
 A::set($arr, 'this.is.quite.simple.benchmark', 'test!');
 }
 echo(microtime(true) - $start);
 |