%% sugya_test.pl — the case behind each threshold is whole (specs/sugya.md §IV). :- use_module(library(plunit)). :- use_module('../src/halt/anchors'). :- use_module('../src/halt/sugya'). :- begin_tests(sugya). %% Every anchored rule has a kind, a precedent and at least one dissent. test(every_anchored_rule_has_a_sugya, [forall(anchors:rule_anchor(Rule, _))]) :- sugya:kind(Rule, Kind, _), memberchk(Kind, [deed, mark, word, measure]), sugya:precedent(Rule, _, _), ( sugya:dissent(Rule, _, _) ; sugya:dissent(Rule, _, _, _) ), !. %% Nothing is said of a rule that has no anchor (Devarim 4:2). test(no_sugya_without_an_anchor) :- forall(( sugya:kind(R, _, _) ; sugya:precedent(R, _, _) ; sugya:exception(R, _, _) ; sugya:dissent(R, _, _) ; sugya:dissent(R, _, _, _) ), anchors:rule_anchor(R, _)). %% The kinds of sugya.md §II. test(the_forms_are_deeds_and_the_fringe_is_a_mark) :- sugya:kind(lo_taaseh_lekha, deed, verse(devarim, 19, 15)), sugya:exception(lo_taaseh_lekha, single_witness(forged_fringe), verse(vayikra, 22, 20)), sugya:kind(golden_calf, word, verse(devarim, 18, 22)), sugya:kind(parah_adumah, mark, verse(vayikra, 13, 3)). %% sugya_of/2 gathers one rule's record. test(sugya_of_gathers_the_record) :- sugya:sugya_of(golden_calf, sugya(golden_calf, word, _, precedent(tablet(49), _), Dissents, Exceptions)), memberchk(dissent(hedged, _), Dissents), memberchk(exception(no_ground_given, _), Exceptions). :- end_tests(sugya).