diff --git a/lib/c/2006/Makefile b/lib/c/2006/Makefile index 194b0bc056854bc8cea137a3113b31943ab503a9..6ad51a63180dac3d6e07c3d6a6a71c4cd8101b5b 100644 --- a/lib/c/2006/Makefile +++ b/lib/c/2006/Makefile @@ -24,7 +24,7 @@ OBJS=labcomm$(VERSION).o \ labcomm$(VERSION)_pthread_scheduler.o LABCOMM_JAR=../../../compiler/labcomm$(LIBVERSION)_compiler.jar -LABCOMM=java -jar $(LABCOMM_JAR) +LABCOMM=java -jar $(LABCOMM_JAR) TESTS=test_labcomm_basic_type_encoding \ test_labcomm_generated_encoding \ @@ -96,6 +96,7 @@ $(TEST_DIR)/gen/%.o: $(TEST_DIR)/%.c | $(TEST_DIR)/gen .PRECIOUS: $(TEST_DIR)/gen/%.h $(TEST_DIR)/gen/%.c $(TEST_DIR)/gen/%.h: $(TEST_DIR)/%.lc | $(TEST_DIR)/gen $(LABCOMM) \ + --ver=$(VERSION) \ --c=$(TEST_DIR)/gen/$*.c \ --h=$(TEST_DIR)/gen/$*.h \ $< diff --git a/lib/c/2014/test/test_labcomm.c b/lib/c/2014/test/test_labcomm.c index e37950e612d3ffb38c08bdec4b31c0325cb851a7..1ca14a9181bacd6d627c5d31214fc32aae19dc07 100644 --- a/lib/c/2014/test/test_labcomm.c +++ b/lib/c/2014/test/test_labcomm.c @@ -30,6 +30,44 @@ #include "labcomm_default_scheduler.h" #include "test/gen/test_sample.h" +static struct labcomm_writer writer; + +static struct expect { + char *description; + int result; + int (*trampoline)(struct labcomm_decoder *context); + struct labcomm_decoder *context; +} *expect; + +static void check_expect() +{ + struct expect *p = expect; + + { + int i; + for (i = 0 ; i < writer.pos ; i++) { + fprintf(stderr, "%02x ", writer.data[i]); + } + fprintf(stderr, "\n"); + } + if (p && p->trampoline) { + int err; + + expect = p + 1; + fprintf(stderr, "Checking '%s' expected=%d ", p->description, p->result); + err = p->trampoline(p->context); + fprintf(stderr, "actual=%d\n", err); + if (p->result >= 0 && p->result != err) { + fprintf(stderr, "FAILED\n"); + exit(1); + } else if (err == 0) { + fprintf(stderr, "FAILED (unexpected 0)\n"); + exit(1); + } + writer.pos = 0; + } +} + static unsigned char buffer[512]; static int writer_alloc(struct labcomm_writer *w, @@ -41,6 +79,7 @@ static int writer_alloc(struct labcomm_writer *w, return 0; } + static int writer_start(struct labcomm_writer *w, struct labcomm_writer_action_context *action_context, int index, const struct labcomm_signature *signature, @@ -48,15 +87,27 @@ static int writer_start(struct labcomm_writer *w, { return 0; } + +static int buf_writer_end( + struct labcomm_writer *w, + struct labcomm_writer_action_context *action_context) +{ + check_expect(); + return 0; +} + const struct labcomm_writer_action writer_action = { .alloc = writer_alloc, .start = writer_start, + .end = buf_writer_end, }; + static struct labcomm_writer_action_context writer_action_context = { .next = NULL, .action = &writer_action, .context = NULL }; + static struct labcomm_writer writer = { .action_context = &writer_action_context, .data = buffer, @@ -76,21 +127,25 @@ static int reader_alloc(struct labcomm_reader *r, return 0; } + static int reader_fill(struct labcomm_reader *r, struct labcomm_reader_action_context *action_context) { r->error = -ENOMEM; return r->error; } + const struct labcomm_reader_action reader_action = { .alloc = reader_alloc, .fill = reader_fill, }; + static struct labcomm_reader_action_context reader_action_context = { .next = NULL, .action = &reader_action, .context = NULL }; + static struct labcomm_reader reader = { .action_context = &reader_action_context, .data = buffer, @@ -106,6 +161,7 @@ static test_sample_test_var encoder_var = { .n_2 = 1, .a = encoder_data, }; + static int32_t decoder_data[256]; static test_sample_test_var decoder_var = { .n_0 = 1, @@ -127,8 +183,9 @@ int test_decode_one(struct labcomm_decoder *decoder) reader.pos = 0; result = labcomm_decoder_decode_one(decoder); if (result >= 0 ) { - fprintf(stderr, "Got result from buffer with bogus length (%d)\n", - result); + fprintf(stderr, + "Got result from buffer with bogus length (%d, %d != %d)\n", + result, reader.count, writer.pos); exit(1); } } @@ -137,7 +194,7 @@ int test_decode_one(struct labcomm_decoder *decoder) reader.count = writer.pos; result = labcomm_decoder_decode_one(decoder); if (result < 0) { - fprintf(stderr, "Got result from buffer with correct length (%d)\n", + fprintf(stderr, "Got no result from buffer with correct length (%d)\n", result); exit(1); } @@ -175,22 +232,31 @@ static void test_encode_decode(struct labcomm_encoder *encoder, int main(void) { int err, i; - struct labcomm_encoder *encoder = labcomm_encoder_new( - &writer, + struct labcomm_decoder *decoder = labcomm_decoder_new( + &reader, labcomm_default_error_handler, labcomm_default_memory, labcomm_default_scheduler); - struct labcomm_decoder *decoder = labcomm_decoder_new( - &reader, + struct expect expect_version[] = { + { "Version", 1, test_decode_one, decoder }, + { 0, 0, 0 } + }; + expect = expect_version; + struct labcomm_encoder *encoder = labcomm_encoder_new( + &writer, labcomm_default_error_handler, labcomm_default_memory, labcomm_default_scheduler); - err = test_decode_one(decoder); - fprintf(stderr, "decode of version -> index %d\n", err); - writer.pos = 0; labcomm_decoder_register_test_sample_test_var(decoder, handle_test_var, NULL); + struct expect expect_registration[] = { + { "Sampledef", -1, test_decode_one, decoder }, + { "Typedef", -1, test_decode_one, decoder }, + { "Binding", -1, test_decode_one, decoder }, + { 0, 0, 0 } + }; + expect = expect_registration; labcomm_encoder_register_test_sample_test_var(encoder); err = test_decode_one(decoder); fprintf(stderr, "decode of register -> index %d\n", err); diff --git a/lib/c/Makefile b/lib/c/Makefile index de73c0473010a4d81e80cb18f356bb08561afb6d..c2b23ee9f9373497e4e1ae612a99ed1ee903110a 100644 --- a/lib/c/Makefile +++ b/lib/c/Makefile @@ -8,6 +8,6 @@ all: .PHONY: distclean distclean: - rm *.o *.so *.so.1 *.a - for v in $(VERSIONS) ; do $(MAKE) -C $${v} distclean ; done + for v in $(VERSIONS) ; do $(MAKE) -C $${v} $@ || exit 1 ; done + rm -f *.o *.so *.so.1 *.a