From 79aefe7991bda2416322d5ecdf28b8da7426bee1 Mon Sep 17 00:00:00 2001 From: kelvinqian00 Date: Wed, 7 Feb 2024 11:25:07 -0500 Subject: [PATCH] Add nopath, novar, and noblank tests for colls --- .../com/yetanalytics/flint/spec/triple.cljc | 20 ++- .../yetanalytics/flint/spec/triple_test.cljc | 124 +++++++++++++++++- 2 files changed, 136 insertions(+), 8 deletions(-) diff --git a/src/main/com/yetanalytics/flint/spec/triple.cljc b/src/main/com/yetanalytics/flint/spec/triple.cljc index d3e38ec..0aec6be 100644 --- a/src/main/com/yetanalytics/flint/spec/triple.cljc +++ b/src/main/com/yetanalytics/flint/spec/triple.cljc @@ -90,6 +90,12 @@ :ax/prefix-iri ax/prefix-iri-spec :ax/rdf-type ax/rdf-type-spec)) +(s/def ::predicate-noblank + ::predicate-nopath) + +(s/def ::predicate-novar-noblank + ::predicate-novar) + ;; Objects (includes Lists) (s/def ::object @@ -115,8 +121,8 @@ :ax/prefix-iri ax/prefix-iri-spec :ax/bnode ax/bnode-spec :ax/literal ax/literal-spec - :triple/list ::list-nopath - :triple/bnodes ::bnodes-nopath)) + :triple/list ::list-novar + :triple/bnodes ::bnodes-novar)) (s/def ::object-noblank (s/or :ax/var ax/variable-spec @@ -212,10 +218,10 @@ (make-pred-objs-spec ::predicate-novar obj-set-novar-spec)) (def pred-objs-noblank-spec - (make-pred-objs-spec ::predicate-nopath obj-set-noblank-spec)) + (make-pred-objs-spec ::predicate-noblank obj-set-noblank-spec)) (def pred-objs-novar-noblank-spec - (make-pred-objs-spec ::predicate-novar obj-set-novar-noblank-spec)) + (make-pred-objs-spec ::predicate-novar-noblank obj-set-novar-noblank-spec)) ;; Subject Predicate Object @@ -259,16 +265,16 @@ (s/tuple ::subject ::predicate ::object)) (def triple-vec-nopath-spec - (s/tuple ::subject ::predicate-nopath ::object)) + (s/tuple ::subject-nopath ::predicate-nopath ::object-nopath)) (def triple-vec-novar-spec (s/tuple ::subject-novar ::predicate-novar ::object-novar)) (def triple-vec-noblank-spec - (s/tuple ::subject-noblank ::predicate-nopath ::object-noblank)) + (s/tuple ::subject-noblank ::predicate-noblank ::object-noblank)) (def triple-vec-novar-noblank-spec - (s/tuple ::subject-novar-noblank ::predicate-novar ::object-novar-noblank)) + (s/tuple ::subject-novar-noblank ::predicate-novar-noblank ::object-novar-noblank)) ;; Triple Vectors (Coll, no predicates + objects) diff --git a/src/test/com/yetanalytics/flint/spec/triple_test.cljc b/src/test/com/yetanalytics/flint/spec/triple_test.cljc index 87d0bc9..b2677b4 100644 --- a/src/test/com/yetanalytics/flint/spec/triple_test.cljc +++ b/src/test/com/yetanalytics/flint/spec/triple_test.cljc @@ -178,4 +178,126 @@ [:ax/prefix-iri :q] [:ax/literal "w"]]] (s/conform ts/triple-spec - '[[:p1 ?x1 :p2 ?x2] :q "w"])))))) + '[[:p1 ?x1 :p2 ?x2] :q "w"]))) + (testing "and path + var in subject" + (is (= '[:triple.vec/spo + [[:triple/bnodes + [[[:triple/path + [:path/branch + [[:path/op cat] + [:path/paths + [[:path/terminal [:ax/prefix-iri :p1]] + [:path/terminal [:ax/prefix-iri :p2]]]]]]] + [:ax/var ?x]]]] + [:ax/prefix-iri :q] + [:ax/literal "w"]]] + (s/conform ts/triple-spec + '[[(cat :p1 :p2) ?x] :q "w"]))) + (is (= '[:triple.nform/spo + [[[:triple/bnodes + [[[:triple/path + [:path/branch + [[:path/op cat] + [:path/paths + [[:path/terminal [:ax/prefix-iri :p1]] + [:path/terminal [:ax/prefix-iri :p2]]]]]]] + [:ax/var ?x]]]] + [:triple.nform/po + [[[:ax/prefix-iri :q] + [:triple.nform/o + [[:ax/literal "w"]]]]]]]]] + (s/conform ts/triple-spec + '{[(cat :p1 :p2) ?x] {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-nopath-spec + '[[(cat :p1 :p2) ?x] :q "w"]))) + (is (not (s/valid? ts/triple-novar-spec + '[[(cat :p1 :p2) ?x] :q "w"]))) + (is (not (s/valid? ts/triple-noblank-spec + '[[(cat :p1 :p2) ?x] :q "w"]))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '[[(cat :p1 :p2) ?x] :q "w"]))) + (is (not (s/valid? ts/triple-nopath-spec + '[[(cat :p1 :p2) ?x]]))) + (is (not (s/valid? ts/triple-novar-spec + '[[(cat :p1 :p2) ?x]]))) + (is (not (s/valid? ts/triple-noblank-spec + '[[(cat :p1 :p2) ?x]]))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '[[(cat :p1 :p2) ?x]]))) + (is (not (s/valid? ts/triple-nopath-spec + '{[(cat :p1 :p2) ?x] {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-novar-spec + '{[(cat :p1 :p2) ?x] {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-noblank-spec + '{[(cat :p1 :p2) ?x] {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '{[(cat :p1 :p2) ?x] {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-novar-spec + '[(?x ?y) :q "w"]))) + (is (not (s/valid? ts/triple-noblank-spec + '[(?x ?y) :q "w"]))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '[(?x ?y) :q "w"]))) + (is (not (s/valid? ts/triple-novar-spec + '{(?x ?y) {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-noblank-spec + '{(?x ?y) {:q #{"w"}}}))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '{(?x ?y) {:q #{"w"}}})))) + (testing "and path + var in object" + (is (= '[:triple.vec/spo + [[:ax/prefix-iri :x] + [:ax/prefix-iri :q] + [:triple/bnodes + [[[:triple/path + [:path/branch + [[:path/op cat] + [:path/paths + [[:path/terminal [:ax/prefix-iri :r1]] + [:path/terminal [:ax/prefix-iri :r2]]]]]]] + [:ax/literal "v"]]]]]] + (s/conform ts/triple-spec + '[:x :q [(cat :r1 :r2) "v"]]))) + (is (= '[:triple.nform/spo + [[[:ax/prefix-iri :x] + [:triple.nform/po + [[[:ax/prefix-iri :q] + [:triple.nform/o + [[:triple/bnodes + [[[:triple/path + [:path/branch + [[:path/op cat] + [:path/paths + [[:path/terminal [:ax/prefix-iri :r1]] + [:path/terminal [:ax/prefix-iri :r2]]]]]]] + [:ax/literal "v"]]]]]]]]]]]] + (s/conform ts/triple-spec + '{:x {:q #{[(cat :r1 :r2) "v"]}}}))) + (is (not (s/valid? ts/triple-nopath-spec + '[:x :q [(cat :r1 :r2) "v"]]))) + (is (not (s/valid? ts/triple-novar-spec + '[:x :q [:r ?v]]))) + (is (not (s/valid? ts/triple-noblank-spec + '[:x :q [:r ?v]]))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '[:x :q [:r ?v]]))) + (is (not (s/valid? ts/triple-nopath-spec + '{:x {:q #{[(cat :r1 :r2) "v"]}}}))) + (is (not (s/valid? ts/triple-novar-spec + '{:x {:q #{[:r ?v]}}}))) + (is (not (s/valid? ts/triple-noblank-spec + '{:x {:q #{[:r ?v]}}}))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '{:x {:q #{[:r ?v]}}}))) + (is (not (s/valid? ts/triple-novar-spec + '[:x :q (?w ?v)]))) + (is (not (s/valid? ts/triple-noblank-spec + '[:x :q (?w ?v)]))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '[:x :q (?w ?v)]))) + (is (not (s/valid? ts/triple-novar-spec + '{:x {:q #{(?w ?v)}}}))) + (is (not (s/valid? ts/triple-noblank-spec + '{:x {:q #{(?w ?v)}}}))) + (is (not (s/valid? ts/triple-novar-noblank-spec + '{:x {:q #{(?w ?v)}}})))))))