From 21ec962d7626c36e1689e6fe33df6ce7ec5e5c22 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com> Date: Mon, 5 Nov 2012 23:08:18 -0500 Subject: [PATCH] Working on benchmarking test. A lot of things needed to be const and weren't. --- src/Makefile | 3 +++ src/backends/packrat.c | 4 ++-- src/benchmark.c | 2 +- src/compile.c | 4 ++-- src/hammer.h | 4 ++-- src/internal.h | 4 ++-- src/t_benchmark.c | 7 +++++-- 7 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Makefile b/src/Makefile index 21b7ac51..8cca6d37 100644 --- a/src/Makefile +++ b/src/Makefile @@ -64,6 +64,9 @@ hammer.o: hammer.h ifneq ($(INCLUDE_TESTS),0) all: test_suite +benchmark: t_benchmark.o libhammer.a + $(call hush, "Linking $@") $(CC) -o $@ $^ $(LDFLAGS) + test: test_suite ./test_suite -v diff --git a/src/backends/packrat.c b/src/backends/packrat.c index b884b73c..e300d1f2 100644 --- a/src/backends/packrat.c +++ b/src/backends/packrat.c @@ -1,11 +1,11 @@ #include "../internal.h" -int h_packrat_compile(HAllocator* mm__, HParser* parser, const void* params) { +int h_packrat_compile(HAllocator* mm__, const HParser* parser, const void* params) { return 0; // No compilation necessary, and everything should work // out of the box. } -HParseResult *h_packrat_parse(HAllocator* mm__, HParser* parser, HParseState* parse_state) { +HParseResult *h_packrat_parse(HAllocator* mm__, const HParser* parser, HParseState* parse_state) { return NULL; // TODO: fill this in. } diff --git a/src/benchmark.c b/src/benchmark.c index 62d89d9e..3bb63730 100644 --- a/src/benchmark.c +++ b/src/benchmark.c @@ -20,7 +20,7 @@ */ -HBenchmarkResults *h_benchmark(HParser* parser, HParserTestcase* testcases) { +HBenchmarkResults *h_benchmark(const HParser* parser, HParserTestcase* testcases) { // For now, just output the results to stderr HParserTestcase* tc = testcases; HParserBackend backend = PB_MIN; diff --git a/src/compile.c b/src/compile.c index e24839de..e151cfb8 100644 --- a/src/compile.c +++ b/src/compile.c @@ -6,10 +6,10 @@ static HParserBackendVTable *backends[PB_MAX] = { &h__packrat_backend_vtable, }; -int h_compile(HParser* parser, HParserBackend backend, const void* params) { +int h_compile(const HParser* parser, HParserBackend backend, const void* params) { return h_compile__m(&system_allocator, parser, backend, params); } -int h_compile__m(HAllocator* mm__, HParser* parser, HParserBackend backend, const void* params) { +int h_compile__m(HAllocator* mm__, const HParser* parser, HParserBackend backend, const void* params) { return backends[backend]->compile(mm__, parser, params); } diff --git a/src/hammer.h b/src/hammer.h index 15ff6ec6..bf034922 100644 --- a/src/hammer.h +++ b/src/hammer.h @@ -543,7 +543,7 @@ HAMMER_FN_DECL(void, h_pprint, FILE* stream, const HParsedToken* tok, int indent * * Returns -1 if grammar cannot be compiled with the specified options; 0 otherwise. */ -HAMMER_FN_DECL(int, h_compile, HParser* parser, HParserBackend backend, const void* params); +HAMMER_FN_DECL(int, h_compile, const HParser* parser, HParserBackend backend, const void* params); /** * TODO: Document me @@ -568,7 +568,7 @@ const uint8_t* h_bit_writer_get_buffer(HBitWriter* w, size_t *len); void h_bit_writer_free(HBitWriter* w); // {{{ Benchmark functions -HBenchmarkResults *h_benchmark(HParser* parser, HParserTestcase* testcases); +HBenchmarkResults *h_benchmark(const HParser* parser, HParserTestcase* testcases); void h_benchmark_report(FILE* stream, HBenchmarkResults* results); void h_benchmark_dump_optimized_code(FILE* stream, HBenchmarkResults* results); // }}} diff --git a/src/internal.h b/src/internal.h index 8a8f9720..68b7d974 100644 --- a/src/internal.h +++ b/src/internal.h @@ -110,8 +110,8 @@ struct HParseState_ { }; typedef struct HParserBackendVTable_ { - int (*compile)(HAllocator *mm__, HParser* parser, const void* params); - HParseResult* (*parse)(HAllocator *mm__, HParser* parser, HParseState* parse_state); + int (*compile)(HAllocator *mm__, const HParser* parser, const void* params); + HParseResult* (*parse)(HAllocator *mm__, const HParser* parser, HParseState* parse_state); } HParserBackendVTable; diff --git a/src/t_benchmark.c b/src/t_benchmark.c index ad682b88..1859dac7 100644 --- a/src/t_benchmark.c +++ b/src/t_benchmark.c @@ -2,11 +2,14 @@ #include "hammer.h" HParserTestcase testcases[] = { - {NULL, 0, NULL} + {(unsigned char*)"1,2,3", 5, "(u0x31 u0x32 u0x33)"}, + {(unsigned char*)"1,3,2", 5, "(u0x31 u0x33 u0x32)"}, + {(unsigned char*)"1,3", 3, "(u0x31 u0x33)"}, + {(unsigned char*)"3", 1, "(u0x33)"} }; void test_benchmark_1() { - HParser *parser = NULL; // TODO: fill this in. + const HParser *parser = h_sepBy1(h_choice(h_ch('1'), h_ch('2'), h_ch('3'), NULL), h_ch(',')); HBenchmarkResults *res = h_benchmark(parser, testcases); h_benchmark_report(stderr, res); -- GitLab