From 7a64be22d8af17e5c5b302020a365d339ea41405 Mon Sep 17 00:00:00 2001 From: giles Date: Fri, 8 May 2026 10:19:58 +0000 Subject: [PATCH] =?UTF-8?q?datalog:=20dl-eval=20=E2=89=A1=20dl-eval-magic?= =?UTF-8?q?=20equivalence=20test=20(215/215)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/datalog/scoreboard.json | 8 ++++---- lib/datalog/scoreboard.md | 4 ++-- lib/datalog/tests/api.sx | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/datalog/scoreboard.json b/lib/datalog/scoreboard.json index c34b0adb..26342bda 100644 --- a/lib/datalog/scoreboard.json +++ b/lib/datalog/scoreboard.json @@ -1,8 +1,8 @@ { "lang": "datalog", - "total_passed": 214, + "total_passed": 215, "total_failed": 0, - "total": 214, + "total": 215, "suites": [ {"name":"tokenize","passed":26,"failed":0,"total":26}, {"name":"parse","passed":18,"failed":0,"total":18}, @@ -12,9 +12,9 @@ {"name":"semi_naive","passed":8,"failed":0,"total":8}, {"name":"negation","passed":10,"failed":0,"total":10}, {"name":"aggregates","passed":18,"failed":0,"total":18}, - {"name":"api","passed":19,"failed":0,"total":19}, + {"name":"api","passed":20,"failed":0,"total":20}, {"name":"magic","passed":22,"failed":0,"total":22}, {"name":"demo","passed":18,"failed":0,"total":18} ], - "generated": "2026-05-08T10:17:32+00:00" + "generated": "2026-05-08T10:19:48+00:00" } diff --git a/lib/datalog/scoreboard.md b/lib/datalog/scoreboard.md index 8633cec0..c97ea81e 100644 --- a/lib/datalog/scoreboard.md +++ b/lib/datalog/scoreboard.md @@ -1,6 +1,6 @@ # datalog scoreboard -**214 / 214 passing** (0 failure(s)). +**215 / 215 passing** (0 failure(s)). | Suite | Passed | Total | Status | |-------|--------|-------|--------| @@ -12,6 +12,6 @@ | semi_naive | 8 | 8 | ok | | negation | 10 | 10 | ok | | aggregates | 18 | 18 | ok | -| api | 19 | 19 | ok | +| api | 20 | 20 | ok | | magic | 22 | 22 | ok | | demo | 18 | 18 | ok | diff --git a/lib/datalog/tests/api.sx b/lib/datalog/tests/api.sx index 7cddd4cb..b46df8f8 100644 --- a/lib/datalog/tests/api.sx +++ b/lib/datalog/tests/api.sx @@ -261,6 +261,20 @@ "?- ancestor(a, X).") (list {:X (quote b)} {:X (quote c)})) + ;; Equivalence: dl-eval and dl-eval-magic produce the same + ;; answers for any well-formed query (magic-sets is a perf + ;; alternative, not a semantic change). + (dl-api-test! "dl-eval ≡ dl-eval-magic on ancestor" + (let + ((source "parent(a, b). parent(b, c). parent(c, d). + ancestor(X, Y) :- parent(X, Y). + ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).")) + (let + ((semi (dl-eval source "?- ancestor(a, X).")) + (magic (dl-eval-magic source "?- ancestor(a, X)."))) + (= (len semi) (len magic)))) + true) + ;; Comprehensive integration: recursion + stratified negation ;; + aggregation + comparison composed in a single program. ;; (Uses _Anything as a regular var instead of `_` so the