Esempio n. 1
0
        public void TestMergeAdjacentExtensive()
        {
            Verbrauch v1 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KWH,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2017, 12, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            Verbrauch v2 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KWH,
                Wert       = 3,
                Startdatum = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 2, 28, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            HashSet <Verbrauch> result = v1.Merge(v2);

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(v1.Startdatum, result.First().Startdatum);
            Assert.AreEqual(v2.Enddatum, result.First().Enddatum);
            Assert.AreEqual(8, result.First().Wert);

            Assert.IsTrue(result.SetEquals(v2.Merge(v1)));
        }
Esempio n. 2
0
        public void TestMergeOverlappingIntensive()
        {
            Verbrauch v1 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2017, 12, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            Verbrauch v2 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 3,
                Startdatum = new DateTimeOffset(2018, 1, 15, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 2, 28, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            var rawResult           = v1.Merge(v2);
            List <Verbrauch> result = new List <Verbrauch>(rawResult);

            Assert.AreEqual(3, result.Count);
            result.Sort(new VerbrauchDateTimeComparer());
            Assert.AreEqual(v1.Startdatum, result.First().Startdatum);
            Assert.AreEqual(5, result.First().Wert);
            Assert.AreEqual(v2.Startdatum, result[1].Startdatum);
            Assert.AreEqual(v1.Enddatum, result[1].Enddatum);
            Assert.AreEqual(8, result[1].Wert);
            Assert.AreEqual(v2.Enddatum, result.Last().Enddatum);
            Assert.AreEqual(3, result.Last().Wert);

            Assert.IsTrue(rawResult.SetEquals(v2.Merge(v1)));
        }
Esempio n. 3
0
        public void TestMergeNoOverlap()
        {
            Verbrauch v1 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KWH,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2017, 12, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            Verbrauch v2 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KWH,
                Wert       = 3,
                Startdatum = new DateTimeOffset(2018, 2, 28, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 3, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            HashSet <Verbrauch> result = v1.Merge(v2);

            Assert.AreEqual(2, result.Count);

            Assert.IsTrue(result.SetEquals(new HashSet <Verbrauch> {
                v1, v2
            }));
        }
Esempio n. 4
0
        public void TestMergeAdjacentIntensive()
        {
            Verbrauch v1 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2017, 12, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            Verbrauch v2 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 3,
                Startdatum = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 2, 28, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            HashSet <Verbrauch> result12 = v1.Merge(v2);

            Assert.AreEqual(2, result12.Count);

            Assert.IsTrue(result12.SetEquals(v2.Merge(v1)));

            Verbrauch v3 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2017, 12, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            Verbrauch v4 = new Verbrauch()
            {
                Obiskennzahl             = "123",
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                Einheit    = Mengeneinheit.KW,
                Wert       = 5,
                Startdatum = new DateTimeOffset(2018, 1, 31, 23, 0, 0, TimeSpan.Zero).UtcDateTime,
                Enddatum   = new DateTimeOffset(2018, 2, 28, 23, 0, 0, TimeSpan.Zero).UtcDateTime
            };
            HashSet <Verbrauch> result34 = v3.Merge(v4);

            //Assert.AreEqual(1, result34.Count);

            Assert.IsTrue(result34.SetEquals(v4.Merge(v3)));
        }
Esempio n. 5
0
        public void ShowCaseTest()
        {
            var verbrauchA = new Verbrauch()
            {
                Startdatum = new DateTime(2020, 3, 1, 0, 0, 0, DateTimeKind.Utc),
                Enddatum   = new DateTime(2020, 3, 8, 0, 0, 0, DateTimeKind.Utc),
                Wert       = 0.456M,
                Einheit    = Mengeneinheit.MW,
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
            };

            verbrauchA.ConvertToUnit(Mengeneinheit.KW);
            Debug.WriteLine($"{nameof(verbrauchA)} contains {verbrauchA.Wert}{verbrauchA.Einheit}");
            // v contains 456,000KW

            try
            {
                verbrauchA.ConvertToUnit(Mengeneinheit.TAG);
            }
            catch (InvalidOperationException ioe)
            {
                Debug.WriteLine(ioe.Message);
                // KW and TAG are not convertible into each other because they don't share the same dimension.
            }

            var verbrauchB = new Verbrauch()
            {
                Startdatum = new DateTime(2020, 3, 7, 0, 0, 0, DateTimeKind.Utc),
                Enddatum   = new DateTime(2020, 3, 14, 0, 0, 0, DateTimeKind.Utc),
                Wert       = 0.1M,
                Einheit    = Mengeneinheit.KW,
                Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
            };

            foreach (Verbrauch v in verbrauchA.Merge(verbrauchB))
            {
                Debug.WriteLine($"{v.Startdatum.ToString("yyyy-MM-dd")} to {v.Enddatum.ToString("yyyy-MM-dd")}: {v.Wert}{v.Einheit}");
            }
            // 2020-03-01 to 2020-03-07: 456,000KW
            // 2020-03-07 to 2020-03-08: 456,100KW
            // 2020-03-08 to 2020-03-14: 0,1KW
        }
Esempio n. 6
0
 public static HashSet <Verbrauch> MergeRedundant(this Verbrauch v1, Verbrauch v2, Boolean biased)
 {
     return(v1.Merge(v2, true, biased));
 }
Esempio n. 7
0
 /// <summary>
 /// Merging two Verbrauch instances means adding their values whenever it's possible.
 /// But generally the result is going to contain multiple Verbrauchs.
 /// </summary>
 /// <param name="v1"></param>
 /// <param name="v2"></param>
 /// <returns></returns>
 public static HashSet <Verbrauch> Merge(this Verbrauch v1, Verbrauch v2)
 {
     return(v1.Merge(v2, false, false));
 }
Esempio n. 8
0
 /// <summary>
 /// Apply <see cref="Merge(BO4E.COM.Verbrauch,BO4E.COM.Verbrauch)"/> to the provided Verbräuche.
 /// But remove identical entries that occur in both <paramref name="v1"/> and <paramref name="v2"/>
 /// </summary>
 /// <param name="v1"></param>
 /// <param name="v2"></param>
 /// <param name="biased"></param>
 /// <returns></returns>
 public static HashSet <Verbrauch> MergeRedundant(this Verbrauch v1, Verbrauch v2, bool biased) =>
 v1.Merge(v2, true, biased);
Esempio n. 9
0
 /// <summary>
 ///     Merging two Verbrauch instances means adding their values whenever it's possible.
 ///     But generally the result is going to contain multiple Verbrauchs.
 /// </summary>
 /// <param name="v1"></param>
 /// <param name="v2"></param>
 /// <returns></returns>
 public static HashSet <Verbrauch> Merge(this Verbrauch v1, Verbrauch v2) =>
 v1.Merge(v2, false, false);