From 360039eb501963e3255cbc788053b4d818c59551 Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 17 May 2023 14:43:12 +0200 Subject: [PATCH 1/4] revert-shrinker-fix --- src/core/QCheck.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/QCheck.ml b/src/core/QCheck.ml index f64de762..2809e6ed 100644 --- a/src/core/QCheck.ml +++ b/src/core/QCheck.ml @@ -760,7 +760,7 @@ module Shrink = struct match l with | [] -> () | [_] -> yield [] - | [x;y] -> yield []; yield [x]; if x <> y then yield [y] + | [x;y] -> yield []; yield [x]; yield [y] | _::_ -> let len = List.length l in let xs,ys = split l ((1 + len) / 2) [] in From 4fc1283c6e5c448177a65e6e0f86aa56b02fa7e6 Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 17 May 2023 18:14:18 +0200 Subject: [PATCH 2/4] Update expected outputs --- test/core/QCheck_expect_test.expected.ocaml4.32 | 1 + test/core/QCheck_expect_test.expected.ocaml4.64 | 1 + test/core/QCheck_expect_test.expected.ocaml5.32 | 1 + test/core/QCheck_expect_test.expected.ocaml5.64 | 1 + test/core/QCheck_unit_tests.ml | 6 +++--- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/core/QCheck_expect_test.expected.ocaml4.32 b/test/core/QCheck_expect_test.expected.ocaml4.32 index 865566a8..e5de618b 100644 --- a/test/core/QCheck_expect_test.expected.ocaml4.32 +++ b/test/core/QCheck_expect_test.expected.ocaml4.32 @@ -74,6 +74,7 @@ random seed: 1234 [1; 1] [] [1] +[1] [0; 1] [1; 0] diff --git a/test/core/QCheck_expect_test.expected.ocaml4.64 b/test/core/QCheck_expect_test.expected.ocaml4.64 index 4b32e050..7accc9a8 100644 --- a/test/core/QCheck_expect_test.expected.ocaml4.64 +++ b/test/core/QCheck_expect_test.expected.ocaml4.64 @@ -106,6 +106,7 @@ random seed: 1234 [1; 1] [] [1] +[1] [0; 1] [1; 0] diff --git a/test/core/QCheck_expect_test.expected.ocaml5.32 b/test/core/QCheck_expect_test.expected.ocaml5.32 index c8218b2e..f5ec356f 100644 --- a/test/core/QCheck_expect_test.expected.ocaml5.32 +++ b/test/core/QCheck_expect_test.expected.ocaml5.32 @@ -84,6 +84,7 @@ random seed: 1234 [2; 2] [] [2] +[2] [1; 2] [2; 1] diff --git a/test/core/QCheck_expect_test.expected.ocaml5.64 b/test/core/QCheck_expect_test.expected.ocaml5.64 index ed35317c..1572ed29 100644 --- a/test/core/QCheck_expect_test.expected.ocaml5.64 +++ b/test/core/QCheck_expect_test.expected.ocaml5.64 @@ -116,6 +116,7 @@ random seed: 1234 [2; 2] [] [2] +[2] [1; 2] [2; 1] diff --git a/test/core/QCheck_unit_tests.ml b/test/core/QCheck_unit_tests.ml index f8e3f432..349896b7 100644 --- a/test/core/QCheck_unit_tests.ml +++ b/test/core/QCheck_unit_tests.ml @@ -85,8 +85,8 @@ module Shrink = struct List.iter (alco_check Alcotest.string (trace_false Shrink.string) "on repeated failure") [ ("string \"\"", "", []); ("string \"a\"", "a", [""]); - ("string \"aa\"", "aa", [""; "a"]); - ("string \"aaaa\"", "aaaa", ["aa"; "aa"; "aaa"]); + ("string \"aa\"", "aa", [""; "a"; "a"]); + ("string \"aaaa\"", "aaaa", ["aa"; "aa"; "aaa"; "aaa"]); ("string \"abcd\"", "abcd", ["ab"; "cd"; "acd"; "bcd"; "aacd"; "abbd"; "abcc"]); ("string \"E'*\"", "E'*", ["E'"; "*"; "E*"; "'*"; "S'*"; "L'*"; "H'*"; "F'*"; "ED*"; "E5*"; "E.*"; "E**"; "E(*"; "E'E"; "E'7"; "E'0"; "E'-"; "E'+"]); @@ -101,7 +101,7 @@ module Shrink = struct "vi5x92mgG"; "vi5x92sgG"; "vi5x92vgG"; "vi5x92wgG"; "vi5x92xdG"; "vi5x92xfG"; "vi5x92xgT"; "vi5x92xgM"; "vi5x92xgJ"; "vi5x92xgH"]); - ("string \"~~~~\"", "~~~~", ["~~"; "~~"; "~~~"; "p~~~"; "w~~~"; "{~~~"; "}~~~"; "~p~~"; + ("string \"~~~~\"", "~~~~", ["~~"; "~~"; "~~~"; "~~~"; "p~~~"; "w~~~"; "{~~~"; "}~~~"; "~p~~"; "~w~~"; "~{~~"; "~}~~"; "~~p~"; "~~w~"; "~~{~"; "~~}~"; "~~~p"; "~~~w"; "~~~{"; "~~~}"]); ]; List.iter (alco_check Alcotest.string (trace_true Shrink.string) "on repeated success") From aaf575e0e67811b5af51c644d207b978fee4b51f Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 17 May 2023 18:14:39 +0200 Subject: [PATCH 3/4] Add regression test case --- test/core/QCheck_unit_tests.ml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/core/QCheck_unit_tests.ml b/test/core/QCheck_unit_tests.ml index 349896b7..5360376f 100644 --- a/test/core/QCheck_unit_tests.ml +++ b/test/core/QCheck_unit_tests.ml @@ -113,6 +113,10 @@ module Shrink = struct ("string \"E'*\"", "E'*", ["E'"; ""]); ("string \"vi5x92xgG\"", "vi5x92xgG", ["vi5x9"; "vi5"; "vi"; ""]); ] + let test_list_spine_compare () = + let run_test () = QCheck.Shrink.list_spine [pred;succ] ignore in + Alcotest.(check unit) "doesn't compare elements" () @@ run_test () + let tests = ("Shrink", Alcotest.[ test_case "int" `Quick test_int; test_case "int32" `Quick test_int32; @@ -121,6 +125,7 @@ module Shrink = struct test_case "char_numeral" `Quick test_char_numeral; test_case "char_printable" `Quick test_char_printable; test_case "string" `Quick test_string; + test_case "list_spine" `Quick test_list_spine_compare; ]) end From 0133ea2d480a6d94c0659eca6b3752b09cb4e082 Mon Sep 17 00:00:00 2001 From: Jan Midtgaard Date: Wed, 17 May 2023 18:46:40 +0200 Subject: [PATCH 4/4] Add CHANGELOG entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 035f8a04..570f5a94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## NEXT RELEASE -- ... +- Roll back the `Shrink.list_spine` fix, as it was utilizing polymorphic + equality that can raise an exception on function comparison. ## 0.21