public void ReturnsWeightedAverage()
 {
     var collectedByHour = new Dictionary<TimeSpan, List<CollectedSugar>>();
     var dateTime = basedate.AddHours(12).AddMinutes(30);
     collectedByHour[new TimeSpan(20, 10, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 125, DateTime = dateTime }, Weight = 10000 }
     };
     collectedByHour[new TimeSpan(20, 15, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 129, DateTime = dateTime }, Weight = 5000 }
     };
     collectedByHour[new TimeSpan(22, 15, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 90, DateTime = dateTime }, Weight = 7100 },
         new CollectedSugar { Related = new Sugar { BloodSugar = 140, DateTime = dateTime }, Weight = 2900 },
         new CollectedSugar { Related = new Sugar { BloodSugar = 145, DateTime = dateTime }, Weight = 7000 }
     };
     var sut = new SugarAggregator();
     var actual = sut.Aggregate(collectedByHour);
     var actualKeys = actual.Keys.ToList();
     var expectedKeys = new List<Sugar>();
     expectedKeys.Add(new Sugar { BloodSugar = 125, DateTime = basedate + new TimeSpan(20, 10, 00) });
     expectedKeys.Add(new Sugar { BloodSugar = 129, DateTime = basedate + new TimeSpan(20, 15, 00) });
     expectedKeys.Add(new Sugar { BloodSugar = 121.2f, DateTime = basedate + new TimeSpan(22, 15, 00) });
     Assert.AreEqual(expectedKeys, actualKeys);
     foreach (var actualKey in actualKeys)
         Assert.AreSame(collectedByHour[actualKey.DateTime.TimeOfDay], actual[actualKey]);
 }
 public void SkipsWhenWeightCannotBeSummedToNonZero()
 {
     var collectedByHour = new Dictionary<TimeSpan, List<CollectedSugar>>();
     collectedByHour[new TimeSpan(21, 05, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 100, DateTime = basedate }, Weight = 0 },
         new CollectedSugar { Related = new Sugar { BloodSugar = 120, DateTime = basedate }, Weight = 0 }
     };
     collectedByHour[new TimeSpan(21, 10, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 125, DateTime = basedate }, Weight = 10000 }
     };
     collectedByHour[new TimeSpan(21, 25, 00)] = new List<CollectedSugar>
     {
         new CollectedSugar { Related = new Sugar { BloodSugar = 100, DateTime = basedate }, Weight = -20 },
         new CollectedSugar { Related = new Sugar { BloodSugar = 120, DateTime = basedate }, Weight = 20 }
     };
     collectedByHour[new TimeSpan(21, 35, 00)] = new List<CollectedSugar>();
     var sut = new SugarAggregator();
     var actual = sut.Aggregate(collectedByHour);
     Assert.AreEqual(new TimeSpan(21, 10, 00), actual.Single().Key.DateTime.TimeOfDay);
 }