Blame test/sanitytest.c

Packit c4476c
/*
Packit c4476c
 * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
 *
Packit c4476c
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
 * this file except in compliance with the License.  You can obtain a copy
Packit c4476c
 * in the file LICENSE in the source distribution or at
Packit c4476c
 * https://www.openssl.org/source/license.html
Packit c4476c
 */
Packit c4476c
Packit c4476c
#include <string.h>
Packit c4476c
#include "testutil.h"
Packit c4476c
#include "internal/numbers.h"
Packit c4476c
Packit c4476c
static int test_sanity_null_zero(void)
Packit c4476c
{
Packit c4476c
    char *p;
Packit c4476c
    char bytes[sizeof(p)];
Packit c4476c
Packit c4476c
    /* Is NULL equivalent to all-bytes-zero? */
Packit c4476c
    p = NULL;
Packit c4476c
    memset(bytes, 0, sizeof(bytes));
Packit c4476c
    return TEST_mem_eq(&p, sizeof(p), bytes, sizeof(bytes));
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_enum_size(void)
Packit c4476c
{
Packit c4476c
    enum smallchoices { sa, sb, sc };
Packit c4476c
    enum medchoices { ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml };
Packit c4476c
    enum largechoices {
Packit c4476c
        a01, b01, c01, d01, e01, f01, g01, h01, i01, j01,
Packit c4476c
        a02, b02, c02, d02, e02, f02, g02, h02, i02, j02,
Packit c4476c
        a03, b03, c03, d03, e03, f03, g03, h03, i03, j03,
Packit c4476c
        a04, b04, c04, d04, e04, f04, g04, h04, i04, j04,
Packit c4476c
        a05, b05, c05, d05, e05, f05, g05, h05, i05, j05,
Packit c4476c
        a06, b06, c06, d06, e06, f06, g06, h06, i06, j06,
Packit c4476c
        a07, b07, c07, d07, e07, f07, g07, h07, i07, j07,
Packit c4476c
        a08, b08, c08, d08, e08, f08, g08, h08, i08, j08,
Packit c4476c
        a09, b09, c09, d09, e09, f09, g09, h09, i09, j09,
Packit c4476c
        a10, b10, c10, d10, e10, f10, g10, h10, i10, j10,
Packit c4476c
        xxx };
Packit c4476c
Packit c4476c
    /* Enum size */
Packit c4476c
    if (!TEST_size_t_eq(sizeof(enum smallchoices), sizeof(int))
Packit c4476c
        || !TEST_size_t_eq(sizeof(enum medchoices), sizeof(int))
Packit c4476c
        || !TEST_size_t_eq(sizeof(enum largechoices), sizeof(int)))
Packit c4476c
        return 0;
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_twos_complement(void)
Packit c4476c
{
Packit c4476c
    /* Basic two's complement checks. */
Packit c4476c
    if (!TEST_int_eq(~(-1), 0)
Packit c4476c
        || !TEST_long_eq(~(-1L), 0L))
Packit c4476c
        return 0;
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_sign(void)
Packit c4476c
{
Packit c4476c
    /* Check that values with sign bit 1 and value bits 0 are valid */
Packit c4476c
    if (!TEST_int_eq(-(INT_MIN + 1), INT_MAX)
Packit c4476c
        || !TEST_long_eq(-(LONG_MIN + 1), LONG_MAX))
Packit c4476c
        return 0;
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_unsigned_conversion(void)
Packit c4476c
{
Packit c4476c
    /* Check that unsigned-to-signed conversions preserve bit patterns */
Packit c4476c
    if (!TEST_int_eq((int)((unsigned int)INT_MAX + 1), INT_MIN)
Packit c4476c
        || !TEST_long_eq((long)((unsigned long)LONG_MAX + 1), LONG_MIN))
Packit c4476c
        return 0;
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_range(void)
Packit c4476c
{
Packit c4476c
    /* This isn't possible to check using the framework functions */
Packit c4476c
    if (SIZE_MAX < INT_MAX) {
Packit c4476c
        TEST_error("int must not be wider than size_t");
Packit c4476c
        return 0;
Packit c4476c
    }
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
static int test_sanity_memcmp(void)
Packit c4476c
{
Packit c4476c
    return CRYPTO_memcmp("ab","cd",2);
Packit c4476c
}
Packit c4476c
Packit c4476c
int setup_tests(void)
Packit c4476c
{
Packit c4476c
    ADD_TEST(test_sanity_null_zero);
Packit c4476c
    ADD_TEST(test_sanity_enum_size);
Packit c4476c
    ADD_TEST(test_sanity_twos_complement);
Packit c4476c
    ADD_TEST(test_sanity_sign);
Packit c4476c
    ADD_TEST(test_sanity_unsigned_conversion);
Packit c4476c
    ADD_TEST(test_sanity_range);
Packit c4476c
    ADD_TEST(test_sanity_memcmp);
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c