This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
lightup/game_test_thperrier.c
T

324 lines
7.7 KiB
C

#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "game.h"
#include "game_aux.h"
#include "game_ext.h"
#include "game_private.h"
/* ********** DUMMY ********** */
bool test_dummy() {
return true;
}
/* ********** game_get_black_number ********** */
bool test_game_get_black_number() {
game g = game_new_empty();
game_set_square(g, 0, 0, S_BLACK0);
if (game_get_black_number(g, 0, 0) != 0) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK1);
if (game_get_black_number(g, 0, 0) != 1) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK2);
if (game_get_black_number(g, 0, 0) != 2) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK3);
if (game_get_black_number(g, 0, 0) != 3) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK4);
if (game_get_black_number(g, 0, 0) != 4) {
game_delete(g);
return false;
}
game_delete(g);
return true;
}
/* ********** game_is_black ********** */
bool test_game_is_black() {
game g = game_new_empty();
if (game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACKU);
if (!game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
if (!((game_get_square(g, 0, 0) == S_BLACKU) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK0);
if (!((game_get_square(g, 0, 0) == S_BLACK0) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK1);
if (!((game_get_square(g, 0, 0) == S_BLACK1) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK2);
if (!((game_get_square(g, 0, 0) == S_BLACK2) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK3);
if (!((game_get_square(g, 0, 0) == S_BLACK3) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_BLACK4);
if (!((game_get_square(g, 0, 0) == S_BLACK4) && game_is_black(g, 0, 0))) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_MARK);
if ((game_get_square(g, 0, 0) == S_MARK) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_MARK);
if ((game_get_square(g, 0, 0) == S_MARK) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_LIGHTBULB);
if ((game_get_square(g, 0, 0) == S_LIGHTBULB) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, S_LIGHTBULB);
if ((game_get_square(g, 0, 0) == S_LIGHTBULB) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, F_ERROR);
if ((game_get_square(g, 0, 0) == F_ERROR) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_set_square(g, 0, 0, F_LIGHTED);
if ((game_get_square(g, 0, 0) == F_LIGHTED) && game_is_black(g, 0, 0)) {
game_delete(g);
return false;
}
game_delete(g);
return true;
}
/* ********** game_is_lightbulb ********** */
bool test_game_is_lightbulb() {
game g = game_new_empty();
game_set_square(g, 0, 0, S_LIGHTBULB);
if ((game_get_square(g, 0, 0) == S_LIGHTBULB) && game_is_lightbulb(g, 0, 0)) {
game_delete(g);
return true;
}
game_delete(g);
return false;
}
/* ********** game_is_blank ********** */
bool test_game_is_blank() {
game g = game_new_empty();
if (game_is_blank(g, 0, 0)) {
game_delete(g);
return true;
}
game_delete(g);
return false;
}
/* ********** game_delete ********** */
bool test_game_delete() {
game g = game_new_empty();
assert(g);
game_delete(g);
return true;
}
/* ********** game_equal ********** */
bool test_game_equal() {
bool equal = true;
game g1 = game_new_empty();
game g2 = game_new_empty();
for (int i = 0; i < DEFAULT_SIZE; i++) {
for (int j = 0; j < DEFAULT_SIZE; j++) {
if (game_get_square(g1, i, j) != game_get_square(g2, i, j)) {
equal = false;
}
}
}
equal = (equal == game_equal(g1, g2));
game_delete(g1);
game_delete(g2);
return equal;
}
/* ********** game_new_empty ********** */
bool test_game_new_empty() {
game g = game_new_empty();
assert(g);
for (int i = 0; i < g->height; i++) {
for (int j = 0; j < g->width; j++) {
if (game_get_square(g, i, j) != S_BLANK) {
game_delete(g);
return false;
}
}
}
game_delete(g);
return true;
}
/* ********** game_copy ********** */
bool test_game_copy() {
game g1 = game_new_empty();
for (int i = 0; i < g1->height; i++) {
game_play_move(g1, i, 0, S_LIGHTBULB);
game_play_move(g1, i, 1, S_MARK);
game_play_move(g1, i, 2, S_BLACKU);
game_play_move(g1, i, 3, S_BLACK0);
game_play_move(g1, i, 4, S_BLACK1);
game_play_move(g1, i, 5, F_LIGHTED);
game_play_move(g1, i, 6, F_ERROR);
}
game g2 = game_copy(g1);
assert(g2);
if (!game_equal(g1, g2)) {
game_delete(g1);
game_delete(g2);
return false;
}
for (int i = 0; i < g2->height; i++) {
for (int j = 0; j < g2->width; j++) {
game_set_square(g2, i, j, S_BLACK3);
}
}
game g3 = game_copy(g2);
assert(g3);
if (!game_equal(g2, g3)) {
game_delete(g1);
game_delete(g2);
game_delete(g3);
return false;
}
game_delete(g1);
game_delete(g2);
game_delete(g3);
return true;
}
/* ********** game_undo ********** */
bool test_game_undo() {
game g1 = game_new_empty();
game g2 = game_copy(g1);
game_undo(g1);
if (!game_equal(g1, g2)) {
game_delete(g1);
game_delete(g2);
return false;
}
game_play_move(g1, 0, 0, S_LIGHTBULB);
game_play_move(g1, 1, 1, S_MARK);
game g3 = game_copy(g1);
game_play_move(g3, 1, 1, S_BLANK);
game_undo(g1);
if (!game_equal(g1, g3)) {
game_delete(g1);
game_delete(g2);
game_delete(g3);
return false;
}
game_delete(g1);
game_delete(g2);
game_delete(g3);
return true;
}
/* ********** game_redo ********** */
bool test_game_redo() {
game g1 = game_new_empty();
game_play_move(g1, 0, 0, S_LIGHTBULB);
game_play_move(g1, 1, 1, S_MARK);
game g2 = game_copy(g1);
game_undo(g1);
game_redo(g1);
game_redo(g1);
if (!game_equal(g1, g2)) {
game_delete(g1);
game_delete(g2);
return false;
}
game_play_move(g1, 2, 2, S_LIGHTBULB);
game_play_move(g2, 2, 2, S_LIGHTBULB);
game_redo(g1);
if (!game_equal(g1, g2)) {
game_delete(g1);
game_delete(g2);
return false;
}
game_delete(g1);
game_delete(g2);
return true;
}
/* ********** usage ********** */
void usage(int argc, char* argv[]) {
fprintf(stderr, "Usage: %s <testname>\n", argv[0]);
exit(EXIT_FAILURE);
}
/* ********** main ********** */
int main(int argc, char* argv[]) {
bool success = false;
if (argc != 2) {
usage(argc, argv);
} else if (strcmp("dummy", argv[1]) == 0) {
success = test_dummy();
} else if (strcmp("game_new_empty", argv[1]) == 0) {
success = test_game_new_empty();
} else if (strcmp("game_copy", argv[1]) == 0) {
success = test_game_copy();
} else if (strcmp("game_equal", argv[1]) == 0) {
success = test_game_equal();
} else if (strcmp("game_delete", argv[1]) == 0) {
success = test_game_delete();
} else if (strcmp("game_is_blank", argv[1]) == 0) {
success = test_game_is_blank();
} else if (strcmp("game_is_lightbulb", argv[1]) == 0) {
success = test_game_is_lightbulb();
} else if (strcmp("game_is_black", argv[1]) == 0) {
success = test_game_is_black();
} else if (strcmp("game_get_black_number", argv[1]) == 0) {
success = test_game_get_black_number();
} else if (strcmp("game_undo", argv[1]) == 0) {
success = test_game_undo();
} else if (strcmp("game_redo", argv[1]) == 0) {
success = test_game_redo();
} else {
fprintf(stderr, "test \"%s\" is not a valid test name.\n", argv[1]);
return EXIT_FAILURE;
}
if (success) {
fprintf(stderr, "test \"%s\" finished successfully\n", argv[1]);
return EXIT_SUCCESS;
} else {
fprintf(stderr, "test \"%s\" error\n", argv[1]);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}