<?php
$methods = array("method_diff_assoc", "method_diff_key", "method_sort");
function make_array($size) {
for ($i = 0; $i < $size; $i++) {
$array[$i] = $i + 1;
}
$pos =& rand(0, $size - 1); do {
$val = rand(1, $size - 1); } while ($array[$pos] == $val);
$array[$pos] = $val;
return $array;
}
function method_diff_assoc($array) {
}
function method_diff_key($array) {
}
function method_sort($array) {
$prev = null;
foreach ($array as $item) {
if ($item === $prev) { return $item; }
$prev = $item;
}
}
function validate($iterations) {
global $methods;
for ($i = 0; $i < $iterations; $i++) {
$a = make_array(1000);
$check = null;
foreach ($methods as $method_name) {
if (!is_null($check) && $check !== $result) { echo "Method $method_name returned $result instead of $check!\n";
return false;
}
$check = $result;
}
}
return true;
}
function profile($method_name, $iterations) {
for ($i = 0; $i < $iterations; $i++) {
$a = make_array(10000);
}
}
if (validate(20)) {
echo "Tests passed, all implementations seem to argee on results.\n";
} else {
echo "TESTS FAILED. FIX THE CODE FIRST.\n";
}
$c = 50; // Increase at will, this value is low just for ideone.com
foreach ($methods as $method_name) {
printf("Trying %d iterations of method %s\n", $c, $method_name); printf("\t%s took: %0.2f seconds/iteration\n", $method_name, profile
($method_name, $c) / $c); }
?>
PD9waHAKCiAgICAkbWV0aG9kcyA9IGFycmF5KCJtZXRob2RfZGlmZl9hc3NvYyIsICJtZXRob2RfZGlmZl9rZXkiLCAibWV0aG9kX3NvcnQiKTsKCiAgICBmdW5jdGlvbiBtYWtlX2FycmF5KCRzaXplKSB7CiAgICAgICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkc2l6ZTsgJGkrKykgewogICAgICAgICAgICAkYXJyYXlbJGldID0gJGkgKyAxOwogICAgICAgIH0KICAgICAgICBzaHVmZmxlKCRhcnJheSk7CiAgICAgICAgc3JhbmQoKGZsb2F0KW1pY3JvdGltZSgpICogMTAwMDAwMCk7CiAgICAgICAgJHBvcyA9JiByYW5kKDAsICRzaXplIC0gMSk7CiAgICAgICAgZG8gewogICAgICAgICAgICAkdmFsID0gcmFuZCgxLCAkc2l6ZSAtIDEpOwogICAgICAgIH0gd2hpbGUgKCRhcnJheVskcG9zXSA9PSAkdmFsKTsKICAgICAgICAkYXJyYXlbJHBvc10gPSAkdmFsOwogICAgICAgIHJldHVybiAkYXJyYXk7CiAgICB9CgogICAgZnVuY3Rpb24gbWV0aG9kX2RpZmZfYXNzb2MoJGFycmF5KSB7CiAgICAgICAgJHUgPSBhcnJheV91bmlxdWUoJGFycmF5KTsKICAgICAgICAkZHVwID0gYXJyYXlfZGlmZl9hc3NvYygkYXJyYXksICR1KTsKICAgICAgICByZXR1cm4gYXJyYXlfcG9wKCRkdXApOwogICAgfQoKICAgIGZ1bmN0aW9uIG1ldGhvZF9kaWZmX2tleSgkYXJyYXkpIHsKICAgICAgICAkdSA9IGFycmF5X3VuaXF1ZSgkYXJyYXkpOwogICAgICAgICRkdXAgPSBhcnJheV9kaWZmX2tleSgkYXJyYXksICR1KTsKICAgICAgICByZXR1cm4gYXJyYXlfcG9wKCRkdXApOwogICAgfQoKICAgIGZ1bmN0aW9uIG1ldGhvZF9zb3J0KCRhcnJheSkgewogICAgICAgIHNvcnQoJGFycmF5KTsKICAgICAgICAkcHJldiA9IG51bGw7CiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRpdGVtKSB7CiAgICAgICAgICAgIGlmICgkaXRlbSA9PT0gJHByZXYpIHsgcmV0dXJuICRpdGVtOyB9CiAgICAgICAgICAgICRwcmV2ID0gJGl0ZW07CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCRpdGVyYXRpb25zKSB7CiAgICAgICAgZ2xvYmFsICRtZXRob2RzOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRpdGVyYXRpb25zOyAkaSsrKSB7CiAgICAgICAgICAgICRhID0gbWFrZV9hcnJheSgxMDAwKTsKICAgICAgICAgICAgJGNoZWNrID0gbnVsbDsKICAgICAgICAgICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZF9uYW1lKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmMoJG1ldGhvZF9uYW1lLCAkYSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzX251bGwoJGNoZWNrKSAmJiAkY2hlY2sgIT09ICRyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICJNZXRob2QgJG1ldGhvZF9uYW1lIHJldHVybmVkICRyZXN1bHQgaW5zdGVhZCBvZiAkY2hlY2shXG4iOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjaGVjayA9ICRyZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gcHJvZmlsZSgkbWV0aG9kX25hbWUsICRpdGVyYXRpb25zKSB7CiAgICAgICAgJHN0YXJ0ID0gdGltZSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRpdGVyYXRpb25zOyAkaSsrKSB7CiAgICAgICAgICAgICRhID0gbWFrZV9hcnJheSgxMDAwMCk7CiAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKCRtZXRob2RfbmFtZSwgJGEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGltZSgpIC0gJHN0YXJ0OwogICAgfQoKICAgIGlmICh2YWxpZGF0ZSgyMCkpIHsKICAgICAgICBlY2hvICJUZXN0cyBwYXNzZWQsIGFsbCBpbXBsZW1lbnRhdGlvbnMgc2VlbSB0byBhcmdlZSBvbiByZXN1bHRzLlxuIjsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAiVEVTVFMgRkFJTEVELiBGSVggVEhFIENPREUgRklSU1QuXG4iOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICAkYyA9IDUwOyAvLyBJbmNyZWFzZSBhdCB3aWxsLCB0aGlzIHZhbHVlIGlzIGxvdyBqdXN0IGZvciBpZGVvbmUuY29tCiAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbWV0aG9kX25hbWUpIHsKICAgICAgICBwcmludGYoIlRyeWluZyAlZCBpdGVyYXRpb25zIG9mIG1ldGhvZCAlc1xuIiwgJGMsICRtZXRob2RfbmFtZSk7CiAgICAgICAgcHJpbnRmKCJcdCVzIHRvb2s6ICUwLjJmIHNlY29uZHMvaXRlcmF0aW9uXG4iLCAkbWV0aG9kX25hbWUsIHByb2ZpbGUoJG1ldGhvZF9uYW1lLCAkYykgLyAkYyk7CiAgICB9Cgo/Pg==