Merge pull request 'Finished project' (#1) from dev into master

Reviewed-on: #1
This commit is contained in:
Trianta 2023-10-22 21:52:00 -05:00
commit 70ba057b57
62 changed files with 1625 additions and 25 deletions

View File

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10)
project(
something
sudoku
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11 CACHE STRING "The C++ standard to use")

View File

@ -1,4 +1,12 @@
# cpp-unity-template
# sudoku-solver
## Notes
Uses a single sudoku file as input
Tests were ran on sudoku-easy-50 split into individual files
All were successfully solved
## Compiling the project
@ -11,20 +19,24 @@ In order to compile the project, simply run these two commands:
cmake --build build
## Running the Project
The program should now be compiled at ./build/bin/something
The program should now be compiled at ./build/bin/sudoku
Simply run the program using:
build/bin/something
build/bin/sudoku
## Testing the Project
Prerequisites
- Unity (Throw the Switch) | [AUR](https://aur.archlinux.org/packages/unity-test)
In order to compile the tests for the project, simply run these two commands:
cmake -DCMAKE_BUILD_TYPE=Debug -B build -S .
cmake --build build
The program should now be compiled at ./build/bin/somethingTest
The program should now be compiled at ./build/bin/sudoku
Simply run the tests using:
build/bin/somethingTest
build/bin/testing

View File

@ -1,5 +1,5 @@
add_executable(something
./main.cpp
add_executable(sudoku
./sudoku_solver.cpp
./sudoku.cpp
)
target_include_directories(something PUBLIC ${CMAKE_CURRENT_LIST_DIR})

View File

@ -1,6 +0,0 @@
#include <iostream>
int main(void) {
std::cout << "Hello world" << std::endl;
return 0;
}

152
src/sudoku.cpp Normal file
View File

@ -0,0 +1,152 @@
#include "sudoku.hpp"
#include <fstream>
#include <iostream>
#include <string>
Sudoku::Sudoku(void) {
board.resize(9, std::vector<int>(9, -1));
}
void Sudoku::FillBoard(std::string filePath) {
std::ifstream sudokuFile(filePath);
if (!sudokuFile) {
std::cerr << "Error opening file: " << filePath << std::endl;
exit(1);
}
std::string line;
int height = 0;
while (!sudokuFile.eof() && height < 9) {
sudokuFile >> line;
for (int i = 0; i < 9; ++i) { board[height][i] = line[i] - '0'; }
++height;
}
}
// Base global call for solving
void Sudoku::Solve(void) {
_Solve();
}
bool Sudoku::IsBoardSolved(void) {
int column, row;
if (!FindEmptyCell(&column, &row)) { return true; }
return false;
}
void Sudoku::Print(void) {
std::cout << "===================" << std::endl;
for (auto i : board) {
std::cout << '|';
for (auto j : i) {
std::cout << j << '|';
}
std::cout << std::endl;
}
std::cout << "===================" << std::endl;
}
void Sudoku::RawPrint(void) {
for (auto i : board) {
for (auto j : i) {
std::cout << j;
}
std::cout << std::endl;
}
}
// Recursive call for solving
bool Sudoku::_Solve(void) {
int column, row;
if (!FindEmptyCell(&column, &row)) { return true; }
for (int i : GetUnusedRow(row)) {
for (int j : GetUnusedColumn(column)) {
for (int k : GetUnusedSubgrid(column, row)) {
if (i == j == k) {
board[row][column] = i;
if (_Solve()) { return true; }
board[row][column] = 0;
}
}
}
}
return 0;
}
// Fills column and row of an empty cell and returns true
// If no empty cell is found, return false
bool Sudoku::FindEmptyCell(int* column, int* row) {
for (*row = 0; *row < 9; ++(*row)) {
for (*column = 0; *column < 9; ++(*column)) {
if (board[*row][*column] == 0) { return true; }
}
}
return false;
}
bool Sudoku::IsValidPlacement(int column, int row, int box) {
// Check column and row
for (int i = 0; i < 9; ++i) {
if (board[row][i] == box || board[i][column] == box) {
return false;
}
}
// Check subgrid
int startRow = row - row % 3;
int startColumn = column - column % 3;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[startRow + i][startColumn + j] == box) { return false; }
}
}
return true;
}
std::vector<int> Sudoku::GetUnusedRow(int row) {
std::vector<int> leftOver{0,1,2,3,4,5,6,7,8,9};
int box;
for (int i = 0; i < 9; i++) {
box = board[row][i];
if (leftOver[box] == box) { leftOver[box] = 0; }
}
for (auto it = leftOver.begin(); it != leftOver.end();) {
if (*it == 0) { it = leftOver.erase(it); }
else { ++it; }
}
return leftOver;
}
std::vector<int> Sudoku::GetUnusedColumn(int column) {
std::vector<int> leftOver{0,1,2,3,4,5,6,7,8,9};
int box;
for (int i = 0; i < 9; i++) {
box = board[i][column];
if (leftOver[box] == box) { leftOver[box] = 0; }
}
for (auto it = leftOver.begin(); it != leftOver.end();) {
if (*it == 0) { it = leftOver.erase(it); }
else { ++it; }
}
return leftOver;
}
std::vector<int> Sudoku::GetUnusedSubgrid(int column, int row) {
std::vector<int> leftOver{0,1,2,3,4,5,6,7,8,9};
int box;
int startRow = row - row % 3;
int startColumn = column - column % 3;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
box = board[row][column];
if (board[startRow + i][startColumn + j] == box) {
leftOver[box] = 0;
}
}
}
for (auto it = leftOver.begin(); it != leftOver.end();) {
if (*it == 0) { it = leftOver.erase(it); }
else { ++it; }
}
return leftOver;
}

