additional checks
diff --git a/skeletons/tests/check-PER.c b/skeletons/tests/check-PER.c
index 32ac52a..f21398b 100644
--- a/skeletons/tests/check-PER.c
+++ b/skeletons/tests/check-PER.c
@@ -215,6 +215,44 @@
}
+/*
+ * Add N bits after P bits. Should result in N+P bits added.
+ */
+static void
+check_per_encoding_auto() {
+ int prior, next;
+ int ret, i;
+
+ for(prior = 0; prior <= 31; prior++) {
+ for(next = 0; next <= 31; next++) {
+ asn_per_outp_t po;
+ po.buffer = po.tmpspace;
+ po.nboff = 0;
+ po.nbits = 0;
+ po.outper = Ignore;
+ po.op_key = 0;
+ po.tmpspace[0] = 0xff;
+
+ ret = per_put_few_bits(&po, -1, prior);
+ assert(ret == 0);
+
+ fprintf(stderr, " (out{nboff=%d,nbits=%d,buf_offset=%d})\n", (int)po.nboff, (int)po.nbits, (int)(po.buffer - po.tmpspace));
+
+ ret = per_put_few_bits(&po, -1, next);
+ assert(ret == 0);
+
+ fprintf(stderr, " (out{nboff=%d,nbits=%d,buf_offset=%d})\n", (int)po.nboff, (int)po.nbits, (int)(po.buffer - po.tmpspace));
+
+ fprintf(stderr, "Putting %d + %d bits (%d/%d), got %d bytes and %d bits\n",
+ prior, next, (prior + next) / 8, (prior + next) % 8,
+ (int)(po.buffer - po.tmpspace), (int)po.nboff);
+ assert((po.buffer - po.tmpspace) * 8 + po.nboff == prior + next);
+ for(i = 0; i < (po.buffer - po.tmpspace); i++)
+ assert(po.tmpspace[0] == (unsigned char)-1);
+ }
+ }
+}
+
static void
check_per_encoding_sweep_with(uint8_t buf[], int already_bits, int add_bits) {
size_t buf_size = 8;
@@ -289,6 +327,7 @@
main() {
check_per_decoding();
check_per_encoding();
+ check_per_encoding_auto();
check_per_encoding_sweep();
return 0;
}