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 }