diff options
author | Lev Walkin <vlm@lionet.info> | 2010-10-25 00:10:34 -0700 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2010-10-25 00:10:34 -0700 |
commit | ffe79f445099764490217e07622f535b887b2c84 (patch) | |
tree | f9bad460af8fc9ddd11ddf28b696dbeebe618dec /asn1c | |
parent | a6dd57a927459e7a517833d41ba3565057f9b859 (diff) |
Enumeration constraints relaxed
Diffstat (limited to 'asn1c')
-rw-r--r-- | asn1c/tests/check-03.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/asn1c/tests/check-03.c b/asn1c/tests/check-03.c new file mode 100644 index 00000000..a821675e --- /dev/null +++ b/asn1c/tests/check-03.c @@ -0,0 +1,62 @@ +#undef NDEBUG +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <string.h> +#include <assert.h> + +#include "Enum2.h" +#include "xer_decoder.h" + +static char buf[4096]; +static int buf_offset; + +static int +buf_writer(const void *buffer, size_t size, void *app_key) { + char *b, *bend; + (void)app_key; + assert(buf_offset + size < sizeof(buf)); + memcpy(buf + buf_offset, buffer, size); + b = buf + buf_offset; + bend = b + size; + buf_offset += size; + return 0; +} + +static void +check_xer(e_Enum2 eval, char *xer_string) { + asn_dec_rval_t rv; + char buf2[128]; + Enum2_t *e = 0; + long val; + + rv = xer_decode(0, &asn_DEF_Enum2, (void **)&e, + xer_string, strlen(xer_string)); + assert(rv.code == RC_OK); + assert(rv.consumed == strlen(xer_string)); + + asn_INTEGER2long(e, &val); + printf("%s -> %ld == %d\n", xer_string, val, eval); + assert(val == eval); + + buf_offset = 0; + xer_encode(&asn_DEF_Enum2, e, XER_F_CANONICAL, buf_writer, 0); + buf[buf_offset] = 0; + sprintf(buf2, "<Enum2>%s</Enum2>", xer_string); + printf("%ld -> %s == %s\n", eval, buf, buf2); + assert(0 == strcmp(buf, buf2)); +} + +int +main() { + + check_xer(Enum2_red, "<red/>"); + check_xer(Enum2_green, "<green/>"); + check_xer(Enum2_blue, "<blue/>"); + check_xer(Enum2_orange, "<orange/>"); + check_xer(Enum2_alpha, "<alpha/>"); + check_xer(Enum2_beta, "<beta/>"); + check_xer(Enum2_gamma, "<gamma/>"); + + return 0; +} |