#undef NDEBUG #include #include #include #include #include #include "T.h" #include "per_opentype.h" int main() { asn_per_data_t pd; asn_per_outp_t po; asn_dec_rval_t rv; T_t t; T_t *t2 = 0; size_t i; memset(&po, 0, sizeof po); po.buffer = po.tmpspace; po.nbits = sizeof(po.tmpspace) * 8; memset(&t, 0, sizeof t); printf("Checking uper_open_type_put():\n"); assert(0 == uper_open_type_put(&asn_DEF_T, 0, &t, &po)); assert(po.nbits == (-1 + sizeof(po.tmpspace)) * 8); printf("po{nboff=%zd; nbits=%zd; buffer=%p; tmpspace=%p}\n", po.nboff, po.nbits, po.buffer, po.tmpspace); /* One byte length and one byte 0x00 */ assert( (po.nboff == 8 && po.buffer == &po.tmpspace[1]) || (po.nboff == 0 && po.buffer == &po.tmpspace[2])); assert(po.tmpspace[0] == 0x01); assert(po.tmpspace[1] == 0x00); printf("\nChecking uper_open_type_get():\n"); for(i = 0; i < 16; i++) { FREEMEM(t2); t2 = 0; memset(&pd, 0, sizeof pd); pd.buffer = po.tmpspace; pd.nboff = 0; pd.nbits = i; rv = uper_open_type_get(0, &asn_DEF_T, 0, (void **)&t2, &pd); assert(rv.code == RC_WMORE); } memset(&pd, 0, sizeof pd); pd.buffer = po.tmpspace; pd.nboff = 0; pd.nbits = 16; rv = uper_open_type_get(0, &asn_DEF_T, 0, (void **)&t2, &pd); assert(rv.code == RC_OK); assert( (pd.nboff == 8 && pd.buffer == &po.tmpspace[1]) || (pd.nboff == 16 && pd.buffer == &po.tmpspace[0])); assert(pd.nboff + pd.nbits == 16); return 0; }