public void Equals_EqualValues()
        {
            // Arrange
            var(start, end) = Fixture.Create <LocalDateTime>((x, y) => x < y);
            var interval1 = new DateTimeInterval(start, end);
            var interval2 = new DateTimeInterval(start, end);

            // Assert
            interval1.Should().Be(interval2);
            interval1.GetHashCode().Should().Be(interval2.GetHashCode());
            (interval1 == interval2).Should().BeTrue();
            (interval1 != interval2).Should().BeFalse();
            interval1.Equals(interval2).Should().BeTrue();   // IEquatable implementation
        }
        public void Equals_DifferentEnd()
        {
            // Arrange
            var start     = Fixture.Create <LocalDateTime>();
            var end1      = Fixture.Create <LocalDateTime>(x => start <= x);
            var end2      = Fixture.Create <LocalDateTime>(x => start <= x);
            var interval1 = new DateTimeInterval(start, end1);
            var interval2 = new DateTimeInterval(start, end2);

            // Assert
            interval1.Should().NotBe(interval2);
            interval1.GetHashCode().Should().NotBe(interval2.GetHashCode());
            (interval1 == interval2).Should().BeFalse();
            (interval1 != interval2).Should().BeTrue();
            interval1.Equals(interval2).Should().BeFalse();   // IEquatable implementation
        }
        public void Equals_DifferentCalendars()
        {
            // Arrange
            var(start1, end1) = Fixture.Create <LocalDateTime>((x, y) => x < y);
            var interval1 = new DateTimeInterval(start1, end1);

            // This is a really, really similar calendar to ISO, but we do distinguish.
            var start2    = start1.WithCalendar(CalendarSystem.Gregorian);
            var end2      = end1.WithCalendar(CalendarSystem.Gregorian);
            var interval2 = new DateTimeInterval(start2, end2);

            // Assert
            interval1.Should().NotBe(interval2);
            interval1.GetHashCode().Should().NotBe(interval2.GetHashCode());
            (interval1 == interval2).Should().BeFalse();
            (interval1 != interval2).Should().BeTrue();
            interval1.Equals(interval2).Should().BeFalse();   // IEquatable implementation
        }