예제 #1
0
        public void ShouldTrimSingleWhenNeeded(
            int startHr1, int startMin1, int endHr1, int endMin1,
            int startHr2, int startMin2, int endHr2, int endMin2,
            int startHrExp, int startMinExp, int endHrExp, int endMinExp)
        {
            var mockSite = new MockReadOnlySiteSettings();
            var aus      = new ApplianceUsageSchedule(mockSite);
            var ti       = new TimeInterval(startHr1, startMin1, endHr1, endMin1);
            var ti2      = new TimeInterval(startHr2, startMin2, endHr2, endMin2);
            var tiExp    = new TimeInterval(startHrExp, startMinExp,
                                            endHrExp, endMinExp);

            aus.AddUsageInterval(startHr1, startMin1, endHr1, endMin1,
                                 UsageKind.UsingSolar);

            // HandlePeakSolarIntervalUpdated would be called inside
            // SetPeakSolarInterval in the actual Site. Here we call manually.
            mockSite.SetPeakSolarInterval(
                startHr2, startMin2, endHr2, endMin2
                );
            aus.HandlePeakSolarIntervalUpdated();

            // Check that there's still just the one UTI
            Assert.Single(aus.UsageIntervals);
            // Check that it's appropriately trimmed.
            Assert.Equal(tiExp, aus.UsageIntervals.First().TimeInterval);
        }
예제 #2
0
        public void ShouldThrowForOverlappingInterval(
            int peakStartHr, int peakStartMin, int peakEndHr, int peakEndMin, List <UsageTimeInterval> usageIntervals, UsageTimeInterval uTI)
        {
            var aus =
                new ApplianceUsageSchedule(
                    new MockReadOnlySiteSettings(
                        peakStartHr, peakStartMin, peakEndHr, peakEndMin
                        )
                    );

            foreach (var u in usageIntervals)
            {
                var ti = u.TimeInterval;
                aus.AddUsageInterval(
                    ti.Start.Hours, ti.Start.Minutes,
                    ti.End.Hours, ti.End.Minutes,
                    u.UsageKind);
            }

            Assert.Throws <TimeIntervalArgumentInvalidException>(() => {
                var ti = uTI.TimeInterval;
                aus.AddUsageInterval(
                    ti.Start.Hours, ti.Start.Minutes,
                    ti.End.Hours, ti.End.Minutes,
                    uTI.UsageKind);
            });
        }
예제 #3
0
        public void ShouldNotAddIfEmpty()
        {
            var mockSite = new MockReadOnlySiteSettings();
            var aus      = new ApplianceUsageSchedule(mockSite);

            // HandlePeakSolarIntervalUpdated would be called inside
            // SetPeakSolarInterval in the actual Site. Here we call manually.
            mockSite.SetPeakSolarInterval(7, 0, 15, 0);
            aus.HandlePeakSolarIntervalUpdated();

            // Check that there's still no UTI.
            Assert.Empty(aus.UsageIntervals);
        }
예제 #4
0
        public void ShouldThrowForSolarIntervalOutsidePeak(
            int peakStartHr, int peakStartMin, int peakEndHr, int peakEndMin,
            int startHr, int startMin, int endHr, int endMin)
        {
            var aus =
                new ApplianceUsageSchedule(
                    new MockReadOnlySiteSettings(
                        peakStartHr, peakStartMin, peakEndHr, peakEndMin
                        )
                    );

            Assert.Throws <TimeIntervalArgumentInvalidException>(() => {
                aus.AddUsageInterval(startHr, startMin, endHr, endMin,
                                     UsageKind.UsingSolar);
            });
        }
예제 #5
0
        public void ShouldAddUsageIntervalToNonEmpty(
            int peakStartHr, int peakStartMin, int peakEndHr, int peakEndMin,
            List <UsageTimeInterval> usageIntervals, UsageTimeInterval uTI,
            int expIdx)
        {
            var aus =
                new ApplianceUsageSchedule(
                    new MockReadOnlySiteSettings(
                        peakStartHr, peakStartMin, peakEndHr, peakEndMin
                        )
                    );

            foreach (var u in usageIntervals)
            {
                var t = u.TimeInterval;
                aus.AddUsageInterval(
                    t.Start.Hours, t.Start.Minutes,
                    t.End.Hours, t.End.Minutes,
                    u.UsageKind);
            }

            var ti = uTI.TimeInterval;
            int startHr = ti.Start.Hours, startMin = ti.Start.Minutes;
            int endHr = ti.End.Hours, endMin = ti.End.Minutes;

            aus.AddUsageInterval(startHr, startMin, endHr, endMin,
                                 uTI.UsageKind);
            // Check that list has grown by one
            Assert.Equal(usageIntervals.Count + 1, aus.UsageIntervals.Count);
            // Find added element
            int uTI_Idx   = 0;
            var addedUTIs = aus.UsageIntervals.Where((u, id) =>
            {
                if (u.Equals(uTI))
                {
                    uTI_Idx = id;
                    return(true);
                }
                return(false);
            });

            // Check that added element is uTI
            Assert.Single(addedUTIs);
            // Check that uTI is added at expected idx
            Assert.Equal(expIdx, uTI_Idx);
        }
예제 #6
0
        public void ShouldAddUsageIntervalToEmpty(
            int peakStartHr, int peakStartMin, int peakEndHr, int peakEndMin,
            int startHr, int startMin, int endHr, int endMin,
            UsageKind usageKind)
        {
            var aus =
                new ApplianceUsageSchedule(
                    new MockReadOnlySiteSettings(
                        peakStartHr, peakStartMin, peakEndHr, peakEndMin
                        )
                    );

            aus.AddUsageInterval(startHr, startMin, endHr, endMin, usageKind);
            Assert.Single(aus.UsageIntervals);
            Assert.Equal(new UsageTimeInterval(
                             new TimeInterval(startHr, startMin, endHr, endMin), usageKind),
                         aus.UsageIntervals.First());
        }
예제 #7
0
파일: Ctor.cs 프로젝트: vaipatel/SolarTally
        public void ShouldHaveNoUsageIntervals()
        {
            var aus = new ApplianceUsageSchedule(new MockReadOnlySiteSettings());

            Assert.Empty(aus.UsageIntervals);
        }