summaryrefslogtreecommitdiff
path: root/test.c
blob: 43e9bf77de6e19275bf509c036d243ab322dd397 (plain)
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
#include <stdio.h>
#include <stdarg.h>

typedef enum {
	DEFAULT = 39,
	RED = 31,
	GREEN = 32,
	YELLOW = 33,
	BLUE = 34,
	MAGENTA = 35
} Color;

static void set_output_color(Color c)
{
	printf("\033[%dm", c);
}

static void print_result(int success, const char *format, ...)
{
	va_list ap;
	Color color = GREEN;
	char indicator = '+';

	if (!success) {
		color = RED;
		indicator = '!';
	}

	set_output_color(color);
	printf("%c ", indicator);

	va_start(ap, format);
	vprintf(format, ap);
	va_end(ap);

	printf("\n");
	set_output_color(DEFAULT);
}

void testing_header(const char *header)
{
	printf("Testing header ");
	set_output_color(MAGENTA);
	printf("<%s>", header);
	set_output_color(DEFAULT);
	printf("\n");
}

void testing_comment(const char *comment)
{
	printf("- %s\n", comment);
}

void test_int_equals_imp(const char *expression, int result, int expected)
{
	print_result(result == expected, "%s == %d", expression, expected);
}

void test_void_imp(const char *expression)
{
	printf("? %s\n", expression);
}

void test_bool_imp(const char *expression, int result, int expected)
{
	int success = (result && expected) || (!result && !expected);
	print_result(success, "%s%s", expected ? "" : "!", expression);
}