diff options
Diffstat (limited to 'skeletons/tests/check-INTEGER.c')
-rw-r--r-- | skeletons/tests/check-INTEGER.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/skeletons/tests/check-INTEGER.c b/skeletons/tests/check-INTEGER.c new file mode 100644 index 00000000..4053075e --- /dev/null +++ b/skeletons/tests/check-INTEGER.c @@ -0,0 +1,56 @@ +#include "../INTEGER.c" +#include "../ber_decoder.c" +#include "../ber_tlv_length.c" +#include "../ber_tlv_tag.c" +#include "../der_encoder.c" +#include "../constraints.c" + +static void +check(uint8_t *buf, int size, long check_long, int check_ret) { + INTEGER_t val; + int ret; + long rlong = 123; + + assert(buf); + assert(size >= 0); + + val.buf = buf; + val.size = size; + + + ret = asn1_INTEGER2long(&val, &rlong); + printf("Testing (%ld, %d) vs (%ld, %d)\n", + rlong, ret, check_long, check_ret); + assert(ret == check_ret); + if(ret == -1) return; + assert(rlong == check_long); +} + +int +main(int ac, char **av) { + uint8_t buf1[] = { 1 }; + uint8_t buf2[] = { 0xff }; + uint8_t buf3[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + uint8_t buf4[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0 }; + uint8_t buf5[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; + uint8_t buf6[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + uint8_t buf7[] = { 0xff, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + uint8_t buf8[] = { 0x7f, 0x7e, 0x7d, 0x7c }; + uint8_t buf9[] = { 0, 0x7f, 0x7e, 0x7d, 0x7c }; + uint8_t buf10[] = { 0, 0, 0, 0, 0, 0, 0x7f, 0x7e, 0x7d, 0x7c }; + +#define CHECK(buf, val, ret) check(buf, sizeof(buf), val, ret) + + CHECK(buf1, 1, 0); + CHECK(buf2, -1, 0); + CHECK(buf3, -1, 0); + CHECK(buf4, -16, 0); + CHECK(buf5, 257, 0); + CHECK(buf6, 123, -1); + CHECK(buf7, 123, -1); + CHECK(buf8, 0x7F7E7D7C, 0); + CHECK(buf9, 0x7F7E7D7C, 0); + CHECK(buf10, 0x7F7E7D7C, 0); + + return 0; +} |