PER encoding fix. Reported by Grzegorz Aksamit.
diff --git a/skeletons/tests/check-PER.c b/skeletons/tests/check-PER.c
index 12e700c..32ac52a 100644
--- a/skeletons/tests/check-PER.c
+++ b/skeletons/tests/check-PER.c
@@ -213,12 +213,82 @@
 	assert(po.tmpspace[5] == 0xff);
 	assert(po.tmpspace[6] == 0xfe);
 
+}
 
+static void
+check_per_encoding_sweep_with(uint8_t buf[], int already_bits, int add_bits) {
+	size_t buf_size = 8;
+	asn_per_data_t pos;
+	asn_per_outp_t out;
+	int32_t d_already;
+	int32_t d_add;
+	int32_t d_left;
+	int left_bits;
+	int i;
+
+	memset(&pos, 0, sizeof(pos));
+	pos.buffer = buf;
+	pos.nboff = 0;
+	pos.nbits = buf_size * 8;
+
+	memset(&out, 0, sizeof(out));
+	out.buffer = out.tmpspace;
+	out.nbits = 8 * sizeof(out.tmpspace);
+	assert(sizeof(out.tmpspace) >= buf_size);
+	memcpy(out.buffer, buf, buf_size);
+
+	d_already = per_get_few_bits(&pos, already_bits);
+	d_add = per_get_few_bits(&pos, add_bits);
+
+	per_put_few_bits(&out, d_already, already_bits);
+	per_put_few_bits(&out, d_add, add_bits);
+	if(out.nboff % 8) {
+		left_bits = 8 - (out.nboff % 8);
+		d_left = per_get_few_bits(&pos, left_bits);
+	} else {
+		left_bits = 0;
+		d_left = 0;
+	}
+	per_put_few_bits(&out, d_left, left_bits);
+	assert(0 == (out.nboff % 8));
+
+	if(0 != memcmp(out.tmpspace, buf, buf_size)) {
+		printf("IN: ");
+		for(i = 0; i < buf_size; i++)
+			printf(" %02x", buf[i]);
+		printf("\nOUT:");
+		for(i = 0; i < buf_size; i++)
+			printf(" %02x", out.tmpspace[i]);
+		printf(" (out{nboff=%d,left=%d,%02x})\n", (int)out.nboff, left_bits, (int)d_left);
+		assert(0 == memcmp(out.tmpspace, buf, buf_size));
+	}
+}
+
+static void
+check_per_encoding_sweep() {
+	uint8_t buf[3][8] = {
+		{ 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA },
+		{ 0xB7, 0x19, 0x2F, 0xEE, 0xAD, 0x11, 0xAA, 0x55 },
+		{ 0xEE, 0xAD, 0x11, 0xAA, 0x55, 0xB7, 0x19, 0x2F }
+	};
+	int already_bits;
+	int add_bits;
+	int buf_idx;
+
+	for(buf_idx = 0; buf_idx < 3; buf_idx++) {
+	 for(already_bits = 0; already_bits < 24; already_bits++) {
+	  for(add_bits = 0; add_bits <= 31; add_bits++) {
+	   /*fprintf(stderr, "PER %d += %d\n", already_bits, add_bits);*/
+	   check_per_encoding_sweep_with(buf[buf_idx], already_bits, add_bits);
+	  }
+	 }
+	}
 }
 
 int
 main() {
 	check_per_decoding();
 	check_per_encoding();
+	check_per_encoding_sweep();
 	return 0;
 }