blob: 1e91999f7dcf328618a04aa4d38539b5a3ce3414 [file] [log] [blame]
Lev Walkined3a4ae2017-07-07 10:09:51 -07001#include <stdio.h>
2#include <assert.h>
3
4#include <INTEGER.h>
5#include <INTEGER.c>
6#include <INTEGER_oer.c>
7
Lev Walkin54f34512017-07-10 05:27:46 -07008#define CHECK_DECODE_OK(a, b, c) check_decode_ok(__LINE__, a, b, c)
9
Lev Walkined3a4ae2017-07-07 10:09:51 -070010void
Lev Walkin54f34512017-07-10 05:27:46 -070011check_decode_ok(int lineno, intmax_t control, char *buf, size_t size) {
12
13 INTEGER_t *st = NULL;
14 asn_dec_rval_t ret;
15
16 ret = asn_DEF_INTEGER.oer_decoder(0, &asn_DEF_INTEGER, 0, (void **)&st, buf, size);
17 if(ret.code != RC_OK) {
18 /* Basic OER decode does not work */
19 fprintf(stderr, "%d: Failed oer_decode(ctl=%" PRIdMAX ", size=%zu)\n",
20 lineno, control, size);
21 assert(ret.code == RC_OK);
22 } else {
23 intmax_t outcome;
24 if(asn_INTEGER2imax(st, &outcome) != 0) {
25 /* Result of decode is structurally incorrect */
26 fprintf(stderr, "%d: Failed to convert INTEGER 2 imax\n",
27 lineno);
28 assert(!"Unreachable");
29 } else if(outcome != control) {
30 /* Decoded value is wrong */
31 fprintf(stderr,
32 "%d: Decode result %" PRIdMAX " is not expected %" PRIdMAX
33 "\n",
34 lineno, outcome, control);
35 assert(outcome == control);
36 }
37 }
38
39 fprintf(stderr, "%d: Decode result %" PRIdMAX "\n", lineno, control);
Lev Walkined3a4ae2017-07-07 10:09:51 -070040}
41
42int
43main() {
Lev Walkin54f34512017-07-10 05:27:46 -070044 CHECK_DECODE_OK(0, "", 1);
Lev Walkined3a4ae2017-07-07 10:09:51 -070045}