| #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("%d -> %s == %s\n", eval, buf, buf2); |
| assert(0 == strcmp(buf, buf2)); |
| |
| ASN_STRUCT_FREE(asn_DEF_Enum2, e); |
| } |
| |
| 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; |
| } |