]>
Commit | Line | Data |
---|---|---|
1 | #include "sliding_tile_lib.h" | |
2 | ||
3 | #include "gtest/gtest.h" | |
4 | #include "gmock/gmock.h" | |
5 | #include <vector> | |
6 | ||
7 | TEST(Adjacency, Adjacency) { | |
8 | const signed char LEFT = -1; | |
9 | const signed char RIGHT = +1; | |
10 | const signed char UP = -BOARD_DIM; | |
11 | const signed char DOWN = +BOARD_DIM; | |
12 | for (int i = 0; i < BOARD_SIZE; i++) { | |
13 | SCOPED_TRACE(i); | |
14 | std::vector<signed char> expected; | |
15 | if (i >= BOARD_DIM) { | |
16 | expected.push_back(i + UP); | |
17 | } | |
18 | if (i < BOARD_SIZE - BOARD_DIM) { | |
19 | expected.push_back(i + DOWN); | |
20 | } | |
21 | if (i % BOARD_DIM != 0) { | |
22 | expected.push_back(i + LEFT); | |
23 | } | |
24 | if (i % BOARD_DIM != BOARD_DIM - 1) { | |
25 | expected.push_back(i + RIGHT); | |
26 | } | |
27 | ||
28 | std::vector<signed char> actual; | |
29 | for (int j = 0; adjacent[i][j] >= 0; j++) { | |
30 | actual.push_back(adjacent[i][j]); | |
31 | } | |
32 | EXPECT_THAT(actual, testing::UnorderedElementsAreArray(expected)); | |
33 | } | |
34 | } | |
35 | ||
36 | TEST(Board, GoodInput) { | |
37 | std::istringstream is{"15,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10"}; | |
38 | Board b; | |
39 | is >> b; | |
40 | EXPECT_FALSE(is.fail()); | |
41 | EXPECT_TRUE(is.eof()); | |
42 | EXPECT_THAT(b.board, testing::ElementsAreArray({15,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10})); | |
43 | } | |
44 | ||
45 | TEST(Board, ShortInput) { | |
46 | std::istringstream is{"15,14,9,13,3,1,12,8,0,11,6,4,7,5,2"}; | |
47 | Board b; | |
48 | is >> b; | |
49 | EXPECT_TRUE(is.fail()); | |
50 | } | |
51 | ||
52 | TEST(Board, NonNumericInput) { | |
53 | std::istringstream is{"15,14,foo,13,3,1,12,8,0,11,6,4,7,5,2,10"}; | |
54 | Board b; | |
55 | is >> b; | |
56 | EXPECT_TRUE(is.fail()); | |
57 | } | |
58 | ||
59 | TEST(Board, RepeatedTileInput) { | |
60 | std::istringstream is{"15,15,9,13,3,1,12,8,0,11,6,4,7,5,2,10"}; | |
61 | Board b; | |
62 | is >> b; | |
63 | EXPECT_TRUE(is.fail()); | |
64 | } | |
65 | ||
66 | TEST(Board, LowTileInput) { | |
67 | std::istringstream is{"-1,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10"}; | |
68 | Board b; | |
69 | is >> b; | |
70 | EXPECT_TRUE(is.fail()); | |
71 | } | |
72 | ||
73 | TEST(Board, HighTileInput) { | |
74 | std::istringstream is{"16,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10"}; | |
75 | Board b; | |
76 | is >> b; | |
77 | EXPECT_TRUE(is.fail()); | |
78 | } | |
79 | ||
80 | TEST(Board, Hole) { | |
81 | Board b{{16,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10}}; | |
82 | EXPECT_EQ(8, b.hole()); | |
83 | } | |
84 | ||
85 | TEST(Board, NoHole) { | |
86 | Board b{{16,14,9,13,3,1,12,8,16,11,6,4,7,5,2,10}}; | |
87 | EXPECT_THROW(b.hole(), std::runtime_error); | |
88 | } |