diff --git a/containers.mllib b/containers.mllib index 385cecc5..5808a266 100644 --- a/containers.mllib +++ b/containers.mllib @@ -6,3 +6,4 @@ FlatHashtbl SplayTree PHashtbl Heap +Univ diff --git a/tests/test_univ.ml b/tests/test_univ.ml new file mode 100644 index 00000000..a99b2a9d --- /dev/null +++ b/tests/test_univ.ml @@ -0,0 +1,51 @@ + +open OUnit + +(** Test Univ embedding *) + +let test_val () = + let e1 = Univ.embed () in + let e2 = Univ.embed () in + let v1 = e1.Univ.pack 42 in + let v2 = e2.Univ.pack "hello" in + OUnit.assert_equal (Some 42) (e1.Univ.unpack v1); + OUnit.assert_equal None (e1.Univ.unpack v2); + OUnit.assert_equal (Some "hello") (e2.Univ.unpack v2); + OUnit.assert_equal None (e2.Univ.unpack v1); + () + +let test_compatible () = + let e1 = Univ.embed () in + let e2 = Univ.embed () in + let v1 = e1.Univ.pack 42 in + let v2 = e2.Univ.pack "hello" in + OUnit.assert_bool "compatible" (e1.Univ.compatible v1); + OUnit.assert_bool "not compatible" (not (e1.Univ.compatible v2)); + OUnit.assert_bool "compatible" (e2.Univ.compatible v2); + OUnit.assert_bool "not compatible" (not (e2.Univ.compatible v1)); + () + +let test_set () = + let e1 = (Univ.embed () : int Univ.embedding) in + let e2 = (Univ.embed () : string Univ.embedding) in + (* create val *) + let v = e1.Univ.pack 42 in + OUnit.assert_equal (Some 42) (e1.Univ.unpack v); + OUnit.assert_equal None (e2.Univ.unpack v); + (* set content, keeping type *) + e1.Univ.set v 100; + OUnit.assert_equal (Some 100) (e1.Univ.unpack v); + OUnit.assert_equal None (e2.Univ.unpack v); + (* set content, changing type *) + e2.Univ.set v "hello"; + OUnit.assert_equal None (e1.Univ.unpack v); + OUnit.assert_equal (Some "hello") (e2.Univ.unpack v); + () + +let suite = + "test_univ" >::: + [ "test_val" >:: test_val; + "test_compatible" >:: test_compatible; + "test_set" >:: test_set; + ] + diff --git a/tests/tests.ml b/tests/tests.ml index 7c157b36..80a2d2ff 100644 --- a/tests/tests.ml +++ b/tests/tests.ml @@ -7,6 +7,7 @@ let suite = [ Test_pHashtbl.suite; Test_heap.suite; Test_graph.suite; + Test_univ.suite; ] let _ =