public void ConnectionCreateTest()
        {
            var cnnParams = new MidiThruConnectionParams {
                Controls = new MidiControlTransform[] {
                    new MidiControlTransform(),
                    new MidiControlTransform(),
                    new MidiControlTransform()
                },
                Maps = new MidiValueMap[] {
                    new MidiValueMap(),
                    new MidiValueMap()
                },
                KeyPressure          = new MidiTransform(MidiTransformType.Scale, 2),
                FilterOutAllControls = true,
                FilterOutBeatClock   = true,
                FilterOutMtc         = true,
                FilterOutSysEx       = true,
                FilterOutTuneRequest = true,
                LowNote  = 1,
                HighNote = 8
            };

            MidiError err;

            using (var connection = MidiThruConnection.Create("com.xamarin.midi", cnnParams, out err)) {
                Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                Assert.IsNotNull(connection, "midi connection should not be null");
            }
        }
        public void FindTest()
        {
            var cnnParams1 = new MidiThruConnectionParams {
                FilterOutAllControls = true,
                FilterOutSysEx       = true,
                FilterOutTuneRequest = true,
                LowNote  = 1,
                HighNote = 8
            };

            var cnnParams2 = new MidiThruConnectionParams {
                FilterOutAllControls = true,
                FilterOutSysEx       = false,
                FilterOutTuneRequest = false,
                LowNote  = 1,
                HighNote = 4
            };

            var ownerId = $"com.xamarin.midi.{DateTime.UtcNow.Ticks}";

            using (var connection1 = MidiThruConnection.Create(ownerId, cnnParams1))
                using (var connection2 = MidiThruConnection.Create(ownerId, cnnParams2)) {
                    var connections = MidiThruConnection.Find(ownerId, out var err);
                    Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                    Assert.NotNull(connections, "connections should not be null");
                    Assert.That(connections.Length, Is.EqualTo(2), "2 midi connections expected");
                }
        }
        public void FindTest()
        {
            var cnnParams1 = new MidiThruConnectionParams {
                FilterOutAllControls = true,
                FilterOutSysEx       = true,
                FilterOutTuneRequest = true,
                LowNote  = 1,
                HighNote = 8
            };

            var cnnParams2 = new MidiThruConnectionParams {
                FilterOutAllControls = true,
                FilterOutSysEx       = false,
                FilterOutTuneRequest = false,
                LowNote  = 1,
                HighNote = 4
            };

            using (var connection1 = MidiThruConnection.Create("com.xamarin.midi", cnnParams1))
                using (var connection2 = MidiThruConnection.Create("com.xamarin.midi", cnnParams2)) {
                    MidiError err;
                    var       connections = MidiThruConnection.Find("com.xamarin.midi", out err);
                    Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                    Assert.NotNull(connections, "connections should not be null");
                    Assert.IsTrue(connections.Length == 2, "2 midi connections");
                }
        }
        public void GetSetParamsTest()
        {
            var cnnParams = new MidiThruConnectionParams {
                Controls = new MidiControlTransform[] {
                    new MidiControlTransform(),
                    new MidiControlTransform(),
                    new MidiControlTransform()
                },
                Maps = new MidiValueMap[] {
                    new MidiValueMap(),
                    new MidiValueMap()
                },
                KeyPressure          = new MidiTransform(MidiTransformType.Scale, 2),
                FilterOutAllControls = true,
                FilterOutBeatClock   = true,
                FilterOutMtc         = true,
                FilterOutSysEx       = true,
                FilterOutTuneRequest = true,
                LowNote  = 1,
                HighNote = 8
            };

            MidiError err;

            using (var connection = MidiThruConnection.Create("com.xamarin.midi", cnnParams, out err)) {
                Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                Assert.IsNotNull(connection, "midi connection should not be null");

                var gotParams = connection.GetParams(out err);
                Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                // Test dynamic part of the struct
                Assert.IsTrue(gotParams.Controls.Length == cnnParams.Controls.Length, "midi params objects should be the same amount");
                Assert.IsTrue(gotParams.Maps.Length == cnnParams.Maps.Length, "midi params objects should be the same amount");

                var newParams = new MidiThruConnectionParams {
                    FilterOutAllControls = false,
                    FilterOutBeatClock   = true,
                    FilterOutMtc         = true,
                    FilterOutSysEx       = true,
                    FilterOutTuneRequest = true,
                    HighNote             = 5
                };

                err = connection.SetParams(newParams);
                Assert.IsTrue(err == MidiError.Ok, "midi connection error");

                gotParams = connection.GetParams(out err);
                Assert.IsTrue(err == MidiError.Ok, "midi connection error");
                Assert.IsTrue(gotParams.FilterOutBeatClock, "FilterOutBeatClock should be true");
                Assert.IsFalse(gotParams.FilterOutAllControls, "FilterOutAllControls should be false");
                Assert.IsTrue(gotParams.HighNote == 5, "HighNote should be 5");
            }
        }