diff --git a/src/clue-matches-tests.c b/src/clue-matches-tests.c index 466f9970f105a14c36fba9d8881cf600905edf8f..dc28354521a05f6ff1a4cea76443e298b4857066 100644 --- a/src/clue-matches-tests.c +++ b/src/clue-matches-tests.c @@ -25,13 +25,8 @@ #include "word-list-test-utils.h" #include "test-utils.h" -#define ADD_IPUZ_TEST(test_name, file_name) \ - g_test_add ("/clue_matches/" #test_name, \ - Fixture, \ - "tests/clue-matches/" #file_name, \ - fixture_set_up, \ - test_name, \ - fixture_tear_down) + +/* Helper code */ typedef struct { WordList *word_list; @@ -109,6 +104,7 @@ test_clue_matches (WordList *word_list, g_assert_true (word_array_equals (clue_matches, expected_word_array)); } + /* Tests */ #define ASSERT_CLUE_MATCHES(DIRECTION, INDEX, ...) \ @@ -122,33 +118,96 @@ test_clue_matches (WordList *word_list, ASSERT_CLUE_MATCHES(DIRECTION, INDEX, NULL); static void -test_egg_ipuz (Fixture *fixture, gconstpointer user_data) +test_simple_across_ipuz (Fixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 2, "EGGS", "EGGO", "EGGY"); } +static void +test_simple_down_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "EGGS", "EGGO", "EGGY"); +} + static void test_valid_intersection_ipuz (Fixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 1, "WORD", "WORM"); - ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "EDIT", "EMIT"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "EDIT", "EMIT"); } static void test_invalid_intersection_ipuz (Fixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_ACROSS, 3); - ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_DOWN, 3); + ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_DOWN, 3); +} + +static void +test_dense_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "WORD"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 1, "ARIA"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 2, "LINT"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 3, "LAKE"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 0, "WALL"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 1, "ORIA"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 2, "RINK"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "DATE"); } +static void +test_block_cells_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ADD", "AID", "AND", "AMD"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 0, "AXES", "AXIS"); +} + +static void +test_null_cells_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ADD", "AID", "AND", "AMD"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 0, "AXES", "AXIS"); +} + +static void +test_rebus_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "REBUS", "REMUS"); + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 2, "BANANA", "MANANA"); +} + +/* FIXME(tests): See https://gitlab.gnome.org/jrb/crosswords/-/issues/313. +static void +test_duplicate_words_ipuz (Fixture *fixture, gconstpointer user_data) +{ + ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ZERO"); + ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_DOWN, 0); +} +*/ + +#define ADD_IPUZ_TEST(test_name, file_name) \ + g_test_add ("/clue_matches/" #test_name, \ + Fixture, \ + "tests/clue-matches/" #file_name, \ + fixture_set_up, \ + test_name, \ + fixture_tear_down) + /* FIXME(tests): Measure performance. */ -/* FIXME(tests): Add more tests. */ int main (int argc, char **argv) { g_test_init (&argc, &argv, NULL); - ADD_IPUZ_TEST (test_egg_ipuz, egg.ipuz); - ADD_IPUZ_TEST (test_valid_intersection_ipuz, valid-intersection.ipuz); + + ADD_IPUZ_TEST (test_simple_across_ipuz, simple-across.ipuz); + ADD_IPUZ_TEST (test_simple_down_ipuz, simple-down.ipuz); + ADD_IPUZ_TEST (test_valid_intersection_ipuz, valid-intersection.ipuz); ADD_IPUZ_TEST (test_invalid_intersection_ipuz, invalid-intersection.ipuz); + ADD_IPUZ_TEST (test_dense_ipuz, dense.ipuz); + ADD_IPUZ_TEST (test_block_cells_ipuz, block-cells.ipuz); + ADD_IPUZ_TEST (test_null_cells_ipuz, null-cells.ipuz); + ADD_IPUZ_TEST (test_rebus_ipuz, rebus.ipuz); + return g_test_run (); } diff --git a/src/tests/clue-matches/block-cells.ipuz b/src/tests/clue-matches/block-cells.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..7b938d00d91c2fa5048aa20a8a733203db6dfa69 --- /dev/null +++ b/src/tests/clue-matches/block-cells.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + "#" + ], + [ + 0, + "#", + 3, + 4 + ], + [ + 5, + 6, + "#", + 0 + ], + [ + 7, + 0, + "#", + 0 + ] + ], + "solution" : [ + [ + "A", + null, + "D", + null + ], + [ + "X", + null, + null, + null + ], + [ + null, + null, + null, + null + ], + [ + "S", + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 3, + null + ], + [ + 5, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 4, + null + ], + [ + 6, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/dense.ipuz b/src/tests/clue-matches/dense.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..69917d5b70e5f35b89888c3bec0a2a8840de47a4 --- /dev/null +++ b/src/tests/clue-matches/dense.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4 + ], + [ + 5, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "W", + "O", + "R", + "D" + ], + [ + "A", + "R", + "I", + "A" + ], + [ + "L", + "I", + "N", + "T" + ], + [ + "L", + "A", + "K", + "E" + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/duplicate-words.ipuz b/src/tests/clue-matches/duplicate-words.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..75ebc9c8a7f024f95a9535285266082d08d63e95 --- /dev/null +++ b/src/tests/clue-matches/duplicate-words.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4 + ], + [ + 5, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "Z", + "E", + "R", + "O" + ], + [ + "E", + null, + null, + null + ], + [ + "R", + null, + null, + null + ], + [ + null, + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/null-cells.ipuz b/src/tests/clue-matches/null-cells.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..6987dfd4de7aa50c77eb225119dca832d998b5a3 --- /dev/null +++ b/src/tests/clue-matches/null-cells.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + null + ], + [ + 0, + null, + 3, + 4 + ], + [ + 5, + 6, + null, + 0 + ], + [ + 7, + 0, + null, + 0 + ] + ], + "solution" : [ + [ + "A", + null, + "D", + null + ], + [ + "X", + null, + null, + null + ], + [ + null, + null, + null, + null + ], + [ + "S", + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 3, + null + ], + [ + 5, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 4, + null + ], + [ + 6, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/rebus.ipuz b/src/tests/clue-matches/rebus.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..b0dd753456da257e0a3df9bacb0c5332685daf0a --- /dev/null +++ b/src/tests/clue-matches/rebus.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4 + ], + [ + 5, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "R", + "E", + null, + "US" + ], + [ + null, + null, + "ANA", + null + ], + [ + null, + null, + "N", + null + ], + [ + null, + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/egg.ipuz b/src/tests/clue-matches/simple-across.ipuz similarity index 100% rename from src/tests/clue-matches/egg.ipuz rename to src/tests/clue-matches/simple-across.ipuz diff --git a/src/tests/clue-matches/simple-down.ipuz b/src/tests/clue-matches/simple-down.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..b7953ed14f25d47c06a5132800a8252f5bd65723 --- /dev/null +++ b/src/tests/clue-matches/simple-down.ipuz @@ -0,0 +1,106 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword-1", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 4, + "height" : 4 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4 + ], + [ + 5, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + "E" + ], + [ + null, + null, + null, + "G" + ], + [ + null, + null, + null, + "G" + ], + [ + null, + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ] + ] + } +} \ No newline at end of file