1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 4 */ 5 6 #include "precompiled.hpp" 7 #include "gc/z/zBitField.hpp" 8 #include "unittest.hpp" 9 10 TEST(ZBitFieldTest, test) { 11 typedef ZBitField<uint64_t, bool, 0, 1> field_bool; 12 typedef ZBitField<uint64_t, uint8_t, 1, 8> field_uint8; 13 typedef ZBitField<uint64_t, uint16_t, 2, 16> field_uint16; 14 typedef ZBitField<uint64_t, uint32_t, 32, 32> field_uint32; 15 typedef ZBitField<uint64_t, uint64_t, 0, 63> field_uint64; 16 typedef ZBitField<uint64_t, void*, 1, 61, 3> field_pointer; 17 18 uint64_t entry; 19 20 { 21 const bool value = false; 22 entry = field_bool::encode(value); 23 EXPECT_EQ(field_bool::decode(entry), value) << "Should be equal"; 24 } 25 26 { 27 const bool value = true; 28 entry = field_bool::encode(value); 29 EXPECT_EQ(field_bool::decode(entry), value) << "Should be equal"; 30 } 31 32 { 33 const uint8_t value = ~(uint8_t)0; 34 entry = field_uint8::encode(value); 35 EXPECT_EQ(field_uint8::decode(entry), value) << "Should be equal"; 36 } 37 38 { 39 const uint16_t value = ~(uint16_t)0; 40 entry = field_uint16::encode(value); 41 EXPECT_EQ(field_uint16::decode(entry), value) << "Should be equal"; 42 } 43 44 { 45 const uint32_t value = ~(uint32_t)0; 46 entry = field_uint32::encode(value); 47 EXPECT_EQ(field_uint32::decode(entry), value) << "Should be equal"; 48 } 49 50 { 51 const uint64_t value = ~(uint64_t)0 >> 1; 52 entry = field_uint64::encode(value); 53 EXPECT_EQ(field_uint64::decode(entry), value) << "Should be equal"; 54 } 55 56 { 57 void* const value = (void*)(~(uintptr_t)0 << 3); 58 entry = field_pointer::encode(value); 59 EXPECT_EQ(field_pointer::decode(entry), value) << "Should be equal"; 60 } 61 }