1
#include <glib.h>
2
#include <libipuz/libipuz.h>
3
#include <locale.h>
4

            
5
static void
6
1
test_barred_cells (void)
7
{
8
1
  g_autoptr (IPuzPuzzle) puzzle_a = NULL;
9
1
  g_autoptr (GError) error = NULL;
10
1
  g_autofree gchar *path = NULL;
11
1
  IPuzCellCoord coord = {
12
    .row = 1,
13
    .column = 2,
14
  };
15

            
16
1
  setlocale(LC_ALL, "en_US.utf8");
17

            
18
1
  path = g_test_build_filename (G_TEST_DIST, "barred.ipuz", NULL);
19
1
  puzzle_a = ipuz_puzzle_new_from_file (path, &error);
20
1
  g_assert (error == NULL);
21

            
22
1
  g_assert (ipuz_barred_get_cell_bars (IPUZ_BARRED (puzzle_a), coord) ==
23
            (IPUZ_STYLE_SIDES_TOP | IPUZ_STYLE_SIDES_LEFT | IPUZ_STYLE_SIDES_BOTTOM));
24
1
}
25

            
26
static void
27
1
test_barred_set_bars (void)
28
{
29
1
  g_autoptr (IPuzPuzzle) puzzle_a = NULL;
30
1
  g_autoptr (GError) error = NULL;
31
1
  g_autofree gchar *path = NULL;
32
1
  IPuzCellCoord coord = {
33
    .row = 1,
34
    .column = 2,
35
  };
36
  GArray *coords;
37

            
38
1
  setlocale(LC_ALL, "en_US.utf8");
39

            
40
1
  coords = g_array_new (FALSE, FALSE, sizeof (IPuzCellCoord));
41
1
  path = g_test_build_filename (G_TEST_DIST, "barred.ipuz", NULL);
42
1
  puzzle_a = ipuz_puzzle_new_from_file (path, &error);
43
1
  g_assert (error == NULL);
44

            
45
1
  ipuz_barred_set_cell_bars (IPUZ_BARRED (puzzle_a), coord, IPUZ_STYLE_SIDES_RIGHT);
46
1
  g_assert (ipuz_barred_get_cell_bars (IPUZ_BARRED (puzzle_a), coord) ==
47
            (IPUZ_STYLE_SIDES_RIGHT));
48
1
  g_array_append_val (coords, coord);
49

            
50
1
  coord.column += 3;
51
1
  ipuz_barred_set_cell_bars (IPUZ_BARRED (puzzle_a), coord, IPUZ_STYLE_SIDES_TOP_LEFT | IPUZ_STYLE_SIDES_BOTTOM_RIGHT);
52
1
  g_assert (ipuz_barred_get_cell_bars (IPUZ_BARRED (puzzle_a), coord) ==
53
            (IPUZ_STYLE_SIDES_TOP | IPUZ_STYLE_SIDES_LEFT | IPUZ_STYLE_SIDES_BOTTOM | IPUZ_STYLE_SIDES_RIGHT));
54
1
  g_array_append_val (coords, coord);
55

            
56
1
  coord.row += 1;
57
1
  ipuz_barred_set_cell_bars (IPUZ_BARRED (puzzle_a), coord, IPUZ_STYLE_SIDES_LEFT | IPUZ_STYLE_SIDES_RIGHT);
58
1
  g_assert (ipuz_barred_get_cell_bars (IPUZ_BARRED (puzzle_a), coord) ==
59
            (IPUZ_STYLE_SIDES_LEFT | IPUZ_STYLE_SIDES_RIGHT));
60
1
  g_array_append_val (coords, coord);
61

            
62
1
  coord.row -= 1;
63
1
  g_assert (ipuz_barred_get_cell_bars (IPUZ_BARRED (puzzle_a), coord) ==
64
            (IPUZ_STYLE_SIDES_TOP | IPUZ_STYLE_SIDES_LEFT | IPUZ_STYLE_SIDES_RIGHT));
65

            
66
1
  g_assert (ipuz_crossword_get_symmetry (IPUZ_CROSSWORD (puzzle_a)) == IPUZ_SYMMETRY_NONE);
67

            
68
1
  ipuz_crossword_fix_all (IPUZ_CROSSWORD (puzzle_a),
69
                          "symmetry", IPUZ_SYMMETRY_ROTATIONAL_QUARTER,
70
                          "symmetry-coords", coords,
71
                          NULL);
72

            
73
1
  g_assert (ipuz_crossword_get_symmetry (IPUZ_CROSSWORD (puzzle_a)) == IPUZ_SYMMETRY_ROTATIONAL_QUARTER);
74
1
  g_array_unref (coords);
75
1
}
76

            
77
static void
78
1
test_barred_fix_styles (void)
79
{
80
1
  g_autoptr (IPuzPuzzle) puzzle_a = NULL;
81
1
  g_autoptr (GError) error = NULL;
82
1
  g_autofree gchar *path = NULL;
83

            
84
1
  setlocale(LC_ALL, "en_US.utf8");
85

            
86
1
  path = g_test_build_filename (G_TEST_DIST, "barred-borked.ipuz", NULL);
87
1
  puzzle_a = ipuz_puzzle_new_from_file (path, &error);
88
1
  g_assert (error == NULL);
89

            
90
1
  ipuz_crossword_fix_styles (IPUZ_CROSSWORD (puzzle_a));
91
1
}
92

            
93
int
94
1
main (int   argc,
95
      char *argv[])
96
{
97
1
  g_test_init (&argc, &argv, NULL);
98

            
99
1
  g_test_add_func ("/barred/load", test_barred_cells);
100
1
  g_test_add_func ("/barred/set_bars", test_barred_set_bars);
101
1
  g_test_add_func ("/barred/fix_styles", test_barred_fix_styles);
102

            
103
1
  return g_test_run ();
104
}
105