Path: blob/main/contrib/libcbor/test/negint_test.c
39481 views
/*1* Copyright (c) 2014-2020 Pavel Kalvoda <[email protected]>2*3* libcbor is free software; you can redistribute it and/or modify4* it under the terms of the MIT license. See LICENSE for details.5*/67#include "assertions.h"8#include "cbor.h"9#include "test_allocator.h"1011cbor_item_t *number;12struct cbor_load_result res;1314unsigned char data1[] = {0x22, 0xFF};15unsigned char data2[] = {0x38, 0xFF, 0xFF};16unsigned char data3[] = {0x39, 0x01, 0xf4, 0xFF};17unsigned char data4[] = {0x3a, 0xa5, 0xf7, 0x02, 0xb3, 0xFF};18unsigned char data5[] = {0x3b, 0xa5, 0xf7, 0x02, 0xb3,190xa5, 0xf7, 0x02, 0xb3, 0xFF};2021static void test_very_short_int(void **_CBOR_UNUSED(_state)) {22number = cbor_load(data1, 2, &res);23assert_true(cbor_typeof(number) == CBOR_TYPE_NEGINT);24assert_true(cbor_int_get_width(number) == CBOR_INT_8);25assert_false(cbor_isa_uint(number));26assert_true(cbor_isa_negint(number));27assert_true(cbor_get_uint8(number) == 2);28assert_true(res.error.code == 0);29assert_true(res.read == 1);30assert_true(cbor_is_int(number));31cbor_decref(&number);32assert_null(number);33}3435static void test_short_int(void **_CBOR_UNUSED(_state)) {36number = cbor_load(data2, 3, &res);37assert_true(cbor_typeof(number) == CBOR_TYPE_NEGINT);38assert_true(cbor_int_get_width(number) == CBOR_INT_8);39assert_false(cbor_isa_uint(number));40assert_true(cbor_isa_negint(number));41assert_true(cbor_get_uint8(number) == 255);42assert_true(res.error.code == 0);43assert_true(res.read == 2);44assert_true(cbor_is_int(number));45cbor_decref(&number);46assert_null(number);47}4849static void test_half_int(void **_CBOR_UNUSED(_state)) {50number = cbor_load(data3, 5, &res);51assert_true(cbor_typeof(number) == CBOR_TYPE_NEGINT);52assert_true(cbor_int_get_width(number) == CBOR_INT_16);53assert_false(cbor_isa_uint(number));54assert_true(cbor_isa_negint(number));55assert_true(cbor_get_uint16(number) == 500);56assert_true(res.error.code == 0);57assert_true(res.read == 3);58assert_true(cbor_is_int(number));59cbor_decref(&number);60assert_null(number);61}6263static void test_int(void **_CBOR_UNUSED(_state)) {64number = cbor_load(data4, 6, &res);65assert_true(cbor_typeof(number) == CBOR_TYPE_NEGINT);66assert_true(cbor_int_get_width(number) == CBOR_INT_32);67assert_false(cbor_isa_uint(number));68assert_true(cbor_isa_negint(number));69assert_true(cbor_get_uint32(number) == 2784428723);70assert_true(res.error.code == 0);71assert_true(res.read == 5);72assert_true(cbor_is_int(number));73cbor_decref(&number);74assert_null(number);75}7677static void test_long_int(void **_CBOR_UNUSED(_state)) {78number = cbor_load(data5, 10, &res);79assert_true(cbor_typeof(number) == CBOR_TYPE_NEGINT);80assert_true(cbor_int_get_width(number) == CBOR_INT_64);81assert_false(cbor_isa_uint(number));82assert_true(cbor_isa_negint(number));83assert_true(cbor_get_uint64(number) == 11959030306112471731ULL);84assert_true(res.error.code == 0);85assert_true(res.read == 9);86assert_true(cbor_is_int(number));87cbor_decref(&number);88assert_null(number);89}9091static void test_int_creation(void **_CBOR_UNUSED(_state)) {92WITH_FAILING_MALLOC({ assert_null(cbor_new_int8()); });93WITH_FAILING_MALLOC({ assert_null(cbor_new_int16()); });94WITH_FAILING_MALLOC({ assert_null(cbor_new_int32()); });95WITH_FAILING_MALLOC({ assert_null(cbor_new_int64()); });9697WITH_FAILING_MALLOC({ assert_null(cbor_build_negint8(0xFF)); });98WITH_FAILING_MALLOC({ assert_null(cbor_build_negint16(0xFF)); });99WITH_FAILING_MALLOC({ assert_null(cbor_build_negint32(0xFF)); });100WITH_FAILING_MALLOC({ assert_null(cbor_build_negint64(0xFF)); });101}102103int main(void) {104const struct CMUnitTest tests[] = {105cmocka_unit_test(test_very_short_int),106cmocka_unit_test(test_short_int),107cmocka_unit_test(test_half_int),108cmocka_unit_test(test_int),109cmocka_unit_test(test_long_int),110cmocka_unit_test(test_int_creation),111};112return cmocka_run_group_tests(tests, NULL, NULL);113}114115116