]> git.scottworley.com Git - slidingtile/blob - sliding_tile_lib_test.cc
Input validation
[slidingtile] / sliding_tile_lib_test.cc
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 }