public void LocalValuesAreSubstituted()
        {
            //Arrange
            var values = new DateTime?[]
            {
                DateTime.Parse("2020-05-12 11:10"),
                DateTime.Parse("2020-05-12 11:11"),
                DateTime.Parse("2020-05-12 11:12"),
                DateTime.Parse("2020-07-12 10:38"),
                DateTime.Parse("2020-07-12 10:38"),
                DateTime.Parse("2020-07-12 10:39"),
                DateTime.Parse("2020-07-12 10:39"),
                DateTime.Parse("2020-07-12 10:38:01"),
                DateTime.Parse("2020-07-12 10:38:02"),
                DateTime.Parse("2020-07-12 10:39:03"),
                DateTime.Parse("2020-07-12 10:39:04"),
                null
            };


            var ranges = new List <NamedTimeRange>
            {
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:37"), DateTime.Parse("2020-07-12 10:38"), "First"),
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:38:00.001"), DateTime.Parse("2020-07-12 10:39"), "Second"),
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:39:00.001"), DateTime.Parse("2020-07-12 10:55"), "Third"),
            };
            var sub = new DateTimeValueTracker(new SnapshotColumnInfo("TestCol")
            {
                DateType = DateTimeKind.Local
            }, ranges);

            //Act
            var result = values
                         .Select(v => new { UTC = (object)v, Value = (object)v?.ToLocalTime() })
                         .Select(v => new
            {
                UTC        = v.UTC ?? "<NULL>",
                Value      = v.Value == null ? "<NULL>" : "(localised date/time)",
                Substitute = sub.GetSubstitute(v.Value) ?? "<NULL>"
            });

            //Assert
            var output = new Output();

            output.WrapLine("Ranges:");
            output.WriteLine();
            output.FormatTable(ranges);

            output.WriteLine();
            output.WrapLine("Substitutions:");
            output.WriteLine();
            output.FormatTable(result);

            output.Report.Verify();
        }
        public void ValuesAreSubstituted()
        {
            //Arrange
            var values = new object[]
            {
                DateTime.Parse("2020-05-12 11:10"),
                DateTime.Parse("2020-05-12 11:11"),
                DateTime.Parse("2020-05-12 11:12"),
                DateTime.Parse("2020-07-12 10:38"),
                DateTime.Parse("2020-07-12 10:38"),
                DateTime.Parse("2020-07-12 10:39"),
                DateTime.Parse("2020-07-12 10:39"),
                DateTime.Parse("2020-07-12 10:38:01"),
                DateTime.Parse("2020-07-12 10:38:02"),
                DateTime.Parse("2020-07-12 10:39:03"),
                DateTime.Parse("2020-07-12 10:39:04"),
                null,
                55
            };


            var ranges = new List <NamedTimeRange>
            {
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:37"), DateTime.Parse("2020-07-12 10:38"), "First"),
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:38:00.001"), DateTime.Parse("2020-07-12 10:39"), "Second"),
                new NamedTimeRange(DateTime.Parse("2020-07-12 10:39:00.001"), DateTime.Parse("2020-07-12 10:55"), "Third"),
            };
            var sub = new DateTimeValueTracker(new SnapshotColumnInfo("TestCol"), ranges);

            //Act
            var result = values.Select(v => new { Value = v ?? "<NULL>", Substitute = sub.GetSubstitute(v) ?? "<NULL>" });

            //Assert
            var output = new Output();

            output.WrapLine("Ranges:");
            output.WriteLine();
            output.FormatTable(ranges);

            output.WriteLine();
            output.WrapLine("Substitutions:");
            output.WriteLine();
            output.FormatTable(result);

            output.Report.Verify();
        }