1 // Copyright (c) Microsoft Corporation. All rights reserved. 2 // Licensed under the MIT license. 3 4 #include "kuku/common.h" 5 #include "gtest/gtest.h" 6 #include <cmath> 7 #include <cstdint> 8 9 using namespace kuku; 10 using namespace std; 11 12 namespace kuku_tests 13 { TEST(CommonTests,SetItem)14 TEST(CommonTests, SetItem) 15 { 16 item_type bl; 17 18 set_item(0, 0, bl); 19 ASSERT_EQ(0, get_low_word(bl)); 20 ASSERT_EQ(0, get_high_word(bl)); 21 22 set_item(1, 0, bl); 23 ASSERT_EQ(1, get_low_word(bl)); 24 ASSERT_EQ(0, get_high_word(bl)); 25 26 set_item(0, 1, bl); 27 ASSERT_EQ(0, get_low_word(bl)); 28 ASSERT_EQ(1, get_high_word(bl)); 29 30 set_item(0xF00F, 0xBABA, bl); 31 ASSERT_EQ(0xF00F, get_low_word(bl)); 32 ASSERT_EQ(0xBABA, get_high_word(bl)); 33 34 set_item(0xF00FF00FF00FF00F, 0xBABABABABABABABA, bl); 35 ASSERT_EQ(0xF00FF00FF00FF00F, get_low_word(bl)); 36 ASSERT_EQ(0xBABABABABABABABA, get_high_word(bl)); 37 38 unsigned char data[bytes_per_item]{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 39 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; 40 set_item(data, bl); 41 ASSERT_EQ(0x0706050403020100, get_low_word(bl)); 42 ASSERT_EQ(0x0706050403020100, get_high_word(bl)); 43 } 44 TEST(CommonTests,SetZeroItem)45 TEST(CommonTests, SetZeroItem) 46 { 47 item_type bl; 48 49 set_item(0, 0, bl); 50 set_zero_item(bl); 51 ASSERT_EQ(0, get_low_word(bl)); 52 ASSERT_EQ(0, get_high_word(bl)); 53 54 set_item(0xF00FF00FF00FF00F, 0xBABABABABABABABA, bl); 55 set_zero_item(bl); 56 ASSERT_EQ(0, get_low_word(bl)); 57 ASSERT_EQ(0, get_high_word(bl)); 58 } 59 TEST(CommonTests,SetAllOnesItem)60 TEST(CommonTests, SetAllOnesItem) 61 { 62 item_type bl; 63 64 set_zero_item(bl); 65 set_all_ones_item(bl); 66 ASSERT_EQ(0xFFFFFFFFFFFFFFFFULL, get_low_word(bl)); 67 ASSERT_EQ(0xFFFFFFFFFFFFFFFFULL, get_high_word(bl)); 68 69 set_item(0xF00FF00FF00FF00F, 0xBABABABABABABABA, bl); 70 set_all_ones_item(bl); 71 ASSERT_EQ(0xFFFFFFFFFFFFFFFFULL, get_low_word(bl)); 72 ASSERT_EQ(0xFFFFFFFFFFFFFFFFULL, get_high_word(bl)); 73 } 74 TEST(CommonTests,IsZeroItem)75 TEST(CommonTests, IsZeroItem) 76 { 77 item_type bl; 78 79 set_item(0, 0, bl); 80 ASSERT_TRUE(is_zero_item(bl)); 81 82 set_item(1, 0, bl); 83 ASSERT_FALSE(is_zero_item(bl)); 84 85 set_item(0, 1, bl); 86 ASSERT_FALSE(is_zero_item(bl)); 87 88 set_item(0xF00FF00FF00FF00F, 0xBABABABABABABABA, bl); 89 ASSERT_FALSE(is_zero_item(bl)); 90 } 91 TEST(CommonTests,IsAllOnesItem)92 TEST(CommonTests, IsAllOnesItem) 93 { 94 item_type bl; 95 96 set_all_ones_item(bl); 97 ASSERT_TRUE(is_all_ones_item(bl)); 98 99 set_item(0xFFFFFFFFFFFFFFFFULL, 0, bl); 100 ASSERT_FALSE(is_all_ones_item(bl)); 101 102 set_item(0, 0xFFFFFFFFFFFFFFFFULL, bl); 103 ASSERT_FALSE(is_all_ones_item(bl)); 104 105 set_item(0xFFFFFFFFFFFFFFFEULL, 0xFFFFFFFFFFFFFFFFULL, bl); 106 ASSERT_FALSE(is_all_ones_item(bl)); 107 } 108 TEST(CommonTests,SetRandomItem)109 TEST(CommonTests, SetRandomItem) 110 { 111 item_type bl; 112 113 set_random_item(bl); 114 ASSERT_FALSE(is_zero_item(bl)); 115 item_type bl2 = bl; 116 ASSERT_TRUE(are_equal_item(bl, bl2)); 117 set_random_item(bl); 118 ASSERT_FALSE(is_zero_item(bl)); 119 ASSERT_FALSE(are_equal_item(bl, bl2)); 120 } 121 TEST(CommonTests,ZeroItem)122 TEST(CommonTests, ZeroItem) 123 { 124 item_type bl = make_random_item(); 125 ASSERT_FALSE(is_zero_item(bl)); 126 bl = make_zero_item(); 127 ASSERT_TRUE(is_zero_item(bl)); 128 } 129 TEST(CommonTests,IncrementItem)130 TEST(CommonTests, IncrementItem) 131 { 132 item_type bl = make_item(0, 0); 133 134 increment_item(bl); 135 ASSERT_EQ(1, get_low_word(bl)); 136 ASSERT_EQ(0, get_high_word(bl)); 137 138 bl = make_item(0xF00F, 0xBAAB); 139 increment_item(bl); 140 ASSERT_EQ(0xF010, get_low_word(bl)); 141 ASSERT_EQ(0xBAAB, get_high_word(bl)); 142 143 bl = make_item(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFE); 144 increment_item(bl); 145 ASSERT_EQ(0x0, get_low_word(bl)); 146 ASSERT_EQ(0xFFFFFFFFFFFFFFFF, get_high_word(bl)); 147 148 bl = make_item(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF); 149 increment_item(bl); 150 ASSERT_EQ(0x0, get_low_word(bl)); 151 ASSERT_EQ(0x0, get_high_word(bl)); 152 } 153 } // namespace kuku_tests 154