25
src/sudoku.hpp Normal file
View File

@ -0,0 +1,25 @@
#ifndef SUDOKU_HPP
#define SUDOKU_HPP
#include <string>
#include <vector>
class Sudoku {
public:
Sudoku(void);
std::vector< std::vector<int> > board;
void FillBoard(std::string filePath);
void Solve(void);
bool IsBoardSolved(void);
void Print(void);
void RawPrint(void);
private:
bool _Solve(void);
bool FindEmptyCell(int* column, int* row);
bool IsValidPlacement(int column, int row, int box);
std::vector<int> GetUnusedRow(int row);
std::vector<int> GetUnusedColumn(int column);
std::vector<int> GetUnusedSubgrid(int column, int row);
};
#endif

14
src/sudoku_solver.cpp Normal file
View File

@ -0,0 +1,14 @@
#include "sudoku.hpp"
#include <iostream>
int main(int argc, char* argv[]) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0] << " path/to/sudoku" << std::endl;
return 1;
}
Sudoku newGame;
newGame.FillBoard(argv[1]);
newGame.Solve();
newGame.RawPrint();
return 0;
}

View File

@ -1,7 +1,9 @@
find_package(unity REQUIRED)
include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${sudoku_SOURCE_DIR}/src)
add_executable(testing
test.cpp
test_list.cpp
../src/sudoku.cpp
)
set_target_properties(testing PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(testing unity)

View File

@ -0,0 +1,9 @@
003020600
900305001
001806400
008102900
700000008
006708200
002609500
800203009
005010300

View File

@ -0,0 +1,9 @@
200080300
060070084
030500209
000105408
000000000
402706000
301007040
720040060
004010003

View File

@ -0,0 +1,9 @@
000000907
000420180
000705026
100904000
050000040
000507009
920108000
034059000
507000000

View File

@ -0,0 +1,9 @@
030050040
008010500
460000012
070502080
000603000
040109030
250000098
001020600
080060020

View File

@ -0,0 +1,9 @@
020810740
700003100
090002805
009040087
400208003
160030200
302700060
005600008
076051090

View File

@ -0,0 +1,9 @@
100920000
524010000
000000070
050008102
000000000
402700090
060000000
000030945
000071006

View File

@ -0,0 +1,9 @@
043080250
600000000
000001094
900004070
000608000
010200003
820500000
000000005
034090710

View File

@ -0,0 +1,9 @@
480006902
002008001
900370060
840010200
003704100
001060049
020085007
700900600
609200018

View File

@ -0,0 +1,9 @@
000900002
050123400
030000160
908000000
070000090
000000205
091000050
007439020
400007000

View File

@ -0,0 +1,9 @@
001900003
900700160
030005007
050000009
004302600
200000070
600100030
042007006
500006800

View File

@ -0,0 +1,9 @@
000125400
008400000
420800000
030000095
060902010
510000060
000003049
000007200
001298000

View File

@ -0,0 +1,9 @@
062340750
100005600
570000040
000094800
400000006
005830000
030000091
006400007
059083260

View File

@ -0,0 +1,9 @@
300000000
005009000
200504000
020000700
160000058
704310600
000890100
000067080
000005437

View File

@ -0,0 +1,9 @@
630000000
000500008
005674000
000020000
003401020
000000345
000007004
080300902
947100080

View File

@ -0,0 +1,9 @@
000020040
008035000
000070602
031046970
200000000
000501203
049000730
000000010
800004000

View File

@ -0,0 +1,9 @@
361025900
080960010
400000057
008000471
000603000
259000800
740000005
020018060
005470329

View File

@ -0,0 +1,9 @@
050807020
600010090
702540006
070020301
504000908
103080070
900076205
060090003
080103040

View File

@ -0,0 +1,9 @@
080005000
000003457
000070809
060400903
007010500
408007020
901020000
842300000
000100080

View File

@ -0,0 +1,9 @@
003502900
000040000
106000305
900251008
070408030
800763001
308000104
000020000
005104800

View File

@ -0,0 +1,9 @@
000000000
009805100
051907420
290401065
000000000
140508093
026709580
005103600
000000000

View File

@ -0,0 +1,9 @@
020030090
000907000
900208005
004806500
607000208
003102900
800605007
000309000
030020050

View File

@ -0,0 +1,9 @@
005000006
070009020
000500107
804150000
000803000
000092805
907006000
030400010
200000600

View File

@ -0,0 +1,9 @@
040000050
001943600
009000300
600050002
103000506
800020007
005000200
002436700
030000040

View File

@ -0,0 +1,9 @@
004000000
000030002
390700080
400009001
209801307
600200008
010008053
900040000
000000800

View File

@ -0,0 +1,9 @@
360020089
000361000
000000000
803000602
400603007
607000108
000000000
000418000
970030014

View File

@ -0,0 +1,9 @@
500400060
009000800
640020000
000001008
208000501
700500000
000090084
003000600
060003002

View File

@ -0,0 +1,9 @@
007256400
400000005
010030060
000508000
008060200
000107000
030070090
200000004
006312700

View File

@ -0,0 +1,9 @@
000000000
079050180
800000007
007306800
450708096
003502700
700000005
016030420
000000000

View File

@ -0,0 +1,9 @@
030000080
009000500
007509200
700105008
020090030
900402001
004207100
002000800
070000090

View File

@ -0,0 +1,9 @@
200170603
050000100
000006079
000040700
000801000
009050000
310400000
005000060
906037002

View File

@ -0,0 +1,9 @@
000000080
800701040
040020030
374000900
000030000
005000321
010060050
050802006
080000000

View File

@ -0,0 +1,9 @@
000000085
000210009
960080100
500800016
000000000
890006007
009070052
300054000
480000000

View File

@ -0,0 +1,9 @@
608070502
050608070
002000300
500090006
040302050
800050003
005000200
010704090
409060701

View File

@ -0,0 +1,9 @@
050010040
107000602
000905000
208030501
040070020
901080406
000401000
304000709
020060010

View File

@ -0,0 +1,9 @@
053000790
009753400
100000002
090080010
000907000
080030070
500000003
007641200
061000940

View File

@ -0,0 +1,9 @@
006080300
049070250
000405000
600317004
007000800
100826009
000702000
075040190
003090600

View File

@ -0,0 +1,9 @@
005080700
700204005
320000084
060105040
008000500
070803010
450000091
600508007
003010600

View File

@ -0,0 +1,9 @@
000900800
128006400
070800060
800430007
500000009
600079008
090004010
003600284
001007000

View File

@ -0,0 +1,9 @@
000080000
270000054
095000810
009806400
020403060
006905100
017000620
460000038
000090000

View File

@ -0,0 +1,9 @@
000602000
400050001
085010620
038206710
000000000
019407350
026040530
900020007
000809000

View File

@ -0,0 +1,9 @@
000900002
050123400
030000160
908000000
070000090
000000205
091000050
007439020
400007000

View File

@ -0,0 +1,9 @@
380000000
000400785
009020300
060090000
800302009
000040070
001070500
495006000
000000092

View File

@ -0,0 +1,9 @@
000158000
002060800
030000040
027030510
000000000
046080790
050000080
004070100
000325000

View File

@ -0,0 +1,9 @@
010500200
900001000
002008030
500030007
008000500
600080004
040100700
000700006
003004050

View File

@ -0,0 +1,9 @@
080000040
000469000
400000007
005904600
070608030
008502100
900000005
000781000
060000010

View File

@ -0,0 +1,9 @@
904200007
010000000
000706500
000800090
020904060
040002000
001607000
000000030
300005702

View File

@ -0,0 +1,9 @@
000700800
006000031
040002000
024070000
010030080
000060290
000800070
860000500
002006000

View File

@ -0,0 +1,9 @@
001007090
590080001
030000080
000005800
050060020
004100000
080000030
100020079
020700400

View File

@ -0,0 +1,9 @@
000003017
015009008
060000000
100007000
009000200
000500004
000000020
500600340
340200000

View File

@ -0,0 +1,9 @@
300200000
000107000
706030500
070009080
900020004
010800050
009040301
000702000
000008006

View File

@ -0,0 +1,499 @@
003020600
900305001
001806400
008102900
700000008
006708200
002609500
800203009
005010300
========
200080300
060070084
030500209
000105408
000000000
402706000
301007040
720040060
004010003
========
000000907
000420180
000705026
100904000
050000040
000507009
920108000
034059000
507000000
========
030050040
008010500
460000012
070502080
000603000
040109030
250000098
001020600
080060020
========
020810740
700003100
090002805
009040087
400208003
160030200
302700060
005600008
076051090
========
100920000
524010000
000000070
050008102
000000000
402700090
060000000
000030945
000071006
========
043080250
600000000
000001094
900004070
000608000
010200003
820500000
000000005
034090710
========
480006902
002008001
900370060
840010200
003704100
001060049
020085007
700900600
609200018
========
000900002
050123400
030000160
908000000
070000090
000000205
091000050
007439020
400007000
========
001900003
900700160
030005007
050000009
004302600
200000070
600100030
042007006
500006800
========
000125400
008400000
420800000
030000095
060902010
510000060
000003049
000007200
001298000
========
062340750
100005600
570000040
000094800
400000006
005830000
030000091
006400007
059083260
========
300000000
005009000
200504000
020000700
160000058
704310600
000890100
000067080
000005437
========
630000000
000500008
005674000
000020000
003401020
000000345
000007004
080300902
947100080
========
000020040
008035000
000070602
031046970
200000000
000501203
049000730
000000010
800004000
========
361025900
080960010
400000057
008000471
000603000
259000800
740000005
020018060
005470329
========
050807020
600010090
702540006
070020301
504000908
103080070
900076205
060090003
080103040
========
080005000
000003457
000070809
060400903
007010500
408007020
901020000
842300000
000100080
========
003502900
000040000
106000305
900251008
070408030
800763001
308000104
000020000
005104800
========
000000000
009805100
051907420
290401065
000000000
140508093
026709580
005103600
000000000
========
020030090
000907000
900208005
004806500
607000208
003102900
800605007
000309000
030020050
========
005000006
070009020
000500107
804150000
000803000
000092805
907006000
030400010
200000600
========
040000050
001943600
009000300
600050002
103000506
800020007
005000200
002436700
030000040
========
004000000
000030002
390700080
400009001
209801307
600200008
010008053
900040000
000000800
========
360020089
000361000
000000000
803000602
400603007
607000108
000000000
000418000
970030014
========
500400060
009000800
640020000
000001008
208000501
700500000
000090084
003000600
060003002
========
007256400
400000005
010030060
000508000
008060200
000107000
030070090
200000004
006312700
========
000000000
079050180
800000007
007306800
450708096
003502700
700000005
016030420
000000000
========
030000080
009000500
007509200
700105008
020090030
900402001
004207100
002000800
070000090
========
200170603
050000100
000006079
000040700
000801000
009050000
310400000
005000060
906037002
========
000000080
800701040
040020030
374000900
000030000
005000321
010060050
050802006
080000000
========
000000085
000210009
960080100
500800016
000000000
890006007
009070052
300054000
480000000
========
608070502
050608070
002000300
500090006
040302050
800050003
005000200
010704090
409060701
========
050010040
107000602
000905000
208030501
040070020
901080406
000401000
304000709
020060010
========
053000790
009753400
100000002
090080010
000907000
080030070
500000003
007641200
061000940
========
006080300
049070250
000405000
600317004
007000800
100826009
000702000
075040190
003090600
========
005080700
700204005
320000084
060105040
008000500
070803010
450000091
600508007
003010600
========
000900800
128006400
070800060
800430007
500000009
600079008
090004010
003600284
001007000
========
000080000
270000054
095000810
009806400
020403060
006905100
017000620
460000038
000090000
========
000602000
400050001
085010620
038206710
000000000
019407350
026040530
900020007
000809000
========
000900002
050123400
030000160
908000000
070000090
000000205
091000050
007439020
400007000
========
380000000
000400785
009020300
060090000
800302009
000040070
001070500
495006000
000000092
========
000158000
002060800
030000040
027030510
000000000
046080790
050000080
004070100
000325000
========
010500200
900001000
002008030
500030007
008000500
600080004
040100700
000700006
003004050
========
080000040
000469000
400000007
005904600
070608030
008502100
900000005
000781000
060000010
========
904200007
010000000
000706500
000800090
020904060
040002000
001607000
000000030
300005702
========
000700800
006000031
040002000
024070000
010030080
000060290
000800070
860000500
002006000
========
001007090
590080001
030000080
000005800
050060020
004100000
080000030
100020079
020700400
========
000003017
015009008
060000000
100007000
009000200
000500004
000000020
500600340
340200000
========
300200000
000107000
706030500
070009080
900020004
010800050
009040301
000702000
000008006

View File

@ -1,21 +1,64 @@
#include <unity/unity.h>
#include <unity/unity_internals.h>
#include "sudoku.hpp"
#include "test_list.hpp"
void setUp() { ; }
void tearDown() { ; }
int Math(void) {
return 2+2;
}
void test_Math(void) {
TEST_ASSERT_EQUAL_INT(4, Math());
}
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_Math);
RUN_TEST(test_SudokuEasy01);
RUN_TEST(test_SudokuEasy02);
RUN_TEST(test_SudokuEasy03);
RUN_TEST(test_SudokuEasy04);
RUN_TEST(test_SudokuEasy05);
RUN_TEST(test_SudokuEasy06);
RUN_TEST(test_SudokuEasy07);
RUN_TEST(test_SudokuEasy08);
RUN_TEST(test_SudokuEasy09);
RUN_TEST(test_SudokuEasy10);
RUN_TEST(test_SudokuEasy11);
RUN_TEST(test_SudokuEasy12);
RUN_TEST(test_SudokuEasy13);
RUN_TEST(test_SudokuEasy14);
RUN_TEST(test_SudokuEasy15);
RUN_TEST(test_SudokuEasy16);
RUN_TEST(test_SudokuEasy17);
RUN_TEST(test_SudokuEasy18);
RUN_TEST(test_SudokuEasy19);
RUN_TEST(test_SudokuEasy20);
RUN_TEST(test_SudokuEasy21);
RUN_TEST(test_SudokuEasy22);
RUN_TEST(test_SudokuEasy23);
RUN_TEST(test_SudokuEasy24);
RUN_TEST(test_SudokuEasy25);
RUN_TEST(test_SudokuEasy26);
RUN_TEST(test_SudokuEasy27);
RUN_TEST(test_SudokuEasy28);
RUN_TEST(test_SudokuEasy29);
RUN_TEST(test_SudokuEasy30);
RUN_TEST(test_SudokuEasy31);
RUN_TEST(test_SudokuEasy32);
RUN_TEST(test_SudokuEasy33);
RUN_TEST(test_SudokuEasy34);
RUN_TEST(test_SudokuEasy35);
RUN_TEST(test_SudokuEasy36);
RUN_TEST(test_SudokuEasy37);
RUN_TEST(test_SudokuEasy38);
RUN_TEST(test_SudokuEasy39);
RUN_TEST(test_SudokuEasy40);
RUN_TEST(test_SudokuEasy41);
RUN_TEST(test_SudokuEasy42);
RUN_TEST(test_SudokuEasy43);
RUN_TEST(test_SudokuEasy44);
RUN_TEST(test_SudokuEasy45);
RUN_TEST(test_SudokuEasy46);
RUN_TEST(test_SudokuEasy47);
RUN_TEST(test_SudokuEasy48);
RUN_TEST(test_SudokuEasy49);
RUN_TEST(test_SudokuEasy50);
return UNITY_END();
}

354
test/test_list.cpp Normal file
View File

@ -0,0 +1,354 @@
#include "test_list.hpp"
#include <unity/unity.h>
#include <unity/unity_internals.h>
#include "sudoku.hpp"
void test_SudokuEasy01(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-01.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy02(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-02.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy03(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-03.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy04(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-04.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy05(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-05.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy06(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-06.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy07(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-07.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy08(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-08.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy09(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-09.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy10(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-10.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy11(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-11.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy12(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-12.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy13(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-13.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy14(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-14.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy15(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-15.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy16(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-16.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy17(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-17.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy18(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-18.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy19(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-19.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy20(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-20.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy21(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-21.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy22(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-22.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy23(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-23.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy24(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-24.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy25(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-25.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy26(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-26.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy27(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-27.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy28(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-28.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy29(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-29.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy30(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-30.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy31(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-31.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy32(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-32.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy33(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-33.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy34(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-34.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy35(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-35.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy36(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-36.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy37(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-37.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy38(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-38.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy39(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-39.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy40(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-40.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy41(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-41.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy42(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-42.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy43(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-43.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy44(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-44.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy45(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-45.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy46(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-46.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy47(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-47.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy48(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-48.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy49(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-49.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}
void test_SudokuEasy50(void) {
Sudoku testGame;
testGame.FillBoard("test/files/sudoku-easy-50.txt");
testGame.Solve();
TEST_ASSERT_TRUE(testGame.IsBoardSolved());
}

55
test/test_list.hpp Normal file
View File

@ -0,0 +1,55 @@
#ifndef TEST_LIST_HPP
#define TEST_LIST_HPP
void test_SudokuEasy01(void);
void test_SudokuEasy02(void);
void test_SudokuEasy03(void);
void test_SudokuEasy04(void);
void test_SudokuEasy05(void);
void test_SudokuEasy06(void);
void test_SudokuEasy07(void);
void test_SudokuEasy08(void);
void test_SudokuEasy09(void);
void test_SudokuEasy10(void);
void test_SudokuEasy11(void);
void test_SudokuEasy12(void);
void test_SudokuEasy13(void);
void test_SudokuEasy14(void);
void test_SudokuEasy15(void);
void test_SudokuEasy16(void);
void test_SudokuEasy17(void);
void test_SudokuEasy18(void);
void test_SudokuEasy19(void);
void test_SudokuEasy20(void);
void test_SudokuEasy21(void);
void test_SudokuEasy22(void);
void test_SudokuEasy23(void);
void test_SudokuEasy24(void);
void test_SudokuEasy25(void);
void test_SudokuEasy26(void);
void test_SudokuEasy27(void);
void test_SudokuEasy28(void);
void test_SudokuEasy29(void);
void test_SudokuEasy30(void);
void test_SudokuEasy31(void);
void test_SudokuEasy32(void);
void test_SudokuEasy33(void);
void test_SudokuEasy34(void);
void test_SudokuEasy35(void);
void test_SudokuEasy36(void);
void test_SudokuEasy37(void);
void test_SudokuEasy38(void);
void test_SudokuEasy39(void);
void test_SudokuEasy40(void);
void test_SudokuEasy41(void);
void test_SudokuEasy42(void);
void test_SudokuEasy43(void);
void test_SudokuEasy44(void);
void test_SudokuEasy45(void);
void test_SudokuEasy46(void);
void test_SudokuEasy47(void);
void test_SudokuEasy48(void);
void test_SudokuEasy49(void);
void test_SudokuEasy50(void);
#endif