aboutsummaryrefslogtreecommitdiff
path: root/test/src/util/test_bits.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/src/util/test_bits.c')
-rw-r--r--test/src/util/test_bits.c346
1 files changed, 346 insertions, 0 deletions
diff --git a/test/src/util/test_bits.c b/test/src/util/test_bits.c
new file mode 100644
index 0000000..7b5a896
--- /dev/null
+++ b/test/src/util/test_bits.c
@@ -0,0 +1,346 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+
+#include <criterion/criterion.h>
+#include <gen/types.h>
+#include "util/bits.h"
+#include "util/memory.h"
+#include "test/default.h"
+
+TestSuite(bits, .init = default_setup, .fini = default_teardown);
+
+
+Test(bits, test_bits_new) {
+ bits_t *bits = bits_new(10);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 10,);
+ cr_assert_eq(bits->allocated, 2,);
+ cr_assert_eq(bits->bits[0], 0,);
+ cr_assert_eq(bits->bits[1], 0,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_copy) {
+ bits_t *bits = bits_new(10);
+ bits->bits[0] = 0b10101010;
+ bits->bits[1] = 0b11000000;
+
+ bits_t *other_bits = bits_copy(bits);
+ cr_assert_not_null(other_bits,);
+ cr_assert_eq(other_bits->allocated, bits->allocated,);
+ cr_assert_eq(other_bits->bitlen, bits->bitlen,);
+ cr_assert_eq(other_bits->bits[0], bits->bits[0],);
+ cr_assert_eq(other_bits->bits[1], bits->bits[1],);
+ bits_free(&bits);
+ bits_free(&other_bits);
+}
+
+Test(bits, test_bits_from_i) {
+ GEN i = int2n(5);
+
+ bits_t *bits = bits_from_i(i);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 6,);
+ cr_assert_eq(bits->allocated, 1,);
+ cr_assert_eq(bits->bits[0], 0b10000000,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_from_hex) {
+ char *hex = "0ab";
+
+ bits_t *bits = bits_from_hex(hex);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 12,);
+ cr_assert_eq(bits->allocated, 2,);
+ cr_assert_eq(bits->bits[0], 0x0a,);
+ cr_assert_eq(bits->bits[1], 0xb0,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_from_bin) {
+ char *bin = "000010101101";
+
+ bits_t *bits = bits_from_bin(bin);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 12,);
+ cr_assert_eq(bits->allocated, 2,);
+ cr_assert_eq(bits->bits[0], 0b00001010,);
+ cr_assert_eq(bits->bits[1], 0b11010000,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_from_raw) {
+ unsigned char *raw = (unsigned char *)"\x0a\xb0";
+
+ bits_t *bits = bits_from_raw(raw, 16);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 16,);
+ cr_assert_eq(bits->allocated, 2,);
+ cr_assert_eq(bits->bits[0], 0x0a,);
+ cr_assert_eq(bits->bits[1], 0xb0,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_from_bitvec) {
+ GEN bitvec = binary_zv(int2n(5));
+
+ bits_t *bits = bits_from_bitvec(bitvec);
+ cr_assert_not_null(bits,);
+ cr_assert_eq(bits->bitlen, 6,);
+ cr_assert_eq(bits->allocated, 1,);
+ cr_assert_eq(bits->bits[0], 0b10000000,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_to_i) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ GEN i = bits_to_i(bits);
+ cr_assert_not_null(bits,);
+ cr_assert(gequal(i, int2n(5)),);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_to_hex) {
+ bits_t *bits = bits_new(12);
+ bits->bits[0] = 0xab;
+ bits->bits[1] = 0xc0;
+
+ char *hex = bits_to_hex(bits);
+ cr_assert_not_null(hex,);
+ cr_assert_str_eq(hex, "abc0",);
+ try_free(hex);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_to_bin) {
+ bits_t *bits = bits_new(12);
+ bits->bits[0] = 0b10101010;
+ bits->bits[1] = 0b11110000;
+
+ char *bin = bits_to_bin(bits);
+ cr_assert_not_null(bin,);
+ cr_assert_str_eq(bin, "101010101111",);
+ try_free(bin);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_to_raw) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ unsigned char *raw = bits_to_raw(bits);
+ size_t rawlen = bits_to_rawlen(bits);
+ cr_assert_not_null(raw,);
+ cr_assert_eq(rawlen, 1,);
+ cr_assert_eq(raw[0], 0b10000000,);
+ try_free(raw);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_to_bitvec) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ GEN bitvec = bits_to_bitvec(bits);
+ cr_assert_not_null(bitvec,);
+ cr_assert(gequal(bitvec, binary_zv(int2n(5))),);
+}
+
+Test(bits, test_bits_or) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *other_bits = bits_new(10);
+ other_bits->bits[0] = 0b00000000;
+ other_bits->bits[1] = 0b11000000;
+
+ bits_t *or = bits_or(bits, other_bits);
+ cr_assert_not_null(or,);
+ cr_assert_eq(or->bitlen, 10,);
+ cr_assert_eq(or->bits[0], 0b00001000,);
+ cr_assert_eq(or->bits[1], 0b11000000,);
+ bits_free(&bits);
+ bits_free(&other_bits);
+ bits_free(&or);
+}
+
+Test(bits, test_bits_and) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *other_bits = bits_new(10);
+ other_bits->bits[0] = 0b00001000;
+ other_bits->bits[1] = 0b11000000;
+
+ bits_t *and = bits_and(bits, other_bits);
+ cr_assert_not_null(and,);
+ cr_assert_eq(and->bitlen, 10,);
+ cr_assert_eq(and->bits[0], 0b00001000,);
+ cr_assert_eq(and->bits[1], 0b00000000,);
+ bits_free(&bits);
+ bits_free(&other_bits);
+ bits_free(&and);
+}
+
+Test(bits, test_bits_notz) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_notz(bits);
+ cr_assert_eq(bits->bitlen, 6,);
+ cr_assert_eq(bits->bits[0], 0b01111100,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_not) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *not = bits_not(bits);
+ cr_assert_not_null(not,);
+ cr_assert_eq(not->bitlen, 6,);
+ cr_assert_eq(not->bits[0], 0b01111100,);
+ bits_free(&bits);
+ bits_free(&not);
+}
+
+Test(bits, test_bits_rotz) {
+ bits_t *bits = bits_new(10);
+ bits->bits[0] = 0b11111000;
+ bits->bits[1] = 0b00000000;
+
+ bits_rotz(bits);
+ cr_assert_eq(bits->bitlen, 10,);
+ cr_assert_eq(bits->bits[0], 0b00000111,);
+ cr_assert_eq(bits->bits[1], 0b11000000,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_rot) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *rot = bits_rot(bits);
+ cr_assert_not_null(rot,);
+ cr_assert_eq(rot->bitlen, 6,);
+ cr_assert_eq(rot->bits[0], 0b00000100,);
+ bits_free(&bits);
+ bits_free(&rot);
+
+ bits = bits_new(5);
+ bits->bits[0] = 0b10100000;
+
+ rot = bits_rot(bits);
+ cr_assert_not_null(rot,);
+ cr_assert_eq(rot->bitlen, 5,);
+ cr_assert_eq(rot->bits[0], 0b00101000,);
+ bits_free(&bits);
+ bits_free(&rot);
+}
+
+Test(bits, test_bits_shiftz) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10101000;
+
+ bits_shiftz(bits, -1);
+ cr_assert_eq(bits->bitlen, 6,);
+ cr_assert_eq(bits->bits[0], 0b01010100,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_shift) {
+ bits_t *bits = bits_new(8);
+ bits->bits[0] = 0b11001100;
+
+ bits_t *shift = bits_shift(bits, 2);
+ cr_assert_not_null(shift,);
+ cr_assert_eq(shift->bitlen, 8,);
+ cr_assert_eq(shift->bits[0], 0b00110000,);
+ bits_free(&bits);
+ bits_free(&shift);
+}
+
+Test(bits, test_bits_shiftrz) {
+ bits_t *bits = bits_new(8);
+ bits->bits[0] = 0b11001100;
+
+ bits_shiftrz(bits, 1);
+ cr_assert_eq(bits->bitlen, 8,);
+ cr_assert_eq(bits->bits[0], 0b10011001,);
+ bits->bits[0] = 0b11001100;
+
+ bits_shiftrz(bits, 9);
+ cr_assert_eq(bits->bitlen, 8,);
+ cr_assert_eq(bits->bits[0], 0b10011001,);
+ bits->bits[0] = 0b11001100;
+
+ bits_shiftrz(bits, -10);
+ cr_assert_eq(bits->bitlen, 8,);
+ cr_assert_eq(bits->bits[0], 0b00110011,);
+ bits_free(&bits);
+}
+
+Test(bits, test_bits_shiftr) {
+ bits_t *bits = bits_new(8);
+ bits->bits[0] = 0b11001100;
+
+ bits_t *shift = bits_shiftr(bits, 1);
+ cr_assert_eq(shift->bitlen, 8,);
+ cr_assert_eq(shift->bits[0], 0b10011001,);
+ bits_free(&bits);
+ bits_free(&shift);
+}
+
+Test(bits, test_bits_eq) {
+ bits_t *bits = bits_new(6);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *other_bits = bits_new(6);
+ other_bits->bits[0] = 0b10000000;
+
+ cr_assert(bits_eq(bits, other_bits),);
+
+ bits->bits[0] = 0b10010000;
+ other_bits->bits[0] = 0b10000000;
+
+ cr_assert_not(bits_eq(bits, other_bits),);
+
+ bits_free(&bits);
+ bits_free(&other_bits);
+}
+
+Test(bits, test_bits_eq_len) {
+ bits_t *bits = bits_new(5);
+ bits->bits[0] = 0b10000000;
+
+ bits_t *other_bits = bits_new(6);
+ other_bits->bits[0] = 0b10000000;
+ cr_assert_not(bits_eq(bits, other_bits),);
+ bits_free(&bits);
+ bits_free(&other_bits);
+}
+
+Test(bits, test_bits_eq_large) {
+ bits_t *bits = bits_new(10);
+ bits->bits[0] = 0b10000010;
+ bits->bits[1] = 0b11000000;
+
+ bits_t *other_bits = bits_new(10);
+ other_bits->bits[0] = 0b10000010;
+ other_bits->bits[1] = 0b11000000;
+
+ cr_assert(bits_eq(bits, other_bits),);
+
+ bits->bits[0] = 0b10000000;
+ other_bits->bits[0] = 0b00000010;
+
+ cr_assert_not(bits_eq(bits, other_bits),);
+
+ bits_free(&bits);
+ bits_free(&other_bits);
+}