public void Convert_UpperInclusive_ValueEqualsUpper_TrueValue()
        {
            var valueAndLimit = new object[][]
            {
                new object[] { "", "" },
                new object[] { "a", "a" },
                new object[] { -1, -1 },
                new object[] { 0, 0 },
                new object[] { 1, 1 },
                new object[] { 0U, 0U },
                new object[] { 1U, 1U },
                new object[] { -1.0, -1.0 },
                new object[] { 0.0, 0.0 },
                new object[] { 1.0, 1.0 },
                new object[] { -1.0M, -1.0M },
                new object[] { 0.0M, 0.0M },
                new object[] { 1.0M, 1.0M },
                new object[] { new DateTime(), new DateTime() },
                new object[] { DateTime.Parse("2000-01-01"), DateTime.Parse("2000-01-01 00:00:00.000") },
                new object[] { new TimeSpan(), new TimeSpan(0, 0, 0, 0, 0) },
                new object[] { TimeSpan.Parse("00:00:01"), TimeSpan.Parse("00:00:01.000") },
                new object[] { System.IO.SeekOrigin.Begin, System.IO.SeekOrigin.Begin },
                new object[] { new Version(1, 0, 15, 0), new Version(1, 0, 15, 0) },
                new object[] { new Version(1, 0, 0, 0), new Version(1, 0, 0, 0) }
            };


            var sut = new InRangeMultiConverter
            {
                TrueValue      = true,
                FalseValue     = false,
                UpperInclusive = true
            };

            foreach (var values in valueAndLimit)
            {
                var actual = sut.Convert(values, typeof(object), null, CultureInfo.CurrentCulture);
                Assert.AreEqual(sut.TrueValue, actual);
            }
        }
        public void Convert_LowerExclusive_ValueIsGreatherThanLower_TrueValue()
        {
            var valueAndLimit = new object[][]
            {
                new object[] { "1", "" },
                new object[] { "b", "a" },
                new object[] { 0, -1 },
                new object[] { 1, 0 },
                new object[] { 2, 1 },
                new object[] { 1U, 0U },
                new object[] { 2U, 1U },
                new object[] { -0.99, -1.0 },
                new object[] { 0.01, 0.0 },
                new object[] { 1.01, 1.0 },
                new object[] { -0.99M, -1.0M },
                new object[] { 0.01M, 0.0M },
                new object[] { 1.01M, 1.0M },
                new object[] { new DateTime().AddMilliseconds(1), new DateTime() },
                new object[] { DateTime.Parse("2000-01-01 00:00:00.001"), DateTime.Parse("2000-01-01") },
                new object[] { new TimeSpan(0, 0, 0, 0, 1), new TimeSpan() },
                new object[] { TimeSpan.Parse("00:00:01.001"), TimeSpan.Parse("00:00:01") },
                new object[] { System.IO.SeekOrigin.Current, System.IO.SeekOrigin.Begin },
                new object[] { new Version(1, 0, 15, 0), new Version(0, 0, 800, 130) },
                new object[] { new Version(1, 1, 0, 0), new Version(1, 0, 0, 0) }
            };


            var sut = new InRangeMultiConverter
            {
                TrueValue      = true,
                FalseValue     = false,
                LowerInclusive = false
            };

            foreach (var values in valueAndLimit)
            {
                var actual = sut.Convert(values, typeof(object), null, CultureInfo.CurrentCulture);
                Assert.AreEqual(sut.TrueValue, actual);
            }
        }
        public void ConvertNull_NullableSupported_AndCustomNullValue_NullValue()
        {
            var valueAndLimit = new object[][]
            {
                new object[] { null, "1", "2" },
                new object[] { null, "a", "c" },
                new object[] { null, 0, 1 },
                new object[] { null, 1, 2 },
                new object[] { null, 2, 3 },
                new object[] { null, 1U, 2U },
                new object[] { null, 2U, 3U },
                new object[] { null, -0.99, -0.1 },
                new object[] { null, 0.01, 0.1 },
                new object[] { null, 1.01, 1.02 },
                new object[] { null, -0.99M, -0.1M },
                new object[] { null, 0.01M, 0.1M },
                new object[] { null, 1.01M, 1.1M },
                new object[] { null, new DateTime().AddMilliseconds(1), new DateTime().AddMilliseconds(2) },
                new object[] { null, DateTime.Parse("2000-01-01 00:00:00.001"), DateTime.Parse("2000-01-01 00:00:00.002") },
                new object[] { null, new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(0, 0, 0, 0, 2) },
                new object[] { null, TimeSpan.Parse("00:00:01.001"), TimeSpan.Parse("00:00:01.002") },
                new object[] { null, System.IO.SeekOrigin.Current, System.IO.SeekOrigin.End },
                new object[] { null, new Version(1, 0, 15, 0), new Version(2, 0, 0, 0) },
                new object[] { null, new Version(1, 1, 0, 0), new Version(1, 1, 0, 1) }
            };

            object expected = System.IO.SeekOrigin.Current;
            var    sut      = new InRangeMultiConverter
            {
                FalseValue = "False",
                TrueValue  = "True",
                NullValue  = expected
            };

            foreach (var values in valueAndLimit)
            {
                var actual = sut.Convert(values, typeof(object), null, CultureInfo.CurrentCulture);
                Assert.AreEqual(expected, actual);
            }
        }
        public void ConvertInRange_IsNegative_FalseValue()
        {
            var valueAndLimit = new object[][]
            {
                new object[] { "1", "", "2" },
                new object[] { "b", "a", "c" },
                new object[] { 0, -1, 1 },
                new object[] { 1, 0, 2 },
                new object[] { 2, 1, 3 },
                new object[] { 1U, 0U, 2U },
                new object[] { 2U, 1U, 3U },
                new object[] { -0.99, -1.0, -0.1 },
                new object[] { 0.01, 0.0, 0.1 },
                new object[] { 1.01, 1.0, 1.02 },
                new object[] { -0.99M, -1.0M, -0.1M },
                new object[] { 0.01M, 0.0M, 0.1M },
                new object[] { 1.01M, 1.0M, 1.1M },
                new object[] { new DateTime().AddMilliseconds(1), new DateTime(), new DateTime().AddMilliseconds(2) },
                new object[] { DateTime.Parse("2000-01-01 00:00:00.001"), DateTime.Parse("2000-01-01"), DateTime.Parse("2000-01-01 00:00:00.002") },
                new object[] { new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(), new TimeSpan(0, 0, 0, 0, 2) },
                new object[] { TimeSpan.Parse("00:00:01.001"), TimeSpan.Parse("00:00:01"), TimeSpan.Parse("00:00:01.002") },
                new object[] { System.IO.SeekOrigin.Current, System.IO.SeekOrigin.Begin, System.IO.SeekOrigin.End },
                new object[] { new Version(1, 0, 15, 0), new Version(0, 0, 800, 130), new Version(2, 0, 0, 0) },
                new object[] { new Version(1, 1, 0, 0), new Version(1, 0, 0, 0), new Version(1, 1, 0, 1) }
            };

            var expected = new ArgumentOutOfRangeException();
            var sut      = new InRangeMultiConverter
            {
                IsNegative = true,
                FalseValue = expected,
            };

            foreach (var values in valueAndLimit)
            {
                var actual = sut.Convert(values, typeof(object), null, CultureInfo.CurrentCulture);
                Assert.AreEqual(expected, actual);
            }
        }
        public void Convert_UpperExlusive_ValueIsLessThanUpper_TrueValue()
        {
            var valueAndLimit = new object[][]
            {
                new object[] { "", "1" },
                new object[] { "a", "b" },
                new object[] { -1, 0 },
                new object[] { 0, 1 },
                new object[] { 1, 2 },
                new object[] { 0U, 1U },
                new object[] { 1U, 2U },
                new object[] { -1.0, -0.99 },
                new object[] { 0.0, 0.01 },
                new object[] { 1.0, 1.01 },
                new object[] { -1.0M, -0.99M },
                new object[] { 0.0M, 0.01M },
                new object[] { 1.0M, 1.01M },
                new object[] { new DateTime(), new DateTime().AddMilliseconds(1) },
                new object[] { DateTime.Parse("2000-01-01"), DateTime.Parse("2000-01-01 00:00:00.001") },
                new object[] { new TimeSpan(), new TimeSpan(0, 0, 0, 0, 1) },
                new object[] { TimeSpan.Parse("00:00:01"), TimeSpan.Parse("00:00:01.001") },
                new object[] { System.IO.SeekOrigin.Begin, System.IO.SeekOrigin.Current },
                new object[] { new Version(0, 0, 800, 130), new Version(1, 0, 15, 0) },
                new object[] { new Version(1, 0, 0, 0), new Version(1, 1, 0, 0) }
            };

            var sut = new InRangeMultiConverter
            {
                TrueValue      = true,
                FalseValue     = false,
                UpperInclusive = false
            };

            foreach (var values in valueAndLimit)
            {
                var actual = sut.Convert(values, typeof(object), null, CultureInfo.CurrentCulture);
                Assert.AreEqual(sut.TrueValue, actual);
            }
        }