Exemple #1
0
        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);
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
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());
        }
Exemple #4
0
 public void Parse_Null() =>
 Assert.Throws <ArgumentNullException>(() => HexInt32.Parse(null));
Exemple #5
0
 public void Parse_Invalid(string text) =>
 Assert.Throws <FormatException>(() => HexInt32.Parse(text));