From b4a2485afbf74e99e2147086fbca0568b7e2b7b8 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sun, 12 Jul 2026 17:55:27 -0300 Subject: relation references as a term kind, written #Name --- test/test_branch.ml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'test/test_branch.ml') 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; ] ); -- cgit v1.2.3