blob: cb479ffd74243daeff5bfedba5e1ca25e4cc3496 [file] [log] [blame]
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include <assert.h>
#include <errno.h>
#include "asn1p_integer.h"
static void check(int lineno, asn1c_integer_t value, const char *expected);
struct {
uint8_t *buf; size_t size;
} ff = {
(uint8_t *)"sdf", 3
};
int main() {
check(__LINE__, 0, "{ (uint8_t *)\"\\x00\\0\", 1 }");
check(__LINE__, 1, "{ (uint8_t *)\"\\x01\\0\", 1 }");
check(__LINE__, 127, "{ (uint8_t *)\"\\x7f\\0\", 1 }");
check(__LINE__, 128, "{ (uint8_t *)\"\\x00\\x80\\0\", 2 }");
check(__LINE__, 129, "{ (uint8_t *)\"\\x00\\x81\\0\", 2 }");
check(__LINE__, -1, "{ (uint8_t *)\"\\xff\\0\", 1 }");
check(__LINE__, -2, "{ (uint8_t *)\"\\xfe\\0\", 1 }");
check(__LINE__, -127, "{ (uint8_t *)\"\\x81\\0\", 1 }");
check(__LINE__, -128, "{ (uint8_t *)\"\\x80\\0\", 1 }");
check(__LINE__, -129, "{ (uint8_t *)\"\\xff\\x7f\\0\", 2 }");
check(__LINE__, -254, "{ (uint8_t *)\"\\xff\\x02\\0\", 2 }");
check(__LINE__, -255, "{ (uint8_t *)\"\\xff\\x01\\0\", 2 }");
check(__LINE__, -256, "{ (uint8_t *)\"\\xff\\x00\\0\", 2 }");
check(__LINE__, -257, "{ (uint8_t *)\"\\xfe\\xff\\0\", 2 }");
check(__LINE__, ~(asn1c_integer_t)0, "{ (uint8_t *)\"\\xff\\0\", 1 }");
switch(sizeof(asn1c_integer_t)) {
case 4:
check(__LINE__,
~(asn1c_integer_t)0
& ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
"{ (uint8_t *)\""
"\\x7f\\xff\\xff\\xff"
"\\0\", 4 }");
break;
case 8:
check(__LINE__,
~(asn1c_integer_t)0
& ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
"{ (uint8_t *)\""
"\\x7f\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
"\\0\", 8 }");
break;
case 16:
check(__LINE__,
~(asn1c_integer_t)0
& ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
"{ (uint8_t *)\""
"\\x7f\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
"\\0\", 16 }");
break;
default:
assert(!"Unreachable");
}
return 0;
}
static void check(int lineno, asn1c_integer_t value, const char *expected) {
abuf *ab;
ab = asn1p_integer_as_INTEGER(value);
assert(ab);
if(strcmp(ab->buffer, expected)) {
fprintf(stderr, "%02d: %s -> [%s], expected [%s]\n", lineno,
asn1p_itoa(value), ab->buffer, expected);
assert(strcmp(ab->buffer, expected) == 0);
}
printf("%02d: %s -> %s\n", lineno, asn1p_itoa(value), ab->buffer);
abuf_free(ab);
}