pass more conformity tests
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "scryer-prolog"
|
name = "scryer-prolog"
|
||||||
version = "0.8.21"
|
version = "0.8.22"
|
||||||
authors = ["Mark Thom <markjordanthom@gmail.com>"]
|
authors = ["Mark Thom <markjordanthom@gmail.com>"]
|
||||||
repository = "https://github.com/mthom/scryer-prolog"
|
repository = "https://github.com/mthom/scryer-prolog"
|
||||||
description = "A modern Prolog implementation written mostly in Rust."
|
description = "A modern Prolog implementation written mostly in Rust."
|
||||||
@@ -14,7 +14,7 @@ cfg-if = "0.1.7"
|
|||||||
downcast = "0.9.1"
|
downcast = "0.9.1"
|
||||||
num = "0.2"
|
num = "0.2"
|
||||||
ordered-float = "0.5.0"
|
ordered-float = "0.5.0"
|
||||||
prolog_parser = "0.8.2"
|
prolog_parser = "0.8.3"
|
||||||
readline_rs_compat = { version = "0.1.7", optional = true }
|
readline_rs_compat = { version = "0.1.7", optional = true }
|
||||||
ref_thread_local = "0.0.0"
|
ref_thread_local = "0.0.0"
|
||||||
|
|
||||||
|
|||||||
@@ -204,6 +204,8 @@ fn continues_with_append(atom: &str, op: &str) -> bool {
|
|||||||
alpha_numeric_char!(oc)
|
alpha_numeric_char!(oc)
|
||||||
} else if capital_letter_char!(ac) {
|
} else if capital_letter_char!(ac) {
|
||||||
alpha_numeric_char!(oc)
|
alpha_numeric_char!(oc)
|
||||||
|
} else if sign_char!(ac) {
|
||||||
|
sign_char!(oc) || decimal_digit_char!(oc)
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -437,25 +439,27 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn print_atom(&mut self, atom: &ClauseName, spec: Option<(usize, Specifier)>) {
|
fn print_atom(&mut self, atom: &ClauseName, spec: Option<(usize, Specifier)>) {
|
||||||
match atom.as_str() {
|
push_space_if_amb!(self, atom.as_str(), {
|
||||||
"" => self.append_str("''"),
|
match atom.as_str() {
|
||||||
";" | "!" => self.append_str(atom.as_str()),
|
"" => self.append_str("''"),
|
||||||
s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
|
";" | "!" => self.append_str(atom.as_str()),
|
||||||
self.append_str(atom.as_str())
|
s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
|
||||||
} else {
|
self.append_str(atom.as_str());
|
||||||
if self.quoted {
|
} else {
|
||||||
self.push_char('\'');
|
if self.quoted {
|
||||||
}
|
self.push_char('\'');
|
||||||
|
}
|
||||||
|
|
||||||
for c in atom.as_str().chars() {
|
for c in atom.as_str().chars() {
|
||||||
self.print_char(c);
|
self.print_char(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.quoted {
|
if self.quoted {
|
||||||
self.push_char('\'');
|
self.push_char('\'');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_char(&mut self, c: char) {
|
fn print_char(&mut self, c: char) {
|
||||||
@@ -468,7 +472,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
'\u{08}' => self.append_str("\\b"), // UTF-8 backspace
|
'\u{08}' => self.append_str("\\b"), // UTF-8 backspace
|
||||||
'\u{07}' => self.append_str("\\a"), // UTF-8 alert
|
'\u{07}' => self.append_str("\\a"), // UTF-8 alert
|
||||||
'\x20' ... '\x7e' => self.push_char(c),
|
'\x20' ... '\x7e' => self.push_char(c),
|
||||||
_ => self.append_str(&format!("\\x{:x}", c as u32))
|
_ => self.append_str(&format!("\\x{:x}\\", c as u32))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -518,7 +522,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
self.append_str(&output_str.trim());
|
self.append_str(&output_str.trim());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
Constant::Number(n) => {
|
Constant::Number(n) => {
|
||||||
let output_str = format!("{}", n);
|
let output_str = format!("{}", n);
|
||||||
|
|
||||||
push_space_if_amb!(self, &output_str, {
|
push_space_if_amb!(self, &output_str, {
|
||||||
@@ -600,7 +604,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
let ct = ClauseType::from(name, 0, fixity);
|
let ct = ClauseType::from(name, 0, fixity);
|
||||||
self.format_clause(iter, 0, ct);
|
self.format_clause(iter, 0, ct);
|
||||||
}),
|
}),
|
||||||
HeapCellValue::NamedStr(arity, name, fixity) => {
|
HeapCellValue::NamedStr(arity, name, fixity) => {
|
||||||
let ct = ClauseType::from(name, arity, fixity);
|
let ct = ClauseType::from(name, arity, fixity);
|
||||||
self.format_clause(iter, arity, ct);
|
self.format_clause(iter, arity, ct);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1668,6 +1668,9 @@ fn test_queries_on_builtins()
|
|||||||
assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),writeq(S+G>B)), B=3, !), 10, R).",
|
assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),writeq(S+G>B)), B=3, !), 10, R).",
|
||||||
[["S = _1", "G = _4", "B = _14", "R = inference_limit_exceeded"]]);
|
[["S = _1", "G = _4", "B = _14", "R = inference_limit_exceeded"]]);
|
||||||
|
|
||||||
|
assert_prolog_success!(&mut wam, "?- X = '\\033\\'.",
|
||||||
|
[["X = '\\x1b\\'"]]);
|
||||||
|
|
||||||
assert_prolog_success!(&mut wam, "?- X = '\\n'.",
|
assert_prolog_success!(&mut wam, "?- X = '\\n'.",
|
||||||
[["X = '\\n'"]]);
|
[["X = '\\n'"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = '\\b'.",
|
assert_prolog_success!(&mut wam, "?- X = '\\b'.",
|
||||||
@@ -1681,6 +1684,9 @@ fn test_queries_on_builtins()
|
|||||||
assert_prolog_success!(&mut wam, "?- X = '\\b\\r\\f\\t\\n'.",
|
assert_prolog_success!(&mut wam, "?- X = '\\b\\r\\f\\t\\n'.",
|
||||||
[["X = '\\b\\r\\f\\t\\n'"]]);
|
[["X = '\\b\\r\\f\\t\\n'"]]);
|
||||||
|
|
||||||
|
assert_prolog_success!(&mut wam, "?- (- (1)) = -(1).");
|
||||||
|
assert_prolog_success!(&mut wam, "?- (- -1) = -(-1).");
|
||||||
|
|
||||||
assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
|
assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
|
||||||
[["X = ((*)=(*))"]]);
|
[["X = ((*)=(*))"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",
|
assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",
|
||||||
|
|||||||
Reference in New Issue
Block a user