From e64e66b1941eb0e73305c0dc62486580ecec91b2 Mon Sep 17 00:00:00 2001 From: Aur Saraf Date: Sun, 14 Apr 2013 02:49:12 +0300 Subject: [PATCH 1/2] some tests for base64.c --- examples/base64.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/examples/base64.c b/examples/base64.c index beb2484..0a8f613 100644 --- a/examples/base64.c +++ b/examples/base64.c @@ -29,6 +29,35 @@ void init_parser(void) } +#include +#include +#define TRUE (1) +#define FALSE (0) + +void assert_parse(int expected, char *data) { + const HParseResult *result; + + size_t datasize = strlen(data); + result = h_parse(document, (void*)data, datasize); + if((result != NULL) != expected) { + printf("Test failed: %s\n", data); + } +} + +void test() { + assert_parse(TRUE, ""); + assert_parse(TRUE, "YQ=="); + assert_parse(TRUE, "YXU="); + assert_parse(TRUE, "YXVy"); + assert_parse(TRUE, "QVVSIFNBUkFG"); + assert_parse(TRUE, "QVVSIEhFUlUgU0FSQUY="); + assert_parse(FALSE, "A"); + assert_parse(FALSE, "A="); + assert_parse(FALSE, "A=="); + assert_parse(FALSE, "AAA=="); +} + + #include int main(int argc, char **argv) @@ -39,6 +68,8 @@ int main(int argc, char **argv) init_parser(); + test(); + inputsize = fread(input, 1, sizeof(input), stdin); fprintf(stderr, "inputsize=%lu\ninput=", inputsize); fwrite(input, 1, inputsize, stderr); From 9a6a785390202d99556847879d83c4fbd57cf968 Mon Sep 17 00:00:00 2001 From: Aur Saraf Date: Sun, 14 Apr 2013 03:13:07 +0300 Subject: [PATCH 2/2] debugging info in test_parse(), more tests, fixed some of them but not others --- examples/base64.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/examples/base64.c b/examples/base64.c index 0a8f613..33c2ac8 100644 --- a/examples/base64.c +++ b/examples/base64.c @@ -1,5 +1,7 @@ #include "../src/hammer.h" +#define DEBUG + const HParser* document = NULL; void init_parser(void) @@ -19,9 +21,14 @@ void init_parser(void) h_ch('Y'), h_ch('c'), h_ch('g'), h_ch('k'), h_ch('o'), h_ch('s'), h_ch('w'), h_ch('0'), h_ch('4'), h_ch('8'), NULL); const HParser *bsfdig_2bit = h_choice(h_ch('A'), h_ch('Q'), h_ch('g'), h_ch('w'), NULL); - const HParser *base64_2 = h_sequence(bsfdig, bsfdig, bsfdig_4bit, equals, NULL); - const HParser *base64_1 = h_sequence(bsfdig, bsfdig_2bit, equals, equals, NULL); - const HParser *base64 = h_choice(base64_2, base64_1, NULL); + + const HParser *base64_quad = h_sequence(bsfdig, bsfdig, bsfdig, bsfdig, NULL); + const HParser *base64_quads = h_many(base64_quad); + + const HParser *base64_2 = h_sequence(bsfdig, bsfdig, bsfdig_4bit, equals, h_end_p(), NULL); + const HParser *base64_1 = h_sequence(bsfdig, bsfdig_2bit, equals, equals, h_end_p(), NULL); + const HParser *base64_ending = h_choice(h_end_p(), base64_2, base64_1, NULL); + const HParser *base64 = h_sequence(base64_quads, base64_ending, NULL); // why does this parse "A=="?! // why does this parse "aaA=" but not "aA=="?! @@ -40,8 +47,15 @@ void assert_parse(int expected, char *data) { size_t datasize = strlen(data); result = h_parse(document, (void*)data, datasize); if((result != NULL) != expected) { - printf("Test failed: %s\n", data); + fprintf(stderr, "Test failed: %s\n", data); } +#ifdef DEBUG + else { + fprintf(stderr, "Test succeeded: %s\n", data); + fprintf(stderr, "parsed=%lld bytes\n", result->bit_length/8); + h_pprint(stdout, result->ast, 0, 0); + } +#endif } void test() { @@ -55,6 +69,7 @@ void test() { assert_parse(FALSE, "A="); assert_parse(FALSE, "A=="); assert_parse(FALSE, "AAA=="); + assert_parse(FALSE, "aa=="); }