blob: 5fcb1aeebf8ce555ffb58f460993ca5747d3dc25 [file] [log] [blame]
vlm337167e2005-11-26 11:25:14 +00001#include <per_support.c>
2#include <assert.h>
3
4int
5main() {
6 uint8_t buf[] = { 0xB7, 0x19, 0x2F, 0xEE, 0xAD };
7 uint8_t tmpbuf[10];
8 int32_t z;
9 asn_per_data_t pos;
10
11 pos.buffer = buf;
12 pos.nboff = 0;
13 pos.nbits = sizeof(buf) * 8;
14
15 z = per_get_few_bits(&pos, 32);
16 assert(z == -1);
vlm17af7cc2005-11-28 06:58:11 +000017 assert(pos.nbits == sizeof(buf) * 8);
vlm337167e2005-11-26 11:25:14 +000018
19 z = per_get_few_bits(&pos, 0);
20 assert(z == 0);
21 assert(pos.nboff == 0);
vlm17af7cc2005-11-28 06:58:11 +000022 assert(pos.nbits == sizeof(buf) * 8);
vlm337167e2005-11-26 11:25:14 +000023
24 z = per_get_few_bits(&pos, 1);
25 assert(z == 1);
26 assert(pos.nboff == 1);
vlm17af7cc2005-11-28 06:58:11 +000027 assert(pos.nbits == sizeof(buf) * 8);
vlm337167e2005-11-26 11:25:14 +000028
29 z = per_get_few_bits(&pos, 2);
30 assert(z == 1);
31 assert(pos.nboff == 3);
vlm17af7cc2005-11-28 06:58:11 +000032 assert(pos.nbits == sizeof(buf) * 8);
vlm337167e2005-11-26 11:25:14 +000033
34 z = per_get_few_bits(&pos, 2);
35 assert(z == 2);
36 assert(pos.nboff == 5);
vlm17af7cc2005-11-28 06:58:11 +000037 assert(pos.nbits == sizeof(buf) * 8);
vlm337167e2005-11-26 11:25:14 +000038
39 z = per_get_few_bits(&pos, 3);
40 assert(z == 7);
41 assert(pos.nboff == 8);
42 assert(pos.nbits == sizeof(buf) * 8);
43
44 z = per_get_few_bits(&pos, 8);
45 assert(z == 0x19);
46 assert(pos.nboff == 8);
47 assert(pos.nbits == (sizeof(buf) - 1) * 8);
48
49 z = per_get_few_bits(&pos, 1);
50 assert(z == 0);
51 assert(pos.nboff == 1);
52 assert(pos.nbits == (sizeof(buf) - 2) * 8);
53
54 z = per_get_few_bits(&pos, 3);
55 assert(z == 2);
56 assert(pos.nboff == 4);
57 assert(pos.nbits == (sizeof(buf) - 2) * 8);
58
59 z = per_get_few_bits(&pos, 8);
60 assert(z == 254);
61 assert(pos.nboff == 12);
62
63 pos.buffer = buf;
64 pos.nboff = 2;
65 pos.nbits = sizeof(buf) * 8;
66 z = per_get_few_bits(&pos, 24);
67 assert(z == 14443711);
68
vlm17af7cc2005-11-28 06:58:11 +000069 /* Get full 31-bit range */
70 pos.buffer = buf;
71 pos.nboff = 7;
72 pos.nbits = sizeof(buf) * 8;
73 z = per_get_few_bits(&pos, 31);
74 assert(z == 1179384747);
75
76 /* Get a bit shifted range */
77 pos.buffer = buf;
78 pos.nboff = 6;
79 pos.nbits = sizeof(buf) * 8;
80 z = per_get_few_bits(&pos, 31);
81 assert(z == 1663434197);
82
vlm337167e2005-11-26 11:25:14 +000083 pos.buffer = buf;
84 pos.nboff = 0;
85 pos.nbits = sizeof(buf) * 8;
86 z = per_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8);
87 assert(z == 0);
88 assert(buf[0] == tmpbuf[0]);
89 assert(buf[1] == tmpbuf[1]);
90 assert(buf[2] == tmpbuf[2]);
91 assert(buf[3] == tmpbuf[3]);
92 assert(buf[4] == tmpbuf[4]);
93
94 pos.buffer = buf;
95 pos.nboff = 1;
96 pos.nbits = sizeof(buf) * 8;
97 z = per_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8);
98 assert(z == -1);
99
100 pos.buffer = buf;
101 pos.nboff = 1;
102 pos.nbits = sizeof(buf) * 8;
103 z = per_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8 - 1);
104 assert(z == 0);
105 assert(tmpbuf[0] == 110);
106 assert(tmpbuf[1] == 50);
107 assert(tmpbuf[2] == 95);
108 assert(tmpbuf[3] == 221);
109 assert(tmpbuf[4] == 90);
110
111 pos.buffer = buf;
112 pos.nboff = 1;
113 pos.nbits = sizeof(buf) * 8;
114 z = per_get_many_bits(&pos, tmpbuf, 1, sizeof(buf) * 8 - 1);
115 assert(z == 0);
116 assert(tmpbuf[0] == 55);
117 assert(tmpbuf[0] != buf[0]);
118 assert(tmpbuf[1] == buf[1]);
119 assert(tmpbuf[2] == buf[2]);
120 assert(tmpbuf[3] == buf[3]);
121 assert(tmpbuf[4] == buf[4]);
122
123 return 0;
124}