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