#undef NDEBUG #include #include #include #include #include #include #include #include static void verify(int testNo, T_t *ti) { asn_enc_rval_t er; asn_dec_rval_t rv; unsigned char buf[8]; T_t *to = 0; er = uper_encode_to_buffer(&asn_DEF_T, ti, buf, sizeof buf); fprintf(stderr, "%d IN: %d => %zd\n", testNo, ti->present, er.encoded); assert(er.encoded >= 1); assert(er.encoded <= (ssize_t)(8 * sizeof(buf))); rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0); assert(rv.code == RC_OK); fprintf(stderr, "%d ENC: %2x%2x\n", testNo, buf[0], buf[1]); fprintf(stderr, "%d OUT: %d\n", testNo, ti->present); assert(ti->present == to->present); switch(ti->present) { case T_PR_NOTHING: assert(ti->present != T_PR_NOTHING); break; case T_PR_first: assert(ti->choice.first.present == to->choice.first.present); assert(ti->choice.first.choice.nothing == to->choice.first.choice.nothing); break; case T_PR_second: assert(ti->choice.second == to->choice.second); break; case T_PR_third: assert(ti->choice.third == to->choice.third); break; } xer_fprint(stderr, &asn_DEF_T, ti); xer_fprint(stderr, &asn_DEF_T, to); } int main() { T_t t; return 0; // this test fails, but not important atm. memset(&t, 0, sizeof(t)); t.present = T_PR_first; t.choice.first.present = first_PR_nothing; t.choice.first.choice.nothing = 5; verify(0, &t); memset(&t, 0, sizeof(t)); t.present = T_PR_second; t.choice.second = -5; verify(1, &t); memset(&t, 0, sizeof(t)); t.present = T_PR_second; t.choice.second = 10; verify(2, &t); memset(&t, 0, sizeof(t)); t.present = T_PR_third; t.choice.third = -10; verify(3, &t); memset(&t, 0, sizeof(t)); t.present = T_PR_third; t.choice.third = 4097; verify(4, &t); return 0; }