summary refs log tree commit diff
path: root/bit_field/tests
diff options
context:
space:
mode:
authorJingkui Wang <jkwang@google.com>2019-03-18 15:51:13 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-03-28 19:04:03 -0700
commit85fa41f7b2b74fafa15660de09b6d20e4341be8b (patch)
tree4b457ee4a4492990463ecfb585be89f9c6c22a94 /bit_field/tests
parentca224cd547568623dc2479c8cfaca43b091c7650 (diff)
downloadcrosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar.gz
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar.bz2
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar.lz
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar.xz
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.tar.zst
crosvm-85fa41f7b2b74fafa15660de09b6d20e4341be8b.zip
implement bitfield for enum with a width
If we know the width of an enum type, we don't need 'power of 2' number
of variants.

BUG=None
TEST=cargo test

Change-Id: I8148b28f86bb8e4fd4f67d8a6382fc713dad1439
Reviewed-on: https://chromium-review.googlesource.com/1530455
Commit-Ready: Jingkui Wang <jkwang@google.com>
Tested-by: Jingkui Wang <jkwang@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: David Tolnay <dtolnay@chromium.org>
Diffstat (limited to 'bit_field/tests')
-rw-r--r--bit_field/tests/test_enum.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/bit_field/tests/test_enum.rs b/bit_field/tests/test_enum.rs
index d926d9c..8746b06 100644
--- a/bit_field/tests/test_enum.rs
+++ b/bit_field/tests/test_enum.rs
@@ -12,10 +12,21 @@ enum TwoBits {
 }
 
 #[bitfield]
+#[bits = 3]
+#[derive(Debug, PartialEq)]
+enum ThreeBits {
+    Zero = 0b00,
+    One = 0b01,
+    Two = 0b10,
+    Three = 0b111,
+}
+
+#[bitfield]
 struct Struct {
     prefix: BitField1,
     two_bits: TwoBits,
-    suffix: BitField5,
+    three_bits: ThreeBits,
+    suffix: BitField2,
 }
 
 #[test]
@@ -30,5 +41,10 @@ fn test_enum() {
 
     s.set(0, 8, 0b_1010_1010);
     //                   ^^ TwoBits
+    //               ^^_^ Three Bits.
     assert_eq!(s.get_two_bits(), TwoBits::One);
+    assert_eq!(s.get_three_bits().unwrap_err().raw_val(), 0b101);
+
+    s.set_three_bits(ThreeBits::Two);
+    assert_eq!(s.get(0, 8), 0b_1001_0010);
 }