Initial version of asn1c
[com/asn1c.git] / tests / tests-c-compiler / check-src / check-131.-gen-PER.c
diff --git a/tests/tests-c-compiler/check-src/check-131.-gen-PER.c b/tests/tests-c-compiler/check-src/check-131.-gen-PER.c
new file mode 100644 (file)
index 0000000..0b8fcd6
--- /dev/null
@@ -0,0 +1,60 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#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 + (int)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);
+
+       ASN_STRUCT_FREE(asn_DEF_T, t2);
+       return 0;
+}