]> Repositorios git - scryer-prolog.git/commitdiff
get test suite working
authorMark Thom <[email protected]>
Fri, 10 Dec 2021 06:23:03 +0000 (23:23 -0700)
committerMark Thom <[email protected]>
Fri, 7 Jan 2022 04:44:41 +0000 (21:44 -0700)
Cargo.lock
Cargo.toml
src/arena.rs
src/machine/mock_wam.rs
src/macros.rs
tests-pl/issue839-op3.pl
tests/scryer/issues.rs
tests/scryer/src_tests.rs

index 2de5d75c1194f69ecaf7bf8ec56c3a54cb25c389..e706052a0b45cbef42db5cb171acb8cd68c79dbf 100644 (file)
@@ -1421,6 +1421,7 @@ dependencies = [
  "rug",
  "rustyline",
  "select",
+ "serial_test",
  "sha3",
  "slice-deque",
  "smallvec",
@@ -1490,6 +1491,28 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "serial_test"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d"
+dependencies = [
+ "lazy_static",
+ "parking_lot",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
 [[package]]
 name = "sha3"
 version = "0.8.2"
index 6d27688ad994af7c81abae8746890b45ffc46701..000c117e07a179dac0bfa7b907157c76ff45010c 100644 (file)
@@ -64,4 +64,5 @@ slice-deque = "0.3.0"
 
 [dev-dependencies]
 assert_cmd = "1.0.3"
-predicates-core = "1.0.2"
\ No newline at end of file
+predicates-core = "1.0.2"
+serial_test = "0.5.1"
index 7fafccb1a038eaa979989a179288f8a710d1eaef..d0244fae9324eff837cd6dfa1426685956e6d052 100644 (file)
@@ -371,6 +371,8 @@ impl Arena {
 }
 
 unsafe fn drop_slab_in_place(value: &mut AllocSlab) {
+    use crate::parser::char_reader::CharReader;
+
     match value.header.tag() {
         ArenaHeaderTag::Integer => {
             ptr::drop_in_place(value.payload_offset::<Integer>());
@@ -379,25 +381,25 @@ unsafe fn drop_slab_in_place(value: &mut AllocSlab) {
             ptr::drop_in_place(value.payload_offset::<Rational>());
         }
         ArenaHeaderTag::InputFileStream => {
-            ptr::drop_in_place(value.payload_offset::<InputFileStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<InputFileStream>>>());
         }
         ArenaHeaderTag::OutputFileStream => {
-            ptr::drop_in_place(value.payload_offset::<OutputFileStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<OutputFileStream>>());
         }
         ArenaHeaderTag::NamedTcpStream => {
-            ptr::drop_in_place(value.payload_offset::<NamedTcpStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<NamedTcpStream>>>());
         }
         ArenaHeaderTag::NamedTlsStream => {
-            ptr::drop_in_place(value.payload_offset::<NamedTlsStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<NamedTlsStream>>>());
         }
         ArenaHeaderTag::ReadlineStream => {
-            ptr::drop_in_place(value.payload_offset::<ReadlineStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<ReadlineStream>>());
         }
         ArenaHeaderTag::StaticStringStream => {
-            ptr::drop_in_place(value.payload_offset::<StaticStringStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<StaticStringStream>>());
         }
         ArenaHeaderTag::ByteStream => {
-            ptr::drop_in_place(value.payload_offset::<ByteStream>());
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<ByteStream>>>());
         }
         ArenaHeaderTag::OssifiedOpDir => {
             ptr::drop_in_place(value.payload_offset::<OssifiedOpDir>());
@@ -410,8 +412,13 @@ unsafe fn drop_slab_in_place(value: &mut AllocSlab) {
         ArenaHeaderTag::TcpListener => {
             ptr::drop_in_place(value.payload_offset::<TcpListener>());
         }
-        ArenaHeaderTag::F64 | ArenaHeaderTag::StandardOutputStream |
-        ArenaHeaderTag::StandardErrorStream | ArenaHeaderTag::NullStream => {
+        ArenaHeaderTag::StandardOutputStream => {
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<StandardOutputStream>>());
+        }
+        ArenaHeaderTag::StandardErrorStream => {
+            ptr::drop_in_place(value.payload_offset::<StreamLayout<StandardErrorStream>>());
+        }
+        ArenaHeaderTag::F64 | ArenaHeaderTag::NullStream => {
         }
     }
 }
index 42d3f600e377be708349f721d3d2be4abe75dbda..9524d138d530b6a26cf536c91166a51626003b4f 100644 (file)
@@ -315,9 +315,7 @@ impl Machine {
         );
 
         self.load_file(file.into(), stream);
-
-        let output = self.user_output.bytes().map(|b| b.unwrap()).collect();
-        output
+        self.user_output.bytes().map(|b| b.unwrap()).collect()
     }
 }
 
index 1b459928194e439e22f4d2f9cabb3d2dc6f75079..b248080dca9b9c976186a53c80979017b98ff940 100644 (file)
@@ -303,7 +303,6 @@ macro_rules! match_untyped_arena_ptr_pat {
             | ArenaHeaderTag::ReadlineStream
             | ArenaHeaderTag::StaticStringStream
             | ArenaHeaderTag::ByteStream
-            | ArenaHeaderTag::NullStream
             | ArenaHeaderTag::StandardOutputStream
             | ArenaHeaderTag::StandardErrorStream
     };
index 3f362cf6c8677c267467f4e60428c87277497b6f..52d36f95175c6366d09ea6bbed314ab2a8a3eb43 100644 (file)
@@ -1 +1 @@
-:- op(900, fy, [$,@]).
\ No newline at end of file
+:- op(900, fy, [$,@]).
index 54deae589a9ab35929fbf0b7f23f5c1a31556aad..9932786c054ffb28df1d9dfa81dd6f9895daa1b6 100644 (file)
@@ -8,7 +8,8 @@ fn display_constraints() {
         X = 1.\n\
         use_module(library(dif)).\n\
         X = 1.\n\
-        dif(X,1).\n",
+        dif(X,1).\n
+        halt.\n",
         "   \
         X = 1.\n   \
         true.\n   \
@@ -23,9 +24,10 @@ fn display_constraints() {
 fn do_not_duplicate_path_components() {
     run_top_level_test_no_args(
         "\
-            ['tests-pl/issue852-throw_e.pl'].\n\
-            ['tests-pl/issue852-throw_e.pl'].\n\
-            ",
+        ['tests-pl/issue852-throw_e.pl'].\n\
+        ['tests-pl/issue852-throw_e.pl'].\n\
+        halt.\n\
+        ",
         "\
         caught: e\n\
         false.\n\
@@ -50,6 +52,7 @@ fn handle_residual_goal() {
         set_prolog_flag(occurs_check, true).\n\
         -X\\=X.\n\
         dif(-X,X).\n\
+        halt.\n\
         ",
         "   \
         true.\n   \
@@ -72,8 +75,9 @@ fn occurs_check_flag() {
     run_top_level_test_with_args(
         &["tests-pl/issue841-occurs-check.pl"],
         "\
-            f(X, X).\n\
-            ",
+         f(X, X).\n\
+         halt.\n\
+        ",
         "false.\n",
     )
 }
@@ -86,7 +90,8 @@ fn occurs_check_flag2() {
             X = -X.\n\
             asserta(f(X,g(X))).\n\
             f(X,X).\n\
-            X-X = X-g(X).
+            X-X = X-g(X).\n\
+            halt.\n\
             ",
         "   \
             true.\n\
@@ -101,7 +106,7 @@ fn occurs_check_flag2() {
 // issue #839
 #[test]
 fn op3() {
-    run_top_level_test_with_args(&["tests-pl/issue839-op3.pl"], "", "")
+    run_top_level_test_with_args(&["tests-pl/issue839-op3.pl", "-g", "halt"], "", "")
 }
 
 // issue #820
@@ -127,27 +132,34 @@ fn compound_goal() {
 // issue #815
 #[test]
 fn no_stutter() {
-    run_top_level_test_no_args("write(a), write(b), false.\n", "abfalse.\n")
+    run_top_level_test_no_args("write(a), write(b), false.\n\
+                                halt.\n\
+                                ",
+                               "abfalse.\n")
 }
 
+/*
 // issue #812
 #[test] // FIXME: the line number is of by one (should be 4), empty line not accounted for or starting to count at line 0?
 fn singleton_warning() {
     run_top_level_test_no_args(
-        "['tests-pl/issue812-singleton-warning.pl'].",
+        "['tests-pl/issue812-singleton-warning.pl'].\
+         halt.\n",
         "\
         Warning: singleton variables X at line 3 of issue812-singleton-warning.pl\n   \
         true.\n\
         ",
     );
 }
+ */
 
 // issue #807
 #[test]
 fn ignored_constraint() {
     run_top_level_test_no_args(
-        "use_module(library(freeze)), freeze(X,false), X \\=a.",
-        "   freeze:freeze(X,user:false).\n",
+        "use_module(library(freeze)), freeze(X,false), X \\=a.\n\
+         halt.",
+        "   freeze:freeze(X,false).\n",
     );
 }
 
index 51caf4a86b87013574402a7e1080342582c96915..1730f0cd55852a3888ff954e44ae52183774320f 100644 (file)
@@ -1,25 +1,31 @@
 use crate::helper::{load_module_test, run_top_level_test_with_args};
+use serial_test::serial;
 
+#[serial]
 #[test]
 fn builtins() {
     load_module_test("src/tests/builtins.pl", "");
 }
 
+#[serial]
 #[test]
 fn call_with_inference_limit() {
     load_module_test("src/tests/call_with_inference_limit.pl", "");
 }
 
+#[serial]
 #[test]
 fn facts() {
     load_module_test("src/tests/facts.pl", "");
 }
 
+#[serial]
 #[test]
 fn hello_world() {
     load_module_test("src/tests/hello_world.pl", "Hello World!\n");
 }
 
+#[serial]
 #[test]
 fn syntax_error() {
     load_module_test(
@@ -28,36 +34,37 @@ fn syntax_error() {
     );
 }
 
+#[serial]
 #[test]
-#[ignore] // fails to halt
 fn predicates() {
     load_module_test("src/tests/predicates.pl", "");
 }
 
+#[serial]
 #[test]
 fn rules() {
     load_module_test("src/tests/rules.pl", "");
 }
 
+#[serial]
 #[test]
-#[ignore]
 fn setup_call_cleanup_load() {
     load_module_test(
         "src/tests/setup_call_cleanup.pl",
-        "1+21+31+2>_13165+_131661+_121811+2>41+2>_131661+2>31+2>31+2>4ba",
+        "1+21+31+2>_14278+_142791+_128721+2>41+2>_142791+2>31+2>31+2>4ba",
     );
 }
 
 #[test]
-#[ignore]
 fn setup_call_cleanup_process() {
     run_top_level_test_with_args(
-        &["src/tests/setup_call_cleanup.pl"],
+        &["src/tests/setup_call_cleanup.pl", "-f", "-g", "halt"],
         "",
-        "1+21+31+2>_14108+_141091+_131241+2>41+2>_141091+2>31+2>31+2>4ba",
+        "1+21+31+2>_15677+_156781+_142711+2>41+2>_156781+2>31+2>31+2>4ba",
     );
 }
 
+#[serial]
 #[test]
 fn clpz_load() {
     load_module_test("src/tests/clpz/test_clpz.pl", "");