From: Mark Thom Date: Fri, 10 Dec 2021 06:23:03 +0000 (-0700) Subject: get test suite working X-Git-Tag: v0.9.0^2~102 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=bcd33dc8e34cd1190a0325a9f6f803743d323eed;p=scryer-prolog.git get test suite working --- diff --git a/Cargo.lock b/Cargo.lock index 2de5d75c..e706052a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml index 6d27688a..000c117e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/src/arena.rs b/src/arena.rs index 7fafccb1..d0244fae 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -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::()); @@ -379,25 +381,25 @@ unsafe fn drop_slab_in_place(value: &mut AllocSlab) { ptr::drop_in_place(value.payload_offset::()); } ArenaHeaderTag::InputFileStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>>()); } ArenaHeaderTag::OutputFileStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>()); } ArenaHeaderTag::NamedTcpStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>>()); } ArenaHeaderTag::NamedTlsStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>>()); } ArenaHeaderTag::ReadlineStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>()); } ArenaHeaderTag::StaticStringStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>()); } ArenaHeaderTag::ByteStream => { - ptr::drop_in_place(value.payload_offset::()); + ptr::drop_in_place(value.payload_offset::>>()); } ArenaHeaderTag::OssifiedOpDir => { ptr::drop_in_place(value.payload_offset::()); @@ -410,8 +412,13 @@ unsafe fn drop_slab_in_place(value: &mut AllocSlab) { ArenaHeaderTag::TcpListener => { ptr::drop_in_place(value.payload_offset::()); } - ArenaHeaderTag::F64 | ArenaHeaderTag::StandardOutputStream | - ArenaHeaderTag::StandardErrorStream | ArenaHeaderTag::NullStream => { + ArenaHeaderTag::StandardOutputStream => { + ptr::drop_in_place(value.payload_offset::>()); + } + ArenaHeaderTag::StandardErrorStream => { + ptr::drop_in_place(value.payload_offset::>()); + } + ArenaHeaderTag::F64 | ArenaHeaderTag::NullStream => { } } } diff --git a/src/machine/mock_wam.rs b/src/machine/mock_wam.rs index 42d3f600..9524d138 100644 --- a/src/machine/mock_wam.rs +++ b/src/machine/mock_wam.rs @@ -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() } } diff --git a/src/macros.rs b/src/macros.rs index 1b459928..b248080d 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -303,7 +303,6 @@ macro_rules! match_untyped_arena_ptr_pat { | ArenaHeaderTag::ReadlineStream | ArenaHeaderTag::StaticStringStream | ArenaHeaderTag::ByteStream - | ArenaHeaderTag::NullStream | ArenaHeaderTag::StandardOutputStream | ArenaHeaderTag::StandardErrorStream }; diff --git a/tests-pl/issue839-op3.pl b/tests-pl/issue839-op3.pl index 3f362cf6..52d36f95 100644 --- a/tests-pl/issue839-op3.pl +++ b/tests-pl/issue839-op3.pl @@ -1 +1 @@ -:- op(900, fy, [$,@]). \ No newline at end of file +:- op(900, fy, [$,@]). diff --git a/tests/scryer/issues.rs b/tests/scryer/issues.rs index 54deae58..9932786c 100644 --- a/tests/scryer/issues.rs +++ b/tests/scryer/issues.rs @@ -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", ); } diff --git a/tests/scryer/src_tests.rs b/tests/scryer/src_tests.rs index 51caf4a8..1730f0cd 100644 --- a/tests/scryer/src_tests.rs +++ b/tests/scryer/src_tests.rs @@ -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", "");