public void BitsRequiredByLargestExpressablePositiveIntegerIsCorrect() { Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_warlpiriEnvironment), 2); Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_2), 9); Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_3), 9); Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_4), 9); Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_3_2), 129); }
public void LargestExpressablePositiveIntegerIsCorrect() { Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_4_8), _environment_4_8.EmptyBitMask); Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_3_2), _environment_3_2.EmptyBitMask); Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_warlpiriEnvironment), new BitMask(2, _warlpiriEnvironment.Size)); Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_2), new BitMask(480, _environment_2_2.Size)); Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_3), new BitMask(510, _environment_2_3.Size)); Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_4), new BitMask(511, _environment_2_4.Size)); }
} // "minrealu" #endregion public UnumEnvironment(byte exponentSizeSize, byte fractionSizeSize) { // Initializing structure. ExponentSizeSize = exponentSizeSize; FractionSizeSize = fractionSizeSize; ExponentSizeMax = (byte)UnumHelper.SegmentSizeSizeToSegmentSize(ExponentSizeSize); FractionSizeMax = UnumHelper.SegmentSizeSizeToSegmentSize(FractionSizeSize); UnumTagSize = (byte)(1 + ExponentSizeSize + FractionSizeSize); Size = (ushort)(1 + ExponentSizeMax + FractionSizeMax + UnumTagSize); // Initializing masks. EmptyBitMask = new BitMask(Size); UncertaintyBitMask = new BitMask(Size).SetOne((ushort)(UnumTagSize - 1)); FractionSizeMask = new BitMask(Size).SetOne(FractionSizeSize) - 1; ExponentSizeMask = UncertaintyBitMask - 1 - FractionSizeMask; ExponentAndFractionSizeMask = ExponentSizeMask | FractionSizeMask; UnumTagMask = UncertaintyBitMask + ExponentAndFractionSizeMask; SignBitMask = new BitMask(Size).SetOne((ushort)(Size - 1)); // Initializing environment. ULP = new BitMask(Size).SetOne(UnumTagSize); PositiveInfinity = new BitMask(Size).SetOne((ushort)(Size - 1)) - 1 - UncertaintyBitMask; NegativeInfinity = new BitMask(Size).SetOne((ushort)(Size - 1)) + PositiveInfinity; LargestPositive = PositiveInfinity - ULP; SmallestPositive = ExponentAndFractionSizeMask + ULP; LargestNegative = NegativeInfinity - ULP; MinRealU = LargestPositive + ((uint)1 << Size - 1); QuietNotANumber = PositiveInfinity + UncertaintyBitMask; SignalingNotANumber = NegativeInfinity + UncertaintyBitMask; }
public static UnumEnvironment FromConfigurationValues(byte eSize, ushort fSize) => new UnumEnvironment(UnumHelper.SegmentSizeToSegmentSizeSize(eSize), UnumHelper.SegmentSizeToSegmentSizeSize(fSize));