mte/unikernel/duniverse/uuidm/test/test_uuidm.ml
2025-11-11 02:07:51 +01:00

90 lines
3.6 KiB
OCaml

(*---------------------------------------------------------------------------
Copyright (c) 2024 The uuidm programmers. All rights reserved.
SPDX-License-Identifier: ISC
---------------------------------------------------------------------------*)
open B0_testing
let test_uuid ?__POS__:pos version ?time_ms u us =
Test.block ?__POS__:pos @@ fun () ->
let us = Test.noraise ~__POS__ @@ fun () -> Option.get (Uuidm.of_string us) in
let trip =
Test.noraise ~__POS__ @@ fun () ->
Option.get (Uuidm.of_string (Uuidm.to_string u))
in
let variant = Uuidm.variant u in
Test.eq (module Uuidm) u trip ~__POS__;
Test.eq (module Uuidm) u us ~__POS__ ;
if Uuidm.equal u Uuidm.nil then Test.int variant 0x0 ~__POS__ else
if Uuidm.equal u Uuidm.max then Test.int variant 0xF ~__POS__ else
Test.holds (8 <= variant && variant <= 0xB) ~__POS__;
Test.int (Uuidm.version u) version ~__POS__;
Test.(option T.int64) (Uuidm.time_ms u) time_ms ~__POS__;
()
let test_constructors =
Test.test "Uuid.v* constructors" @@ fun () ->
test_uuid ~__POS__ 3
(Uuidm.v3 Uuidm.ns_dns "www.widgets.com")
"3D813CBB-47FB-32BA-91DF-831E1593AC29";
test_uuid ~__POS__ 3
(Uuidm.v3 Uuidm.ns_dns "www.example.org")
"0012416f-9eec-3ed4-a8b0-3bceecde1cd9";
test_uuid ~__POS__ 3
(Uuidm.v3 Uuidm.ns_dns "www.example.com")
"5df41881-3aed-3515-88a7-2f4a814cf09e";
test_uuid ~__POS__ 4
(Uuidm.v4
(Bytes.of_string
"\x91\x91\x08\xF7\x52\xD1\x33\x20\x5B\xAC\xF8\x47\xDB\x41\x48\xA8"))
"919108f7-52d1-4320-9bac-f847db4148a8";
test_uuid ~__POS__ 5
(Uuidm.v5 Uuidm.ns_dns "www.widgets.com")
"21F7F8DE-8051-5B89-8680-0195EF798B6A";
test_uuid ~__POS__ 5
(Uuidm.v5 Uuidm.ns_dns "www.example.org")
"74738ff5-5367-5958-9aee-98fffdcd1876";
test_uuid ~__POS__ 5
(Uuidm.v5 Uuidm.ns_dns "www.example.com")
"2ed6657d-e927-568b-95e1-2665a8aea6a2";
test_uuid ~__POS__ 7 ~time_ms:0x1020_3040_5060L
(Uuidm.v7_ns ~time_ns:Int64.(add (mul 1_000_000L 0x1020_3040_5060L) 213135L)
~rand_b:0x123456789abcdef0L)
"10203040-5060-7369-9234-56789abcdef0";
test_uuid ~__POS__ 7 ~time_ms:0x017F22E279B0L
(Uuidm.v7
~time_ms:0x017F22E279B0L ~rand_a:0xCC3 ~rand_b:0x18C4DC0C0C07398FL)
"017F22E2-79B0-7CC3-98C4-DC0C0C07398F";
test_uuid ~__POS__ 8
(Uuidm.v8
"\x24\x89\xE9\xAD\x2E\xE2\x0E\x00\x0E\xC9\x32\xD5\xF6\x91\x81\xC0")
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0";
Test.invalid_arg ~__POS__ @@ fun () -> ignore (Uuidm.v8 "");
()
let test_constants =
Test.test "Uuidm UUID constants" @@ fun () ->
test_uuid ~__POS__ 0 Uuidm.nil "00000000-0000-0000-0000-000000000000";
test_uuid ~__POS__ 0xF Uuidm.max "ffffffff-ffff-ffff-ffff-ffffffffffff";
test_uuid ~__POS__ 1 Uuidm.ns_dns "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
test_uuid ~__POS__ 1 Uuidm.ns_url "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
test_uuid ~__POS__ 1 Uuidm.ns_oid "6ba7b812-9dad-11d1-80b4-00c04fd430c8";
test_uuid ~__POS__ 1 Uuidm.ns_X500 "6ba7b814-9dad-11d1-80b4-00c04fd430c8";
()
let test_mixed_endian =
Test.test "Uuidm.{of,to}_mixed_endian_binary_string" @@ fun () ->
test_uuid ~__POS__ 13
(Uuidm.unsafe_of_binary_string
(Uuidm.to_mixed_endian_binary_string Uuidm.ns_X500))
"14B8a76b-ad9d-d111-80b4-00c04fd430c8";
test_uuid ~__POS__ 13
(Test.noraise ~__POS__ @@ fun () ->
Option.get @@
Uuidm.of_mixed_endian_binary_string
(Uuidm.to_binary_string Uuidm.ns_X500))
"14B8a76b-ad9d-d111-80b4-00c04fd430c8";
()
let main () = Test.main @@ fun () -> Test.autorun ()
let () = if !Sys.interactive then () else exit (main ())