-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
common.h
69 lines (59 loc) · 1.7 KB
/
common.h
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
# ifndef P4_TEST_COMMON
# define P4_TEST_COMMON
#include "unity/src/unity.h"
#include "../peppapeg.h"
#define autofree __attribute__ ((cleanup (cleanup_freep)))
static void
cleanup_freep (void *p)
{
void **pp = (void **) p;
if (*pp)
free (*pp);
}
void TEST_ASSERT_EQUAL_SLICE(P4_Slice* s, size_t i, size_t j) {
TEST_ASSERT_EQUAL_UINT(i, s->i);
TEST_ASSERT_EQUAL_UINT(j, s->j);
}
void TEST_ASSERT_EQUAL_TOKEN_STRING(P4_String s, P4_Token* token) {
TEST_ASSERT_NOT_NULL(token);
autofree P4_String tokenstr = P4_CopyTokenString(token);
TEST_ASSERT_EQUAL_STRING(s, tokenstr);
}
void TEST_ASSERT_EQUAL_TOKEN_RULE(P4_RuleID id, P4_Token* token) {
TEST_ASSERT_NOT_NULL(token);
TEST_ASSERT_NOT_NULL(token->expr);
TEST_ASSERT_EQUAL_UINT(id, token->expr->id);
}
void TEST_ADD_WHITESPACE(P4_Grammar* grammar, P4_RuleID id) {
TEST_ASSERT_EQUAL(
P4_Ok,
P4_AddChoice(grammar, id, 3)
);
P4_Expression* ws = P4_GetGrammarRule(grammar, id);
TEST_ASSERT_NOT_NULL(ws);
TEST_ASSERT_EQUAL(
P4_Ok,
P4_SetMember(ws, 0, P4_CreateLiteral(" ", true))
);
TEST_ASSERT_EQUAL(
P4_Ok,
P4_SetMember(ws, 1, P4_CreateLiteral("\t", true))
);
TEST_ASSERT_EQUAL(
P4_Ok,
P4_SetMember(ws, 2, P4_CreateLiteral("\n", true))
);
P4_SetExpressionFlag(ws, P4_FLAG_SPACED | P4_FLAG_LIFTED);
}
char* read_file(const char* path) {
FILE* f = fopen (path, "rb");
fseek(f, 0, SEEK_END);
long length = ftell(f);
fseek (f, 0, SEEK_SET);
char* buf = calloc(length+2, sizeof(char));
TEST_ASSERT_EQUAL(length, fread(buf, sizeof(char), length, f));
buf[length] = '\0';
fclose(f);
return buf;
}
# endif