diff options
Diffstat (limited to '')
| -rw-r--r-- | test/test_branch.ml | 30 | ||||
| -rw-r--r-- | test/test_term.ml | 14 |
2 files changed, 35 insertions, 9 deletions
diff --git a/test/test_branch.ml b/test/test_branch.ml index 2cfabdd..415e1c2 100644 --- a/test/test_branch.ml +++ b/test/test_branch.ml @@ -48,8 +48,8 @@ let test_transition_chain () = let world = world () in let source = Printf.sprintf - {| [Insert relation: "Person" tuple: {name: "Marcos" age: 30} before: %S after: S1] :and - [Insert relation: "Person" tuple: {name: "Ana" age: 12} before: S1 after: S2] :and + {| [Insert relation: #Person tuple: {name: "Marcos" age: 30} before: %S after: S1] :and + [Insert relation: #Person tuple: {name: "Ana" age: 12} before: S1 after: S2] :and [Person name: N age: A at: S2] |} (tip_digest world) in @@ -59,7 +59,7 @@ let test_transition_chain () = visible at S1. *) let mid = Printf.sprintf - {| [Insert relation: "Person" tuple: {name: "Marcos" age: 30} before: %S after: S1] :and + {| [Insert relation: #Person tuple: {name: "Marcos" age: 30} before: %S after: S1] :and [Person name: N age: A at: S1] |} (tip_digest world) in @@ -73,7 +73,7 @@ let test_tip_unmoved_until_commit () = solve world (compile (Printf.sprintf - {| [Insert relation: "Person" tuple: {name: "Rui" age: 70} before: %S after: S1] |} + {| [Insert relation: #Person tuple: {name: "Rui" age: 70} before: %S after: S1] |} before)) in Alcotest.(check string) "solving commits nothing" before (tip_digest world) @@ -85,7 +85,7 @@ let test_commit_and_conflict () = solve world (compile (Printf.sprintf - {| [Insert relation: "Person" tuple: {name: "Rui" age: 70} before: %S after: S1] |} + {| [Insert relation: #Person tuple: {name: "Rui" age: 70} before: %S after: S1] |} root)) in let next = @@ -110,7 +110,7 @@ let test_integrity_at_transition () = let world = world () in let source = Printf.sprintf - {| [Insert relation: "Person" tuple: {name: "Ghost" age: "old"} before: %S after: S1] |} + {| [Insert relation: #Person tuple: {name: "Ghost" age: "old"} before: %S after: S1] |} (tip_digest world) in Alcotest.(check int) "an ill-typed tuple is no transition" 0 @@ -120,13 +120,25 @@ let test_linearity_rejects_forks () = let world = world () in ignore world; let source = - {| [Insert relation: "Person" tuple: {name: "A" age: 1} before: S0 after: S1] :and - [Insert relation: "Person" tuple: {name: "B" age: 2} before: S0 after: S2] |} + {| [Insert relation: #Person tuple: {name: "A" age: 1} before: S0 after: S1] :and + [Insert relation: #Person tuple: {name: "B" age: 2} before: S0 after: S2] |} in match Sol.Branch.linear (compile source) with | Error _ -> () | Ok () -> Alcotest.fail "a fork inside one expression must be rejected" +let test_unknown_relation_is_no_transition () = + (* Decision 15: inserting into a relation absent from the catalog + is a dangling reference, and there is no such transition. *) + let world = world () in + let source = + Printf.sprintf + {| [Insert relation: #Ghost tuple: {name: "X" age: 1} before: %S after: S1] |} + (tip_digest world) + in + Alcotest.(check int) "dangling reference" 0 + (List.length (solve world (compile source))) + let test_reads_default_to_tip () = let world = world () in Alcotest.(check int) "the root tip has nobody" 0 @@ -145,6 +157,8 @@ let () = test_integrity_at_transition; Alcotest.test_case "linearity rejects forks" `Quick test_linearity_rejects_forks; + Alcotest.test_case "unknown relation is no transition" `Quick + test_unknown_relation_is_no_transition; Alcotest.test_case "reads default to tip" `Quick test_reads_default_to_tip; ] ); diff --git a/test/test_term.ml b/test/test_term.ml index 20b2f1a..3601718 100644 --- a/test/test_term.ml +++ b/test/test_term.ml @@ -82,7 +82,17 @@ let test_printing () = Alcotest.(check string) "sequence" "#(1 2 3)" (print (Sol.Term.sequence [ int 1; int 2; int 3 ])); Alcotest.(check string) "record" "{a: 1 b: 2}" - (print (record [ (label "b", int 2); (label "a", int 1) ])) + (print (record [ (label "b", int 2); (label "a", int 1) ])); + Alcotest.(check string) "reference" "#Person" + (print (Result.get_ok (Sol.Term.reference "Person"))) + +let test_reference_validation () = + Alcotest.(check bool) "well-formed" true + (Result.is_ok (Sol.Term.reference "Person")); + Alcotest.(check bool) "empty rejected" false + (Result.is_ok (Sol.Term.reference "")); + Alcotest.(check bool) "leading digit rejected" false + (Result.is_ok (Sol.Term.reference "1st")) let test_label_validation () = let ok s = Result.is_ok (Sol.Label.of_string s) in @@ -122,5 +132,7 @@ let () = [ Alcotest.test_case "printing" `Quick test_printing; Alcotest.test_case "label validation" `Quick test_label_validation; + Alcotest.test_case "reference validation" `Quick + test_reference_validation; ] ); ] |
