public void ShouldUseBackgroundForMode()
        {
            const string VClampUnits = "V";
            const string IClampUnits = "A";

            Measurement VClampBackground = new Measurement(2, -3, VClampUnits);
            Measurement IClampBackground = new Measurement(-10, -3, IClampUnits);

            var c = new Controller();
            var p = new FakeAxopatch();

            var bg = new Dictionary<AxopatchInterop.OperatingMode, IMeasurement>()
                         {
                             {AxopatchInterop.OperatingMode.VClamp, VClampBackground},
                             {AxopatchInterop.OperatingMode.IClampNormal, IClampBackground},
                         };

            var patch = new AxopatchDevice(p, c, bg);
            patch.BindStream(new DAQOutputStream("stream"));

            var data = new AxopatchInterop.AxopatchData()
            {
                OperatingMode = AxopatchInterop.OperatingMode.VClamp,
                ExternalCommandSensitivity = 2.5,
                ExternalCommandSensitivityUnits = AxopatchInterop.ExternalCommandSensitivityUnits.V_V
            };

            p.Data = data;

            Assert.That(patch.OutputBackground, Is.EqualTo(AxopatchDevice.ConvertOutput(VClampBackground, patch.CurrentDeviceParameters)));

            data = new AxopatchInterop.AxopatchData()
            {
                OperatingMode = AxopatchInterop.OperatingMode.IClampNormal,
                ExternalCommandSensitivity = 1.5,
                ExternalCommandSensitivityUnits = AxopatchInterop.ExternalCommandSensitivityUnits.A_V
            };

            p.Data = data;

            Assert.That(patch.OutputBackground, Is.EqualTo(AxopatchDevice.ConvertOutput(IClampBackground, patch.CurrentDeviceParameters)));
        }
        public void ShouldConvertOutputUnitsInIClamp(
            [Values(
                AxopatchInterop.OperatingMode.I0, 
                AxopatchInterop.OperatingMode.IClampFast, 
                AxopatchInterop.OperatingMode.IClampNormal)] AxopatchInterop.OperatingMode operatingMode)
        {
            var c = new Controller();
            var p = new Axopatch200B();

            var patchDevice = new AxopatchDevice(p, c, null);

            var data = new AxopatchInterop.AxopatchData()
                {
                    OperatingMode = operatingMode,
                    ExternalCommandSensitivity = 2.5,
                    ExternalCommandSensitivityUnits = AxopatchInterop.ExternalCommandSensitivityUnits.A_V
                };

            var cmd = new Measurement(20, -12, "A");

            var expected = operatingMode == AxopatchInterop.OperatingMode.I0 ?
                new Measurement(0, "V") :
                new Measurement(cmd.Quantity / (decimal)data.ExternalCommandSensitivity,
                                           cmd.Exponent, "V");

            var actual = AxopatchDevice.ConvertOutput(cmd, data);

            Assert.That(actual, Is.EqualTo(expected));
        }