1 // 2 // Copyright (c) 2010-2023 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 8 using NUnit.Framework; 9 10 namespace Antmicro.Renode.Utilities 11 { 12 [TestFixture] 13 public class BitHelperTests 14 { 15 [Test] ShouldReverseBitsByByte()16 public void ShouldReverseBitsByByte() 17 { 18 Assert.AreEqual(0x00, BitHelper.ReverseBits((byte)0x00)); 19 Assert.AreEqual(0x00, BitHelper.ReverseBitsByByte(0x00)); 20 Assert.AreEqual(0x4D, BitHelper.ReverseBits((byte)0xB2)); 21 Assert.AreEqual(0x1A2B3C4D, BitHelper.ReverseBitsByByte(0x58D43CB2)); 22 } 23 24 [Test] ShouldReverseBitsByWord()25 public void ShouldReverseBitsByWord() 26 { 27 Assert.AreEqual(0x00, BitHelper.ReverseBits((ushort)0x00)); 28 Assert.AreEqual(0x00, BitHelper.ReverseBitsByWord(0x00)); 29 Assert.AreEqual(0x3C4D, BitHelper.ReverseBits((ushort)0xB23C)); 30 Assert.AreEqual(0x1A2B3C4D, BitHelper.ReverseBitsByWord(0xD458B23C)); 31 } 32 33 [Test] ShouldReverseDoubleWordBits()34 public void ShouldReverseDoubleWordBits() 35 { 36 Assert.AreEqual(0x00, BitHelper.ReverseBits((uint)0x00)); 37 Assert.AreEqual(0x1A2B3C4D, BitHelper.ReverseBits((uint)0xB23CD458)); 38 } 39 40 [Test] ShouldReverseQuadrupleWordBits()41 public void ShouldReverseQuadrupleWordBits() 42 { 43 Assert.AreEqual(0x00, BitHelper.ReverseBits((ulong)0x00)); 44 Assert.AreEqual(0x1A2B3C4D5E6F7A8B, BitHelper.ReverseBits((ulong)0xD15EF67AB23CD458)); 45 } 46 47 [Test] ShouldCalculateDoubleWordMask()48 public void ShouldCalculateDoubleWordMask() 49 { 50 Assert.AreEqual(0x00, BitHelper.CalculateMask(0, 0)); 51 Assert.AreEqual(0xFFFFFFFF, BitHelper.CalculateMask(32, 0)); 52 Assert.AreEqual(0xFFFFFFF8, BitHelper.CalculateMask(29, 3)); 53 Assert.AreEqual(0x7FFFFFFE, BitHelper.CalculateMask(30, 1)); 54 Assert.AreEqual(0x00, BitHelper.CalculateMask(32, 32)); 55 } 56 57 [Test] ShouldCalculateQuadWordMask()58 public void ShouldCalculateQuadWordMask() 59 { 60 Assert.AreEqual(0x00, BitHelper.CalculateQuadWordMask(0, 0)); 61 Assert.AreEqual(0xFFFFFFFFFFFFFFFF, BitHelper.CalculateQuadWordMask(64, 0)); 62 Assert.AreEqual(0xFFFFFFFFFFFFFFF8, BitHelper.CalculateQuadWordMask(61, 3)); 63 Assert.AreEqual(0x7FFFFFFFFFFFFFFE, BitHelper.CalculateQuadWordMask(62, 1)); 64 Assert.AreEqual(0x00, BitHelper.CalculateQuadWordMask(64, 64)); 65 } 66 67 [Test] ShouldGetDoubleWordMaskedValue()68 public void ShouldGetDoubleWordMaskedValue() 69 { 70 Assert.AreEqual(0x00, BitHelper.GetMaskedValue(0, 0, 0)); 71 Assert.AreEqual(0x00, BitHelper.GetMaskedValue(0x1234, 32, 0)); 72 Assert.AreEqual(0x1234, BitHelper.GetMaskedValue(0x1234, 0, 13)); 73 Assert.AreEqual(0xFFFFFFFF, BitHelper.GetMaskedValue(0xFFFFFFFF, 0, 32)); 74 Assert.AreEqual(0x10, BitHelper.GetMaskedValue(0x38, 4, 1)); 75 } 76 77 [Test] ShouldGetQuadWordMaskedValue()78 public void ShouldGetQuadWordMaskedValue() 79 { 80 Assert.AreEqual(0x00, BitHelper.GetMaskedValue(0L, 0, 0)); 81 Assert.AreEqual(0x00, BitHelper.GetMaskedValue(0x1234L, 32, 0)); 82 Assert.AreEqual(0x1234, BitHelper.GetMaskedValue(0x1234L, 0, 13)); 83 Assert.AreEqual(0xFFFFFFFFFFFFFF, BitHelper.GetMaskedValue(0xFFFFFFFFFFFFFFL, 0, 64)); 84 Assert.AreEqual(0x10, BitHelper.GetMaskedValue(0x38L, 4, 1)); 85 } 86 87 [Test] ShouldSetDoubleWordMaskedValue()88 public void ShouldSetDoubleWordMaskedValue() 89 { 90 uint value = 0x00; 91 BitHelper.SetMaskedValue(ref value, 0, 0, 0); 92 Assert.AreEqual(0x00, value); 93 BitHelper.SetMaskedValue(ref value, 0x1234, 32, 0); 94 Assert.AreEqual(0x00, value); 95 BitHelper.SetMaskedValue(ref value, 0x1234, 0, 13); 96 Assert.AreEqual(0x1234, value); 97 BitHelper.SetMaskedValue(ref value, 0xFFFFFFFF, 0, 32); 98 Assert.AreEqual(0xFFFFFFFF, value); 99 BitHelper.SetMaskedValue(ref value, 0x28, 4, 1); 100 Assert.AreEqual(0xFFFFFFEF, value); 101 } 102 103 [Test] ShouldSetQuadWordMaskedValue()104 public void ShouldSetQuadWordMaskedValue() 105 { 106 ulong value = 0x00; 107 BitHelper.SetMaskedValue(ref value, 0, 0, 0); 108 Assert.AreEqual(0x00, value); 109 BitHelper.SetMaskedValue(ref value, 0x1234, 32, 0); 110 Assert.AreEqual(0x00, value); 111 BitHelper.SetMaskedValue(ref value, 0x1234, 0, 13); 112 Assert.AreEqual(0x1234, value); 113 BitHelper.SetMaskedValue(ref value, 0xFFFFFFFFFFFFFFF, 0, 64); 114 Assert.AreEqual(0xFFFFFFFFFFFFFFF, value); 115 BitHelper.SetMaskedValue(ref value, 0x28, 4, 1); 116 Assert.AreEqual(0xFFFFFFFFFFFFFEF, value); 117 } 118 } 119 } 120