OSDN Git Service

資材の変動を確認するテストを追加する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 8 Oct 2015 12:20:09 +0000 (21:20 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 17 Oct 2015 06:18:04 +0000 (15:18 +0900)
KancolleSniffer.Test/SnifferTest.cs

index 8ecc0dc..feb5131 100644 (file)
@@ -37,7 +37,7 @@ namespace KancolleSniffer.Test
             return new StreamReader(new GZipStream(File.Open(path, FileMode.Open), CompressionMode.Decompress));\r
         }\r
 \r
-        public static void SniffLogFile(Sniffer sniffer, string name)\r
+        public static void SniffLogFile(Sniffer sniffer, string name, Action<Sniffer> action = null)\r
         {\r
             var ln = 0;\r
             using (var stream = OpenLogFile(name))\r
@@ -57,6 +57,7 @@ namespace KancolleSniffer.Test
                     }\r
                     var json = DynamicJson.Parse(triple[2]);\r
                     sniffer.Sniff(triple[0], triple[1], json);\r
+                    action?.Invoke(sniffer);\r
                 }\r
             }\r
         }\r
@@ -394,6 +395,78 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 資材の変動を正しく反映する\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MaterialVariation()\r
+        {\r
+            var sniffer1 = new Sniffer();\r
+            var result1 = new List<int[]>();\r
+            SniffLogFile(sniffer1, "material_001", sn =>\r
+            {\r
+                var cur = sn.Item.MaterialHistory.Select(h => h.Now).ToArray();\r
+                if (result1.Count == 0)\r
+                {\r
+                    result1.Add(cur);\r
+                }\r
+                else\r
+                {\r
+                    if (!result1.Last().SequenceEqual(cur))\r
+                        result1.Add(cur);\r
+                }\r
+            });\r
+            var expected1 = new List<int[]>\r
+            {\r
+                new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
+                new[] {26178, 26742, 21196, 33750, 1426, 1574, 2185, 10},\r
+                new[] {26178, 26842, 21226, 33750, 1426, 1574, 2185, 10},\r
+                new[] {28951, 29493, 24945, 35580, 1426, 1574, 2185, 10},\r
+                new[] {26074, 26616, 21068, 33700, 1426, 1572, 2183, 10},\r
+                new[] {26171, 26721, 21175, 33750, 1426, 1574, 2185, 10},\r
+                new[] {27023, 27829, 28136, 42404, 1404, 1521, 2142, 15},\r
+                new[] {31208, 29819, 29714, 42345, 1407, 1530, 2155, 13},\r
+                new[] {24595, 25353, 18900, 32025, 1427, 1576, 2187, 10},\r
+                new[] {24515, 25353, 18749, 32025, 1427, 1575, 2187, 10},\r
+                new[] {23463, 24964, 17284, 31765, 1427, 1572, 2187, 10},\r
+                new[] {23463, 25064, 17314, 31765, 1427, 1572, 2187, 10}\r
+            };\r
+            PAssert.That(() => SequenceOfSequenceEqual(expected1, result1));\r
+\r
+            var sniffer2 = new Sniffer();\r
+            var result2 = new List<int[]>();\r
+            SniffLogFile(sniffer2, "material_002", sn =>\r
+            {\r
+                var cur = sn.Item.MaterialHistory.Select(h => h.Now).ToArray();\r
+                if (result2.Count == 0)\r
+                {\r
+                    result2.Add(cur);\r
+                }\r
+                else\r
+                {\r
+                    if (!result2.Last().SequenceEqual(cur))\r
+                        result2.Add(cur);\r
+                }\r
+            });\r
+            var expected2 = new List<int[]>\r
+            {\r
+                new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
+                new[] {201649, 189713, 261490, 123227, 2743, 2828, 3000, 44},\r
+                new[] {201649, 189714, 261491, 123227, 2743, 2828, 3000, 44},\r
+                new[] {201650, 189718, 261500, 123227, 2743, 2828, 3000, 44}\r
+            };\r
+            PAssert.That(() => SequenceOfSequenceEqual(expected2, result2));\r
+        }\r
+\r
+        private bool SequenceOfSequenceEqual<T>(IEnumerable<IEnumerable<T>> a, IEnumerable<IEnumerable<T>> b)\r
+        {\r
+            var aa = a.ToArray();\r
+            var bb = b.ToArray();\r
+            if (aa.Count() != bb.Count())\r
+                return false;\r
+            return aa.Zip(bb, (x, y) => x.SequenceEqual(y)).All(x => x);\r
+        }\r
+\r
+        /// <summary>\r
         /// 海域ゲージ情報を作成する\r
         /// </summary>\r
         [TestMethod]\r