# # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # UUID format (see RFC 4122): # time-low "-" time-mid "-" time-high-and-version "-' # clock-seq-high-and-reserved clock-seq-low "-" node # e.g. 00000000-0000-0000-0000-000000000000 (hex) # 0 1 2 3 4 5 6 7 8 9 A B C D E F require "uuid.php"; header("Content-type: text/plain"); echo "Testing uuid_frombinary()..."; if (uuid_frombinary("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") !== "00000000-0000-0000-0000-000000000000") { die("FAILED on null UUID"); } if (uuid_frombinary("\xbe\xd8\x03\x5e\xf8\x51\x46\x85\xa5\x4f\x09\xaf\xfb\xc2\x18\x78") !== "bed8035e-f851-4685-a54f-09affbc21878") { die("FAILED on v4 UUID"); } echo "OK\n"; echo "Testing uuid_tobinary()..."; if ("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" !== uuid_tobinary("00000000-0000-0000-0000-000000000000")) { die("FAILED on null UUID"); } if ("\xbe\xd8\x03\x5e\xf8\x51\x46\x85\xa5\x4f\x09\xaf\xfb\xc2\x18\x78" !== uuid_tobinary("bed8035e-f851-4685-a54f-09affbc21878")) { die("FAILED on v4 UUID"); } echo "OK\n"; echo "Testing uuid_is_valid..."; if (!uuid_is_valid("bed8035e-f851-4685-a54f-09affbc21878")) { die("FAILED on v4 uuid"); } if (!uuid_is_valid("7405e1be-0441-11db-9445-0002a50ec775")) { die("FAILED on v1 uuid"); } if (!uuid_is_valid("00000000-0000-0000-0000-000000000000")) { die("FAILED on v1 uuid"); } echo "OK\n"; echo "Testing uuid_variant..."; if (uuid_variant("bed8035e-f851-4685-a54f-09affbc21878") !== UUID_VARIANT_DCE) { die("FAILED on v4 uuid"); } if (uuid_variant("7405e1be-0441-11db-9445-0002a50ec775") !== UUID_VARIANT_DCE) { die("FAILED on v1 uuid"); } echo "OK\n"; echo "Testing uuid_type..."; if (uuid_type("bed8035e-f851-4685-a54f-09affbc21878") !== UUID_TYPE_RANDOM) { die("FAILED on v4 uuid"); } if (uuid_type("7405e1be-0441-11db-9445-0002a50ec775") !== UUID_TYPE_TIME) { die("FAILED on v1 uuid"); } if (uuid_type("00000000-0000-0000-0000-000000000000") !== UUID_TYPE_NULL) { die("FAILED on null uuid"); } echo "OK\n"; echo "Testing uuid_is_null..."; if (uuid_is_null("bed8035e-f851-4685-a54f-09affbc21878")) { die("FAILED on v4 uuid"); } if (uuid_is_null("7405e1be-0441-11db-9445-0002a50ec775")) { die("FAILED on v1 uuid"); } if (!uuid_is_null("00000000-0000-0000-0000-000000000000")) { die("FAILED on v1 uuid"); } echo "OK\n"; echo "Testing uuid_compare..."; if (uuid_compare("bed8035e-f851-4685-a54f-09affbc21878", "BED8035E-F851-4685-A54F-09AFFBC21878") !== 0) { die("FAILED on case insensitivity test"); } if (!(uuid_compare("00000000-0000-0000-0000-000000000000", "7405e1be-0441-11db-9445-0002a50ec775") < 0)) { die("FAILED on inequality test 1"); } if (!(uuid_compare("bed8035e-f851-4685-a54f-09affbc21878", "7405e1be-0441-11db-9445-0002a50ec775") > 0)) { die("FAILED on inequality test 2"); } if (!(uuid_compare("bed8035e-f851-4685-a54f-09affbc21878", "CED8035E-F851-4685-A54F-09AFFBC21878") < 0)) { die("FAILED on case insensitive inequality test"); } echo "OK\n"; echo "Testing uuid_create(UUID_TYPE_RANDOM)..."; for ($i = 0; $i < 1000; $i++) { $uuid = uuid_create(UUID_TYPE_RANDOM); $bin = uuid_tobinary($uuid); if (uuid_is_null($uuid) or $bin == "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") { die("FAILED to generate non-null UUID"); } if (substr($bin, 8, 1) !== chr(ord(substr($bin, 8, 1)) & ~0x40 | 0x80)) { die("FAILED to set constant bits in v4 UUID ($uuid)"); } if (substr($bin, 6, 1) !== chr(ord(substr($bin, 6, 1)) & ~0xf0 | 0x40)) { die("FAILED to set correct version in v4 UUID ($uuid)"); } if (!uuid_is_valid($uuid)) { die("FAILED to generate UUID that validates under uuid_is_valid ($uuid)"); } if (uuid_variant($uuid) !== UUID_VARIANT_DCE) { die("FAILED to generate UUID that validates under uuid_variant($uuid) == UUID_VARIANT_DCE"); } if (uuid_type($uuid) !== UUID_TYPE_RANDOM) { die("FAILED to generate UUID that validates under uuid_type($uuid) == UUID_TYPE_RANDOM"); } } echo "OK\n"; echo "Testing uuid_create(UUID_TYPE_NULL)..."; for ($i = 0; $i < 1000; $i++) { $uuid = uuid_create(UUID_TYPE_NULL); if ($uuid !== "00000000-0000-0000-0000-000000000000") { die("FAILED ($uuid)"); } if (uuid_type($uuid) !== UUID_TYPE_NULL) { die("FAILED to generate UUID that validates under uuid_variant($uuid) == UUID_TYPE_NULL"); } } echo "OK\n"; echo "Testing uuid_create(UUID_TYPE_NAME_MD5)..."; for ($i = 0; $i < 1000; $i++) { $uuid = uuid_create(UUID_TYPE_NAME_MD5, UUID_NAMESPACE_DNS, 'www.widgets.com'); if ($uuid !== "3d813cbb-47fb-32ba-91df-831e1593ac29") { die("FAILED ($uuid)"); } if (uuid_type($uuid) !== UUID_TYPE_NAME_MD5) { die("FAILED to generate UUID that validates under uuid_variant($uuid) == UUID_TYPE_NAME_MD5"); } } echo "OK\n"; echo "Testing uuid_create(UUID_TYPE_NAME_SHA1)..."; for ($i = 0; $i < 1000; $i++) { $uuid = uuid_create(UUID_TYPE_NAME_SHA1, UUID_NAMESPACE_DNS, 'www.widgets.com'); if ($uuid !== "21f7f8de-8051-5b89-8680-0195ef798b6a") { die("FAILED ($uuid)"); } if (uuid_type($uuid) !== UUID_TYPE_NAME_SHA1) { die("FAILED to generate UUID that validates under uuid_variant($uuid) == UUID_TYPE_NAME_SHA1"); } } echo "OK\n"; echo "Testing completed successfully.\n"; # vim:set ts=8 sw=4 sts=4 expandtab: