#include "pch.h"
#include "share.h"
int **sudoku = nullptr;
int num_of_sudoku = 0;//第几个数独表
int upper_limit_of_sudoku = 0;
HANDLE h_sudoku_txt = INVALID_HANDLE_VALUE;
HANDLE h_sudoku_problem_txt = INVALID_HANDLE_VALUE;
void closeTxt()
{
if (h_sudoku_txt != INVALID_HANDLE_VALUE)
CloseHandle(h_sudoku_txt);
if (h_sudoku_problem_txt != INVALID_HANDLE_VALUE)
CloseHandle(h_sudoku_problem_txt);
h_sudoku_problem_txt = INVALID_HANDLE_VALUE;
h_sudoku_txt = INVALID_HANDLE_VALUE;
}
void mallocSudoku()
{
if (sudoku == nullptr)
{
sudoku = new int* [10];
for (int i = 0; i < 10; i++)
{
sudoku[i] = new int[10];
}
}
}
void freeSudoku()
{
if (sudoku != nullptr)
{
for (int i = 0; i < 10; i++)
{
delete[] sudoku[i];
}
delete[] sudoku;
sudoku = nullptr;
}
}
namespace TestInterpretor
{
TEST(interpret_Test, MoreArguments)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-s");
lstrcpy(argv[2], L"-c");
lstrcpy(argv[3], L"200");
EXPECT_EQ(interpret(4, argv), -1);
lstrcpy(argv[4], L"-c");
EXPECT_EQ(interpret(5, argv), -1);
}
TEST(interpret_Test, LessArguments)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-s");
EXPECT_EQ(interpret(2, argv), -1);
}
TEST(interpret_Test, WrongArguments)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-t");
lstrcpy(argv[2], L"200");
EXPECT_EQ(interpret(3, argv), -2);
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"一");
lstrcpy(argv[2], L"200");
EXPECT_EQ(interpret(3, argv), -2);
}
TEST(createSudokuTxt_Test, CreateSudokuTxt2)
{
if (h_sudoku_txt != INVALID_HANDLE_VALUE)
{
CloseHandle(h_sudoku_txt);
h_sudoku_txt = INVALID_HANDLE_VALUE;
}
EXPECT_EQ(createSudokuTxt(), 0);
EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
}
TEST(createSudokuTxt_Test, CreateSudokuTxt)
{
if (h_sudoku_txt != INVALID_HANDLE_VALUE)
{
CloseHandle(h_sudoku_txt);
h_sudoku_txt = INVALID_HANDLE_VALUE;
}
EXPECT_EQ(createSudokuTxt(), 0);
EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
}
TEST(interpretMakingSudoku_Test, NumberArgvIncludeNonNumberChar)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-c");
lstrcpy(argv[2], L"200.");
EXPECT_EQ(interpret(3, argv), -2);
lstrcpy(argv[2], L"2a0");
EXPECT_EQ(interpret(3, argv), -2);
lstrcpy(argv[2], L"2二0");
EXPECT_EQ(interpret(3, argv), -2);
lstrcpy(argv[2], L"-1");
EXPECT_EQ(interpret(3, argv), -2);
lstrcpy(argv[2], L"+2");
EXPECT_EQ(interpret(3, argv), -2);
}
TEST(interpretMakingSudoku_Test, NumberLessThanOne)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-c");
lstrcpy(argv[2], L"0");
EXPECT_EQ(interpret(3, argv), -3);
}
TEST(interpretMakingSudoku_Test, NumberGreaterThan1E6)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-c");
lstrcpy(argv[2], L"1000001");
EXPECT_EQ(interpret(3, argv), -3);
lstrcpy(argv[2], L"1000002");
EXPECT_EQ(interpret(3, argv), -3);
lstrcpy(argv[2], L"2000000");
EXPECT_EQ(interpret(3, argv), -3);
}
//TEST(interpretMakingSudoku_Test, InterpretMakingSudoku)
//{
// mallocSudoku();
// wchar_t* argv[10];
// for (int i = 0; i < 4; i++)
// argv[i] = new wchar_t[100];
// lstrcpy(argv[0], L"sudoku.exe");
// lstrcpy(argv[1], L"-c");
// lstrcpy(argv[2], L"1000");
// /*closeTxt();
// EXPECT_EQ(interpret(3, argv), 0);
// EXPECT_EQ(1000000, upper_limit_of_sudoku);
// EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);*/
// //closeTxt();
// //lstrcpy(argv[2], L"999");
// //EXPECT_EQ(interpret(3, argv), 0);
// //EXPECT_EQ(999999, upper_limit_of_sudoku);
// //EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
// //closeTxt();
// //lstrcpy(argv[2], L"999");
// //EXPECT_EQ(interpret(3, argv), 0);
// //EXPECT_EQ(999998, upper_limit_of_sudoku);
// //EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
// //closeTxt();
// //lstrcpy(argv[2], L"1");
// //EXPECT_EQ(interpret(3, argv), 0);
// //EXPECT_EQ(1, upper_limit_of_sudoku);
// //EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
// //closeTxt();
// //lstrcpy(argv[2], L"2");
// //EXPECT_EQ(interpret(3, argv), 0);
// //EXPECT_EQ(2, upper_limit_of_sudoku);
// //EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
// //closeTxt();
// //lstrcpy(argv[2], L"817");
// //EXPECT_EQ(interpret(3, argv), 0);
// //EXPECT_EQ(817, upper_limit_of_sudoku);
// //EXPECT_NE(h_sudoku_txt, INVALID_HANDLE_VALUE);
// freeSudoku();
//}
TEST(interpretSolvingSudoku_Test, NoSuchFile)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-s");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), -5);
lstrcpy(argv[2], L"E:\");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), -5);
lstrcpy(argv[2], L"E:\helloworld");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), -5);
lstrcpy(argv[2], L"D:\");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), -5);
lstrcpy(argv[2], L"D:\helloworld");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), -5);
}
TEST(interpretSolvingSudoku_Test, ExistSudokuProblemTxt)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-s");
lstrcpy(argv[2], L"E:\requires.txt");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
lstrcpy(argv[2], L"D:\requires.txt");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
lstrcpy(argv[2], L"D:\迅雷下载\requires.txt");
closeTxt();
EXPECT_EQ(interpretSolvingSudoku(argv[2]), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
}
TEST(interpretTest, ExistSudokuProblemTxt)
{
wchar_t* argv[10];
for (int i = 0; i < 4; i++)
argv[i] = new wchar_t[100];
lstrcpy(argv[0], L"sudoku.exe");
lstrcpy(argv[1], L"-s");
lstrcpy(argv[2], L"E:\requires.txt");
closeTxt();
EXPECT_EQ(interpret(3, argv), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
lstrcpy(argv[2], L"D:\requires.txt");
closeTxt();
EXPECT_EQ(interpret(3, argv), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
lstrcpy(argv[2], L"D:\迅雷下载\requires.txt");
closeTxt();
EXPECT_EQ(interpret(3, argv), 0);
EXPECT_NE(h_sudoku_problem_txt, INVALID_HANDLE_VALUE);
}
}