From 908b0a5712fbfa91f9586f50437210f72eaf27fd Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 16 Sep 2018 10:57:14 -0600 Subject: [PATCH] correct new copier bug --- src/prolog/copier.rs | 3 --- src/tests.rs | 6 +++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/prolog/copier.rs b/src/prolog/copier.rs index 6b206abb..2ee845c6 100644 --- a/src/prolog/copier.rs +++ b/src/prolog/copier.rs @@ -84,7 +84,6 @@ pub(crate) trait CopierTarget match rd.clone() { Addr::HeapCell(hc) if hc >= old_h => { self[threshold] = HeapCellValue::Addr(rd); - scan += 1; }, addr @ Addr::HeapCell(..) | addr @ Addr::StackCell(..) => { if rd == addr { @@ -92,8 +91,6 @@ pub(crate) trait CopierTarget } else { self[threshold] = HeapCellValue::Addr(addr); } - - scan += 1; }, _ => { trail.push((Ref::HeapCell(a), self[a].clone())); diff --git a/src/tests.rs b/src/tests.rs index 01ba96ec..c6f81bab 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1484,7 +1484,11 @@ fn test_queries_on_builtins() assert_prolog_failure!(&mut wam, "?- duplicate_term(g(X), f(X))."); assert_prolog_success!(&mut wam, "?- duplicate_term(f(X), f(X)).", [["X = _1"]]); - + assert_prolog_success!(&mut wam, "?- duplicate_term([[[[X, Y], Y], X]], Term).", + [["Term = [[[[_22, _26], _26], _22]]", "X = _2", "Y = _0"]]); + assert_prolog_success!(&mut wam, "?- duplicate_term([X, [Y, [X]]], Term).", + [["Term = [_12, [_16, [_12]]]", "X = _0", "Y = _4"]]); + // test duplicate_term on cyclic terms. assert_prolog_failure!(&mut wam, "?- X = g(X, Y), Y = f(X), duplicate_term(Y, g(Z))."); assert_prolog_success!(&mut wam, "?- X = g(X, Y), Y = f(X), duplicate_term(Y, f(Z)).", -- 2.54.0