public void TestRounding() { string boFile = Directory.GetFiles("Energiemenge/completeness", "gas_januar_2018.json").First(); JObject json; using (StreamReader r = new StreamReader(boFile)) { string jsonString = r.ReadToEnd(); json = JsonConvert.DeserializeObject <JObject>(jsonString); } Energiemenge em = (Energiemenge)BoMapper.MapObject(JObject.FromObject(json["input"]), LenientParsing.Strict); CompletenessReport cr = em.GetCompletenessReport(new TimeRange() { Start = new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc), End = new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc) }); Assert.AreEqual(1.0M, cr.Coverage.Value); Assert.AreEqual(0, cr.Gaps.Count()); var dailies = em.GetDailyCompletenessReports(new TimeRange() { Start = new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc), End = new DateTime(2018, 1, 2, 23, 0, 0, 0, DateTimeKind.Utc) }); foreach (var crDaily in dailies) { Assert.AreEqual(1.0M, crDaily.Value.Coverage.Value, $"error in slice {crDaily.Key}"); } Assert.AreEqual(1.0M, cr.Coverage.Value); }
public void TestDailyCompleteness() { foreach (string boFile in Directory.GetFiles("Energiemenge/completeness/", "50hz_prognose*.json")) { using (MiniProfiler.Current.Step($"Processing file {boFile}")) { JObject json; using (StreamReader r = new StreamReader(boFile)) { string jsonString = r.ReadToEnd(); json = JsonConvert.DeserializeObject <JObject>(jsonString); } Energiemenge em = BoMapper.MapObject <Energiemenge>(json, LenientParsing.Strict); var result = em.GetDailyCompletenessReports(CHRISTMAS_2018); Assert.AreEqual(8, result.Count); break; // one test is enough. the rest is covered by the individual completeness report tests. } } }
public void TestDailyParallization() { //Energiemenge em ; //using (StreamReader r = new StreamReader(Directory.GetFiles("BusinessObjectExtensions/Energiemenge/completeness", "threeyears.json").First())) //{ // string jsonString = r.ReadToEnd(); // em = JsonConvert.DeserializeObject<Energiemenge>(jsonString); //} Energiemenge em = new Energiemenge(); DateTime dateTime = DateTime.Parse("2015-01-31 22:45:00"); List <Verbrauch> listvb = new List <Verbrauch>(); for (int u = 0; u < 1500; u++) { dateTime = dateTime.AddMinutes(15); DateTime endDateTime = dateTime.AddMinutes(15); listvb.Add(new Verbrauch() { Startdatum = dateTime, Enddatum = endDateTime, Einheit = Mengeneinheit.JAHR, Wert = 12 }); dateTime = endDateTime; } em.Energieverbrauch = listvb; MiniProfiler mpLinear = MiniProfiler.StartNew("Non-Parallel"); em.GetMonthlyCompletenessReports(new TimeRange(new DateTime(2015, 1, 1, 23, 00, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: false); mpLinear.Stop(); Console.Out.Write(mpLinear.RenderPlainText()); //Assert.IsTrue(mpLinear.DurationMilliseconds < 4000, $"Linear completeness report generation was too slow. Expected less than 4 seconds but was {mpLinear.DurationMilliseconds}ms: {mpLinear.RenderPlainText()}"); MiniProfiler mpParallel = MiniProfiler.StartNew("Parallel"); em.GetDailyCompletenessReports(new TimeRange(new DateTime(2015, 1, 01, 23, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: true); mpParallel.Stop(); Console.Out.Write(mpParallel.RenderPlainText()); //Assert.IsTrue(mpParallel.DurationMilliseconds < 3000, $"Parallel completeness report generation was too slow. Expected less than 3 seconds but was {mpParallel.DurationMilliseconds}ms: {mpParallel.RenderPlainText()}"); //Assert.IsTrue(mpParallel.DurationMilliseconds < (int)mpLinear.DurationMilliseconds * 1.25M, $"Parallel: {mpParallel.DurationMilliseconds}, Non-Parallel: {mpLinear.DurationMilliseconds}"); }
public void TestDailyCompletenessDST() { var localStart = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); //, DateTimeKind.Unspecified); var localEnd = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); //, DateTimeKind.Unspecified); if (TimeZoneInfo.Local != Verbrauch.CENTRAL_EUROPE_STANDARD_TIME) { localStart = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(localStart, TimeZoneInfo.Local, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME), DateTimeKind.Unspecified); localEnd = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(localEnd, TimeZoneInfo.Local, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME), DateTimeKind.Unspecified); } else { localStart = DateTime.SpecifyKind(localStart, DateTimeKind.Unspecified); localEnd = DateTime.SpecifyKind(localEnd, DateTimeKind.Unspecified); } var utcStart = new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc); var utcEnd = new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc); if (TimeZoneInfo.Local.SupportsDaylightSavingTime && Verbrauch.CENTRAL_EUROPE_STANDARD_TIME == TimeZoneInfo.Local) { Assert.IsFalse(Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localStart)); Assert.IsTrue(Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localEnd)); } var verbrauchSlices = new List <TimeRange>() { new TimeRange() { Start = utcStart, End = utcStart.AddHours(1) } }; while (verbrauchSlices.Last().End < utcEnd) { verbrauchSlices.Add(new TimeRange() { Start = verbrauchSlices.Last().Start.AddHours(1), End = verbrauchSlices.Last().End.AddHours(1), }); } Assert.AreEqual(2 * 24 - 1, verbrauchSlices.Count); Energiemenge em = new Energiemenge() { LokationsId = "MeinUnitTest123", LokationsTyp = Lokationstyp.MeLo, Energieverbrauch = verbrauchSlices.Select(vs => new BO4E.COM.Verbrauch() { Startdatum = vs.Start, Enddatum = vs.End, Einheit = Mengeneinheit.KWH, Wert = (decimal)123.456, Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG } ).ToList() }; var result = em.GetDailyCompletenessReports(new TimeRange(utcStart, utcEnd)); Assert.AreEqual(2, result.Count); Assert.AreEqual(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Startdatum); Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Enddatum); Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Startdatum); Assert.AreEqual(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Enddatum); }