internal IntegerLiteral(IntegerLiteralString integerLiteralString) { Debug.Assert(integerLiteralString != null); this.originalString = integerLiteralString; this.ProcessOriginalString(); }
public void UnsignedTooBigInteger() { string plainNumber = "18446744073709551617"; string numberSuffix = "u"; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); Assert.ThrowsException <NotSupportedException>( () => new IntegerLiteral(stringRepresentation)); }
public void SignedTooBigInteger() { string plainNumber = "9223372036854775808"; string numberSuffix = string.Empty; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); Assert.ThrowsException <NotSupportedException>( () => new IntegerLiteral(stringRepresentation)); }
public void OctalValues(string plainNumber, string numberSuffix) { string integerString = plainNumber + numberSuffix; var value = new IntegerLiteralString(integerString); Assert.IsTrue(StringComparer.InvariantCulture.Equals(value.PlainNumber, plainNumber)); Assert.AreEqual(numberSuffix, value.NumberSuffix); Assert.AreEqual(NumberRadixFormat.Octal, value.Radix); }
public void Unsigned3BitInteger() { string plainNumber = "4"; string numberSuffix = "u"; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); var value = new IntegerLiteral(stringRepresentation); Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed); Assert.AreEqual(3, value.RequiredBitCount); Assert.AreEqual(4ul, value.ValueAsUlong); }
public void Signed1BitInteger() { string plainNumber = "1"; string numberSuffix = string.Empty; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); var value = new IntegerLiteral(stringRepresentation); Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed); Assert.AreEqual(2, value.RequiredBitCount); Assert.AreEqual(1, value.ValueAsLong); }
public void Unsigned8BitInteger() { byte startingValue = byte.MaxValue; string plainNumber = startingValue.ToString(); string numberSuffix = "u"; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); var value = new IntegerLiteral(stringRepresentation); Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed); Assert.AreEqual(8, value.RequiredBitCount); Assert.AreEqual(startingValue, value.ValueAsUlong); }
public void SignedHigh9BitsInteger() { short startingValue = sbyte.MaxValue + 1; string plainNumber = startingValue.ToString(); string numberSuffix = string.Empty; string integerString = plainNumber + numberSuffix; var stringRepresentation = new IntegerLiteralString(integerString); var value = new IntegerLiteral(stringRepresentation); Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed); Assert.AreEqual(9, value.RequiredBitCount); Assert.AreEqual(startingValue, value.ValueAsLong); }
/// <summary> /// Constructor /// </summary> /// <param name="integerAsString">integer value as a string</param> /// <returns>An IntegerLiteral instance</returns> internal static IntegerLiteral CreateIntegerLiteral(string integerAsString) { var integerString = new IntegerLiteralString(integerAsString); return(new IntegerLiteral(integerString)); }
/// <inheritdoc /> public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null) { Guard.NotNull(reader, nameof(reader)); // this will align to the underlying type when we do a Type.read List <CtfFieldValue> values = new List <CtfFieldValue>(); try { IntegerLiteral integerValue; if (IntegerLiteralString.TryCreate(this.Index, out var integerStringIndex)) { integerValue = new IntegerLiteral(integerStringIndex); } else { Debug.Assert(parent != null); if (parent == null) { return(null); } var indexField = parent.FindField(this.Index); if (!(indexField is CtfIntegerValue indexValue)) { Debug.Assert(false, "is this a valid value?"); return(null); } integerValue = indexValue.Value; } if (integerValue.Signed) { if (integerValue.ValueAsLong < 0) { // we shouldn't hit this, it should be caught before now throw new CtfPlaybackException("Negative array indexing is not supported."); } for (long x = 0; x < integerValue.ValueAsLong; x++) { values.Add(this.Type.Read(reader)); } return(new CtfArrayValue(values.ToArray())); } for (ulong x = 0; x < integerValue.ValueAsUlong; x++) { values.Add(this.Type.Read(reader)); } return(new CtfArrayValue(values.ToArray())); } catch (ArgumentException) { Debug.Assert(false, "What did I miss?"); return(null); } }