Home | History | Annotate | Download | only in tests
      1 /* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  *
      5  * Tests for utility functions
      6  */
      7 
      8 #include <stdint.h>
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 #include <string.h>
     12 
     13 #define _STUB_IMPLEMENTATION_  /* So we can use memset() ourselves */
     14 
     15 #include "test_common.h"
     16 #include "utility.h"
     17 #include "vboot_common.h"
     18 
     19 
     20 /* Test utility.h and sysincludes.h macros */
     21 static void MacrosTest(void) {
     22   int64_t a = -10, b = -20;
     23   uint64_t u = (0xABCD00000000ULL);
     24   uint64_t v = (0xABCD000000ULL);
     25 
     26   TEST_EQ(CombineUint16Pair(1, 2), 0x00010002, "CombineUint16Pair");
     27   TEST_EQ(CombineUint16Pair(0xFFFE, 0xFFFF), 0xFFFEFFFF,
     28           "CombineUint16Pair 2");
     29   TEST_EQ(CombineUint16Pair(-4, -16), 0xFFFCFFF0,
     30           "CombineUint16Pair big negative");
     31   TEST_EQ(CombineUint16Pair(0x10003, 0x10004), 0x00030004,
     32           "CombineUint16Pair overflow");
     33 
     34   TEST_EQ(Min(1, 2), 1, "Min 1");
     35   TEST_EQ(Min(4, 3), 3, "Min 2");
     36   TEST_EQ(Min(5, 5), 5, "Min 5");
     37   TEST_EQ(Min(a, b), b, "Min uint64 1");
     38   TEST_EQ(Min(b, a), b, "Min uint64 2");
     39   TEST_EQ(Min(b, b), b, "Min uint64 same");
     40 
     41   TEST_EQ(u >> 8, v, "uint64_t >> 8");
     42   TEST_EQ(u >> 0, u, "uint64_t >> 0");
     43   TEST_EQ(u >> 36, (uint64_t)0xABC, "uint64_t >> 36");
     44 
     45   TEST_EQ(v * (uint32_t)0, 0, "uint64_t * uint32_t 0");
     46   TEST_EQ(v * (uint32_t)1, v, "uint64_t * uint32_t 1");
     47   TEST_EQ(v * (uint32_t)256, u, "uint64_t * uint32_t 256");
     48 }
     49 
     50 
     51 /* Test SafeMemcmp */
     52 static void SafeMemcmpTest(void) {
     53   /* Zero-length strings are equal */
     54   TEST_EQ(0, SafeMemcmp("APPLE", "TIGER", 0), "SafeMemcmp() size=0");
     55 
     56   /* Test equal arrays */
     57   TEST_EQ(0, SafeMemcmp("clonebob", "clonebob", 8), "SafeMemcmp() equal");
     58   /* Inequality past end of array doesn't affect result */
     59   TEST_EQ(0, SafeMemcmp("clonebob", "clonedan", 5), "SafeMemcmp() equal2");
     60 
     61   TEST_EQ(1, SafeMemcmp("APPLE", "TIGER", 5), "SafeMemcmp() unequal");
     62   TEST_EQ(1, SafeMemcmp("APPLE", "APPLe", 5), "SafeMemcmp() unequal 2");
     63 }
     64 
     65 
     66 int main(int argc, char* argv[]) {
     67   int error_code = 0;
     68 
     69   MacrosTest();
     70   SafeMemcmpTest();
     71 
     72   if (!gTestSuccess)
     73     error_code = 255;
     74 
     75   return error_code;
     76 }
     77