-
Notifications
You must be signed in to change notification settings - Fork 1
/
TicTacToeBoard.t.sol
95 lines (76 loc) · 2.8 KB
/
TicTacToeBoard.t.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.6.7;
pragma experimental ABIEncoderV2;
import "./TicTacToeBoard.sol";
import "ds-test/test.sol";
contract TicTacToeBoardTest is DSTest, TicTacToeBoard {
using Logic for Term;
TicTacToeBoard.Field constant X = TicTacToeBoard.Field.X;
TicTacToeBoard.Field constant O = TicTacToeBoard.Field.O;
TicTacToeBoard.Field constant B = TicTacToeBoard.Field.Blank;
function setUp() public {
}
function assertEq(TicTacToeBoard.Field _expectedValue, TicTacToeBoard.Field _actualValue) internal {
assertEq(uint(_expectedValue), uint(_actualValue));
}
function test_is_field_literal() public pure {
assert(isFieldLiteral(atom('x')));
assert(isFieldLiteral(atom('o')));
assert(isFieldLiteral(atom('.')));
assert(!isFieldLiteral(atom('b')));
assert(!isFieldLiteral(list()));
}
function test_is_row_literal() public pure {
assert(isRowLiteral(list(atom('x'), atom('o'), atom('.'))));
assert(!isRowLiteral(list()));
assert(!isRowLiteral(atom('b')));
assert(!isRowLiteral(list(
list(atom('x'), atom('o'), atom('.')),
list(atom('x'), atom('o'), atom('.')),
list(atom('x'), atom('o'), atom('.'))
)));
}
function test_is_board_literal() public pure {
assert(isBoardLiteral(list(
list(atom('x'), atom('o'), atom('.')),
list(atom('x'), atom('o'), atom('.')),
list(atom('x'), atom('o'), atom('.'))
)));
assert(!isBoardLiteral(atom('x')));
assert(!isBoardLiteral(atom('b')));
assert(!isBoardLiteral(list(atom('x'), atom('o'), atom('.'))));
assert(!isBoardLiteral(list()));
}
function test_field_to_atom() public pure {
assert(TicTacToeBoard.fieldToAtom(X).equalsMemory(atom('x')));
assert(TicTacToeBoard.fieldToAtom(O).equalsMemory(atom('o')));
assert(TicTacToeBoard.fieldToAtom(B).equalsMemory(atom('.')));
}
function testFail_field_to_atom_should_fail_if_field_is_invalid() public pure {
TicTacToeBoard.fieldToAtom(TicTacToeBoard.Field(100));
}
function test_atom_to_field() public {
assertEq(TicTacToeBoard.atomToField(atom('x')), X);
assertEq(TicTacToeBoard.atomToField(atom('o')), O);
assertEq(TicTacToeBoard.atomToField(atom('.')), B);
}
function testFail_atom_to_field_should_fail_if_atom_is_not_field() public pure {
TicTacToeBoard.atomToField(atom('b'));
}
function test_board_to_term() public pure {
TicTacToeBoard.Field[3][3] memory board = [
[X, O, B],
[O, B, X],
[B, X, O]
];
Term memory expectedTerm = list(
list(atom('x'), atom('o'), atom('.')),
list(atom('o'), atom('.'), atom('x')),
list(atom('.'), atom('x'), atom('o'))
);
assert(TicTacToeBoard.boardToTerm(board).equalsMemory(expectedTerm));
}
function test_empty_board_should_produce_list_convertible_to_board_literal() public pure {
assert(isBoardLiteral(TicTacToeBoard.boardToTerm(TicTacToeBoard.emptyBoard())));
}
}