public void Parse_Valid(string text, int expectedValue) { var hex = HexInt32.Parse(text); Assert.AreEqual(expectedValue, hex.Value); Assert.AreEqual(hex.Text, text); Assert.AreEqual(hex.ToString(), text); var negative = HexInt32.Parse($"-{text}"); Assert.AreEqual(-expectedValue, negative.Value); }
protected override async Task <int> InvokeAsync(InvocationContext context, IStandardStreamWriter console, RolandMidiClient client) { var address = ModuleAddress.FromDisplayValue(HexInt32.Parse(context.ParseResult.ValueForOption <string>("address")).Value); var size = HexInt32.Parse(context.ParseResult.ValueForOption <string>("size")).Value; var timeout = context.ParseResult.ValueForOption <int>("timeout"); // Wait up to 10 seconds to receive all the requested data... int sizeReceived = 0; var delayTask = Task.Delay(TimeSpan.FromSeconds(timeout)); var completeTaskCts = new TaskCompletionSource <int>(); client.DataSetMessageReceived += DumpMessage; client.SendDataRequestMessage(address.DisplayValue, size); await Task.WhenAny(delayTask, completeTaskCts.Task); return(0); void DumpMessage(object sender, DataSetMessage message) { ModuleAddress address = ModuleAddress.FromDisplayValue(message.Address); console.WriteLine($"Address: {address} Length: {message.Length:x4}"); int index = 0; while (index < message.Length) { var builder = new StringBuilder(); var textBuilder = new StringBuilder(); builder.Append(address); builder.Append(" "); for (int i = 0; i < 16 && index < message.Length; i++) { byte b = message.Data[index]; textBuilder.Append(b >= 32 && b < 127 ? (char)b : ' '); builder.Append(b.ToString("x2")); builder.Append(" "); index++; } string text = builder.ToString().PadRight(9 + 16 * 3) + textBuilder; console.WriteLine(text); address = address.PlusLogicalOffset(16); } console.WriteLine(); if (Interlocked.Add(ref sizeReceived, message.Length) >= size) { completeTaskCts.SetResult(0); } } }
public void Equality() { // Different text doesn't affect equality var hex1 = HexInt32.Parse("0x15_00"); var hex2 = HexInt32.Parse("0x1500"); var hex3 = HexInt32.Parse("0x1501"); Assert.True(hex1.Equals(hex2)); Assert.False(hex1.Equals(hex3)); Assert.False(hex1.Equals(null)); Assert.True(hex1.Equals((object)hex2)); Assert.False(hex1.Equals((object)hex3)); Assert.False(hex1.Equals((object)null)); Assert.AreEqual(hex1.GetHashCode(), hex2.GetHashCode()); Assert.AreNotEqual(hex1.GetHashCode(), hex3.GetHashCode()); }
public void Parse_Null() => Assert.Throws <ArgumentNullException>(() => HexInt32.Parse(null));
public void Parse_Invalid(string text) => Assert.Throws <FormatException>(() => HexInt32.Parse(text));