From: Mark Date: Tue, 4 Jul 2023 18:13:43 +0000 (-0600) Subject: revise iso_conformity_tests.pl in response to new ambiguity check of #1860 X-Git-Tag: v0.9.2~89^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=refs%2Fremotes%2Forigin%2Fiso_conformity_tests;p=scryer-prolog.git revise iso_conformity_tests.pl in response to new ambiguity check of #1860 --- diff --git a/src/heap_print.rs b/src/heap_print.rs index 4e7781b7..7cd8b713 100644 --- a/src/heap_print.rs +++ b/src/heap_print.rs @@ -44,6 +44,15 @@ impl DirectedOp { } } + #[inline] + fn is_prefix(&self )-> bool { + match self { + &DirectedOp::Left(_name, cell) | &DirectedOp::Right(_name, cell) => { + is_prefix!(cell.get_spec() as u32) + } + } + } + #[inline] fn is_negative_sign(&self) -> bool { match self { @@ -604,7 +613,6 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> { self.iter.pop_stack(); self.state_stack.push(TokenOrRedirect::Atom(atom!("..."))); - self.state_stack.push(TokenOrRedirect::Space); self.state_stack.push(TokenOrRedirect::Atom(name)); return; @@ -613,7 +621,13 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> { let op = DirectedOp::Left(name, spec); self.state_stack.push(TokenOrRedirect::CompositeRedirect(max_depth, op)); - self.state_stack.push(TokenOrRedirect::Space); + + /* + if fetch_op_spec(name, 2, self.op_dir).is_some() { + self.state_stack.push(TokenOrRedirect::Space); + } + */ + self.state_stack.push(TokenOrRedirect::Atom(name)); } else { match name.as_str() { @@ -938,13 +952,17 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> { } fn print_number(&mut self, max_depth: usize, n: NumberFocus, op: &Option) { - let add_brackets = if let Some(op) = op { - op.is_negative_sign() && !n.is_negative() + let (add_brackets, op_is_prefix) = if let Some(op) = op { + (op.is_negative_sign() && !n.is_negative(), op.is_prefix()) } else { - false + (false, false) }; if add_brackets { + if op_is_prefix && !self.outputter.ends_with(" ") { + push_char!(self, ' '); + } + push_char!(self, '('); } @@ -1333,8 +1351,10 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> { if let Some(ref op) = &op { if !self.outputter.ends_with(" ") { - if op.is_left() && requires_space(op.as_atom().as_str(), "(") { - self.state_stack.push(TokenOrRedirect::Space); + if op.is_left() { + if op.is_prefix() || requires_space(op.as_atom().as_str(), "(") { + self.state_stack.push(TokenOrRedirect::Space); + } } } } @@ -1457,7 +1477,9 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> { let mut result = String::new(); if let Some(ref op) = op { - if printer.outputter.ends_with(&format!(" {}", op.as_atom().as_str())) { + let op_is_prefix = op.is_prefix() && op.is_left(); + + if op_is_prefix || printer.outputter.ends_with(&format!(" {}", op.as_atom().as_str())) { result.push(' '); } diff --git a/tests-pl/iso-conformity-tests.pl b/tests-pl/iso-conformity-tests.pl index 630b2baa..c86620da 100644 --- a/tests-pl/iso-conformity-tests.pl +++ b/tests-pl/iso-conformity-tests.pl @@ -265,31 +265,31 @@ test_218 :- writeq_term_to_chars(-(1*2), Chars), Chars == "- (1*2)". test_140 :- writeq_term_to_chars(-a, Chars), - Chars == "- a". + Chars == "-a". test_184 :- writeq_term_to_chars(-(-), Chars), Chars == "- (-)". test_185 :- writeq_term_to_chars(-[-], Chars), - Chars == "- [-]". + Chars == "-[-]". test_188 :- writeq_term_to_chars(-p(c), Chars), - Chars == "- p(c)". + Chars == "-p(c)". test_189 :- writeq_term_to_chars(-{}, Chars), - Chars == "- {}". + Chars == "-{}". test_190 :- writeq_term_to_chars(-{a}, Chars), - Chars == "- {a}". + Chars == "-{a}". test_191 :- writeq_term_to_chars(-(-a), Chars), - Chars == "- - a". + Chars == "- -a". test_192 :- writeq_term_to_chars(-(-(-a)), Chars), - Chars == "- - - a". + Chars == "- - -a". -test_216 :- writeq_term_to_chars(-(-1), Chars), - Chars == "- -1". +test_216 :- writeq_term_to_chars(-(-(1)), Chars), + Chars == "- - (1)". test_215_248_249 :- setup_call_cleanup(op(100,yfx,~), @@ -307,14 +307,14 @@ test_215_248_249 :- test_278 :- setup_call_cleanup(op(9,xfy,.), ( writeq_term_to_chars(-[1], Chars), - Chars == "- [1]" + Chars == "-[1]" ), op(0,xfy,.)). test_279_296 :- setup_call_cleanup(op(9,xf,'$VAR'), ( writeq_term_to_chars(-'$VAR'(0), Chars0), - Chars0 == "- A", + Chars0 == "-A", writeq_term_to_chars('$VAR'(0), Chars1), Chars1 == "A" ), @@ -340,7 +340,7 @@ test_67 :- setup_call_cleanup(( current_op(P,fy,+), op(P,fy,+)). test_257 :- writeq_term_to_chars([+{a},+[]], Chars), - Chars == "[+ {a},+ []]". + Chars == "[+{a},+[]]". test_68 :- [(:-)|(:-)]=[:-|:-]. @@ -567,7 +567,7 @@ test_131_132_133 :- C0 == "' op' '1 '", read_from_chars("' op'[].", T1), writeq_term_to_chars(T1, C1), - C1 == "' op' []" + C1 == "' op'[]" ), op(0, fx, ' op') ). @@ -595,7 +595,7 @@ test_142_143_144_221_258 :- C1 == "[1]", read_from_chars("-[1].", T2), writeq_term_to_chars(T2, C2), - C2 == "- [1]", + C2 == "-[1]", read_from_chars("X = 1.e.", T3), writeq_term_to_chars(T3, C3), C3 == "A=[1|e]", @@ -934,7 +934,7 @@ test_274_275 :- setup_call_cleanup(op(20,fx,--), ( read_from_chars("--(a).", T0), writeq_term_to_chars(T0, C0), - C0 == "-- a", + C0 == "--a", op(0,fx,--), read_from_chars("--(a).", T1), writeq_term_to_chars(T1, C1), diff --git a/tests/scryer/issues.rs b/tests/scryer/issues.rs index af22252a..f1735e78 100644 --- a/tests/scryer/issues.rs +++ b/tests/scryer/issues.rs @@ -54,10 +54,10 @@ fn handle_residual_goal() { true.\n \ true.\n \ false.\n \ - X = - X.\n \ - dif:dif(- X,X).\n \ + X = -X.\n \ + dif:dif(-X,X).\n \ false.\n \ - Vars = [X], dif:dif(- X,X).\n \ + Vars = [X], dif:dif(-X,X).\n \ true.\n \ true.\n \ true.\n\