OSDN Git Service

日向改二の先制対潜判定を実装する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / QuestCounterTest.cs
index 9776671..261aae1 100644 (file)
 // limitations under the License.\r
 \r
 using System;\r
+using System.Collections.Generic;\r
 using System.Linq;\r
+using DynaJson;\r
 using ExpressionToCodeLib;\r
 using KancolleSniffer.Model;\r
-using KancolleSniffer.Util;\r
 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
 \r
 namespace KancolleSniffer.Test\r
@@ -79,6 +80,33 @@ namespace KancolleSniffer.Test
         }\r
 \r
         [TestMethod]\r
+        public void AdjustCountMax3WithShift2()\r
+        {\r
+            var count = new QuestCount\r
+            {\r
+                Spec = new QuestSpec {Max = 3, Shift = 2},\r
+                Now = 0\r
+            };\r
+            count.AdjustCount(0);\r
+            Assert.AreEqual(0, count.Now);\r
+            count.AdjustCount(50);\r
+            Assert.AreEqual(1, count.Now);\r
+            count.AdjustCount(80);\r
+            Assert.AreEqual(2, count.Now);\r
+            count.AdjustCount(100);\r
+            Assert.AreEqual(3, count.Now);\r
+            count.Now = 4;\r
+            count.AdjustCount(100);\r
+            Assert.AreEqual(4, count.Now);\r
+            count.AdjustCount(80);\r
+            Assert.AreEqual(2, count.Now);\r
+            count.AdjustCount(50);\r
+            Assert.AreEqual(1, count.Now);\r
+            count.AdjustCount(0);\r
+            Assert.AreEqual(0, count.Now);\r
+        }\r
+\r
+        [TestMethod]\r
         public void AdjustCount80Percent()\r
         {\r
             var count = new QuestCount\r
@@ -137,53 +165,104 @@ namespace KancolleSniffer.Test
                     new QuestCount {Id = 894, NowArray = new[] {1, 1, 1, 1, 1}},\r
                     new QuestCount {Id = 280, NowArray = new[] {1, 1, 1, 1}},\r
                     new QuestCount {Id = 872, NowArray = new[] {1, 1, 1, 1}},\r
-                    new QuestCount {Id = 284, NowArray = new[] {1, 1, 1, 1}}\r
+                    new QuestCount {Id = 284, NowArray = new[] {1, 1, 1, 1}},\r
+                    new QuestCount {Id = 226, Now = 2},\r
+                    new QuestCount {Id = 434, NowArray = new[] {1, 0, 1, 0, 1}},\r
+                    new QuestCount {Id = 436, NowArray = new[] {1, 0, 1, 1, 1}},\r
+                    new QuestCount {Id = 437, NowArray = new[] {1, 0, 1, 1}},\r
+                    new QuestCount {Id = 438, NowArray = new[] {1, 0, 1, 1}},\r
+                    new QuestCount {Id = 439, NowArray = new[] {1, 0, 1, 1}},\r
+                    new QuestCount {Id = 440, NowArray = new[] {1, 0, 1, 1, 1}}\r
                 }\r
             };\r
-            new QuestInfo().LoadState(status);\r
+            var countList = new QuestCountList();\r
+            countList.SetMissionNames(new JsonObject(new[]\r
+            {\r
+                new {api_id = 1, api_name = "練習航海"},\r
+                new {api_id = 2, api_name = "長距離練習航海"},\r
+                new {api_id = 3, api_name = "警備任務"},\r
+                new {api_id = 4, api_name = "対潜警戒任務"},\r
+                new {api_id = 5, api_name = "海上護衛任務"},\r
+                new {api_id = 9, api_name = "タンカー護衛任務"},\r
+                new {api_id = 10, api_name = "強行偵察任務"},\r
+                new {api_id = 11, api_name = "ボーキサイト輸送任務"},\r
+                new {api_id = 40, api_name = "水上機前線輸送"},\r
+                new {api_id = 41, api_name = "ブルネイ泊地沖哨戒"},\r
+                new {api_id = 46, api_name = "南西海域戦闘哨戒"},\r
+                new {api_id = 100, api_name = "兵站強化任務"},\r
+                new {api_id = 101, api_name = "海峡警備行動"},\r
+                new {api_id = 102, api_name = "長時間対潜警戒"},\r
+                new {api_id = 104, api_name = "小笠原沖哨戒線"},\r
+                new {api_id = 105, api_name = "小笠原沖戦闘哨戒"},\r
+                new {api_id = 110, api_name = "南西方面航空偵察作戦"},\r
+                new {api_id = 114, api_name = "南西諸島捜索撃滅戦"},\r
+                new {api_id = 142, api_name = "強行鼠輸送作戦"}\r
+            }));\r
+            new QuestInfo(countList).LoadState(status);\r
             Assert.AreEqual("2/3", status.QuestCountList[0].ToString());\r
             Assert.AreEqual("20/36 7/6 10/24 8/12", status.QuestCountList[1].ToString());\r
             var z = status.QuestCountList[2];\r
-            Assert.AreEqual("4/4", z.ToString());\r
-            Assert.AreEqual("2-4 6-1 6-3 6-4", z.ToToolTip());\r
+            Assert.AreEqual("2\u200a1\u200a1\u200a1", z.ToString());\r
+            Assert.AreEqual("2-4:2 6-1:1 6-3:1 6-4:1", z.ToToolTip());\r
             z.NowArray = new[] {0, 0, 0, 0};\r
-            Assert.AreEqual("", z.ToToolTip());\r
+            Assert.AreEqual("2-4:0 6-1:0 6-3:0 6-4:0", z.ToToolTip());\r
             var q426 = status.QuestCountList[3];\r
-            Assert.AreEqual("4/4", q426.ToString());\r
-            Assert.AreEqual("警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務", q426.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q426.ToString());\r
+            Assert.AreEqual("警備任務1 対潜警戒任務1 海上護衛任務1 強行偵察任務1", q426.ToToolTip());\r
             var q428 = status.QuestCountList[4];\r
             Assert.AreEqual("対潜警戒任務1 海峡警備行動1 長時間対潜警戒1", q428.ToToolTip());\r
             q428.NowArray = new[] {0, 1, 0};\r
-            Assert.AreEqual("海峡警備行動1", q428.ToToolTip());\r
+            Assert.AreEqual("対潜警戒任務0 海峡警備行動1 長時間対潜警戒0", q428.ToToolTip());\r
             var q873 = status.QuestCountList[5];\r
-            Assert.AreEqual("3/3", q873.ToString());\r
-            Assert.AreEqual("3-1 3-2 3-3", q873.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1", q873.ToString());\r
+            Assert.AreEqual("3-1:1 3-2:1 3-3:1", q873.ToToolTip());\r
             var q888 = status.QuestCountList[6];\r
-            Assert.AreEqual("3/3", q888.ToString());\r
-            Assert.AreEqual("5-1 5-3 5-4", q888.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1", q888.ToString());\r
+            Assert.AreEqual("5-1:1 5-3:1 5-4:1", q888.ToToolTip());\r
             var q688 = status.QuestCountList[7];\r
             Assert.AreEqual("艦戦2 艦爆1 艦攻2 水偵1", q688.ToToolTip());\r
             var q893 = status.QuestCountList[8];\r
             Assert.AreEqual("1-5:1 7-1:1 7-2G:1 7-2M:1", q893.ToToolTip());\r
             var q894 = status.QuestCountList[9];\r
-            Assert.AreEqual("5/5", q894.ToString());\r
-            Assert.AreEqual("1-3 1-4 2-1 2-2 2-3", q894.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1\u200a1", q894.ToString());\r
+            Assert.AreEqual("1-3:1 1-4:1 2-1:1 2-2:1 2-3:1", q894.ToToolTip());\r
             var q280 = status.QuestCountList[10];\r
-            Assert.AreEqual("4/4", q280.ToString());\r
-            Assert.AreEqual("1-2 1-3 1-4 2-1", q280.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q280.ToString());\r
+            Assert.AreEqual("1-2:1 1-3:1 1-4:1 2-1:1", q280.ToToolTip());\r
             var q872 = status.QuestCountList.First(q => q.Id == 872);\r
-            Assert.AreEqual("4/4", q872.ToString());\r
-            Assert.AreEqual("7-2M 5-5 6-2 6-5", q872.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q872.ToString());\r
+            Assert.AreEqual("7-2M:1 5-5:1 6-2:1 6-5:1", q872.ToToolTip());\r
             var q284 = status.QuestCountList.First(q => q.Id == 284);\r
-            Assert.AreEqual("4/4", q284.ToString());\r
-            Assert.AreEqual("1-4 2-1 2-2 2-3", q284.ToToolTip());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q284.ToString());\r
+            Assert.AreEqual("1-4:1 2-1:1 2-2:1 2-3:1", q284.ToToolTip());\r
+            var q226 = status.QuestCountList.First(q => q.Id == 226);\r
+            Assert.AreEqual("2/5", q226.ToString());\r
+            Assert.AreEqual("", q226.ToToolTip());\r
+            var q434 = status.QuestCountList.First(q => q.Id == 434);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a0\u200a1", q434.ToString());\r
+            Assert.AreEqual("警備任務1 海上護衛任務0 兵站強化任務1 海峡警備行動0 タンカー護衛任務1", q434.ToToolTip());\r
+            var q436 = status.QuestCountList.First(q => q.Id == 436);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q436.ToString());\r
+            Assert.AreEqual("練習航海1 長距離練習航海0 警備任務1 対潜警戒任務1 強行偵察任務1", q436.ToToolTip());\r
+            var q437 = status.QuestCountList.First(q => q.Id == 437);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1", q437.ToString());\r
+            Assert.AreEqual("対潜警戒任務1 小笠原沖哨戒線0 小笠原沖戦闘哨戒1 南西方面航空偵察作戦1", q437.ToToolTip());\r
+            var q438 = status.QuestCountList.First(q => q.Id == 438);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1", q438.ToString());\r
+            Assert.AreEqual("兵站強化任務1 対潜警戒任務0 タンカー護衛任務1 南西諸島捜索撃滅戦1", q438.ToToolTip());\r
+            var q439 = status.QuestCountList.First(q => q.Id == 439);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1", q439.ToString());\r
+            Assert.AreEqual("海上護衛任務1 兵站強化任務0 ボーキサイト輸送任務1 南西方面航空偵察作戦1", q439.ToToolTip());\r
+            var q440 = status.QuestCountList.First(q => q.Id == 440);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q440.ToString());\r
+            Assert.AreEqual("ブルネイ泊地沖哨戒1 海上護衛任務0 水上機前線輸送1 強行鼠輸送作戦1 南西海域戦闘哨戒1", q440.ToToolTip());\r
         }\r
     }\r
 \r
     [TestClass]\r
     public class QuestCounterTest\r
     {\r
-        private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
+        private JsonObject Js(object obj) => new JsonObject(obj);\r
 \r
         private object CreateQuestList(int[] ids) => Js(new\r
         {\r
@@ -203,10 +282,15 @@ namespace KancolleSniffer.Test
 \r
         private QuestCount InjectQuest(int id)\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {id}));\r
+            InjectQuestList(new[] {id});\r
             return _questInfo.Quests[0].Count;\r
         }\r
 \r
+        private void InjectQuestList(int[] ids)\r
+        {\r
+            _questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));\r
+        }\r
+\r
         private void InjectMapStart(int map, int eventId)\r
         {\r
             _questCounter.InspectMapStart(CreateMap(map, eventId));\r
@@ -247,8 +331,21 @@ namespace KancolleSniffer.Test
             return new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType}};\r
         }\r
 \r
+        private ShipStatus ShipStatus(int shipType, int shipClass, int specId)\r
+        {\r
+            return new ShipStatus\r
+                {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType, ShipClass = shipClass}};\r
+        }\r
+\r
+        private ShipStatus ShipStatus(string name)\r
+        {\r
+            return new ShipStatus {NowHp = 1, Spec = new ShipSpec {Name = name}};\r
+        }\r
+\r
+\r
         private BattleInfo _battleInfo;\r
-        private ItemInfo _itemInfo;\r
+        private ItemInventory _itemInventory;\r
+        private ShipInventory _shipInventory;\r
         private QuestInfo _questInfo;\r
         private QuestCounter _questCounter;\r
 \r
@@ -256,9 +353,10 @@ namespace KancolleSniffer.Test
         public void Initialize()\r
         {\r
             _battleInfo = new BattleInfo(null, null, null);\r
-            _itemInfo = new ItemInfo(new ItemMaster(), new ItemInventory());\r
-            _questInfo = new QuestInfo(() => new DateTime(2015, 1, 1)) {AcceptMax = 10};\r
-            _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);\r
+            _itemInventory = new ItemInventory();\r
+            _shipInventory = new ShipInventory();\r
+            _questInfo = new QuestInfo(new QuestCountList(), () => new DateTime(2015, 1, 1));\r
+            _questCounter = new QuestCounter(_questInfo, _itemInventory, _shipInventory, _battleInfo);\r
         }\r
 \r
         /// <summary>\r
@@ -270,7 +368,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_201_216_210_214()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {201, 216, 210, 214}));\r
+            InjectQuestList(new[] {201, 216, 210, 214});\r
 \r
             InjectMapStart(11, 4);\r
             var counts = _questInfo.Quests.Select(q => q.Count).ToArray();\r
@@ -303,6 +401,10 @@ namespace KancolleSniffer.Test
                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
             }));\r
             PAssert.That(() => counts[2].NowArray.SequenceEqual(new[] {1, 1, 2, 1}));\r
+\r
+            // 1-6 ゴール\r
+            InjectMapNext(16, 8);\r
+            Assert.AreEqual(2, counts[0].Now);\r
         }\r
 \r
         /// <summary>\r
@@ -314,7 +416,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_211_212_213_218_220_221()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {211, 212, 213, 218, 220, 221}));\r
+            InjectQuestList(new[] {211, 212, 213, 218, 220, 221});\r
             // 補給艦1隻と空母2隻\r
             _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
@@ -342,7 +444,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_228_230()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {228, 230}));\r
+            InjectQuestList(new[] {228, 230});\r
             // 潜水艦3\r
             _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
@@ -407,8 +509,8 @@ namespace KancolleSniffer.Test
 \r
             _battleInfo.InjectResultStatus(new[]\r
             {\r
-                ShipStatus(5, 319), ShipStatus(5, 192), ShipStatus(5, 194),\r
-                ShipStatus(5, 193), ShipStatus(6, 189), ShipStatus(6, 188)\r
+                ShipStatus("妙高改二"), ShipStatus("那智改二"), ShipStatus("羽黒改二"),\r
+                ShipStatus("足柄改二"), ShipStatus("筑摩改二"), ShipStatus("利根改二")\r
             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(25, 4);\r
@@ -420,11 +522,14 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(0, count.Now);\r
             InjectBattleResult("S");\r
             Assert.AreEqual(1, count.Now);\r
-            _questInfo.Quests[0].Count.Now = 0;\r
+\r
+            _battleInfo.Result.Friend.Main[3].NowHp = 0;\r
+            InjectBattleResult("S");\r
+            Assert.AreEqual(2, count.Now, "足柄改二轟沈");\r
 \r
             _battleInfo.Result.Friend.Main[1].NowHp = 0;\r
             InjectBattleResult("S");\r
-            Assert.AreEqual(0, count.Now, "那智改二轟沈");\r
+            Assert.AreEqual(2, count.Now, "那智改二轟沈");\r
         }\r
 \r
         /// <summary>\r
@@ -472,9 +577,6 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(0, count.Now, "駆逐軽巡以外");\r
         }\r
 \r
-        private ShipStatus ShipStatus(int shipType, int shipClass, int specId) =>\r
-            new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType, ShipClass = shipClass}};\r
-\r
         /// <summary>\r
         /// 257: 「水上打撃部隊」南方へ!\r
         /// </summary>\r
@@ -668,13 +770,43 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 840: 【節分任務】令和三年節分作戦\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_840()\r
+        {\r
+            var count = InjectQuest(840);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                ShipStatusList(7, 2, 1), new ShipStatus[0],\r
+                new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(21, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(7, 2, 1, 1);\r
+            InjectBattleResult("B");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1, 1);\r
+            InjectMapNext(22, 5);\r
+            InjectBattleResult("A");\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(21, 2, 1, 1);\r
+            InjectMapNext(23, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 822: 沖ノ島海域迎撃戦\r
         /// 854: 戦果拡張任務!「Z作戦」前段作戦\r
         /// </summary>\r
         [TestMethod]\r
         public void BattleResult_822_854()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {822, 854}));\r
+            InjectQuestList(new[] {822, 854});\r
             var c822 = _questInfo.Quests[0].Count;\r
             var c854 = _questInfo.Quests[1].Count;\r
 \r
@@ -866,8 +998,8 @@ namespace KancolleSniffer.Test
 \r
             _battleInfo.InjectResultStatus(new[]\r
             {\r
-                ShipStatus(2, 543), ShipStatus(8, 360), ShipStatus(11, 545),\r
-                ShipStatus(18, 467), ShipStatus(11, 261), ShipStatus(2, 344)\r
+                ShipStatus("長波改二"), ShipStatus("Iowa改"), ShipStatus("Saratoga Mk.II"),\r
+                ShipStatus("瑞鶴改二甲"), ShipStatus("望月改"), ShipStatus("朝霜改")\r
             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(54, 4);\r
@@ -885,18 +1017,18 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(1, count.Now, "朝霜改轟沈");\r
             _battleInfo.Result.Friend.Main[5].NowHp = 1;\r
 \r
-            _battleInfo.Result.Friend.Main[0].Spec.Id = 345;\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("高波改");\r
             InjectBattleResult("S");\r
             Assert.AreEqual(1, count.Now, "長波改二なし");\r
-            _battleInfo.Result.Friend.Main[0].Spec.Id = 543;\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("長波改二");\r
 \r
-            _battleInfo.Result.Friend.Main[5].Spec.Id = 345;\r
+            _battleInfo.Result.Friend.Main[5] = ShipStatus("高波改");\r
             InjectBattleResult("S");\r
             Assert.AreEqual(2, count.Now, "高波改");\r
-            _battleInfo.Result.Friend.Main[5].Spec.Id = 359;\r
+            _battleInfo.Result.Friend.Main[5] = ShipStatus("沖波改");\r
             InjectBattleResult("S");\r
             Assert.AreEqual(3, count.Now, "沖波改");\r
-            _battleInfo.Result.Friend.Main[5].Spec.Id = 578;\r
+            _battleInfo.Result.Friend.Main[5] = ShipStatus("朝霜改二");\r
             InjectBattleResult("S");\r
             Assert.AreEqual(4, count.Now, "朝霜改二");\r
         }\r
@@ -911,8 +1043,8 @@ namespace KancolleSniffer.Test
 \r
             _battleInfo.InjectResultStatus(new[]\r
             {\r
-                ShipStatus(5, 427), ShipStatus(5, 264), ShipStatus(5, 142),\r
-                ShipStatus(5, 417), ShipStatus(2, 144), ShipStatus(2, 195)\r
+                ShipStatus("鳥海改二"), ShipStatus("青葉改"), ShipStatus("衣笠改二"),\r
+                ShipStatus("加古改二"), ShipStatus("夕立改二"), ShipStatus("綾波改二")\r
             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(51, 4);\r
@@ -929,15 +1061,17 @@ namespace KancolleSniffer.Test
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}), "轟沈あり");\r
             _battleInfo.Result.Friend.Main[0].NowHp = 1;\r
 \r
-            _battleInfo.Result.Friend.Main[0].Spec.Id = 319;\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("妙高改二");\r
             InjectBattleResult("S");\r
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}), "三川艦隊3隻");\r
-            _battleInfo.Result.Friend.Main[0].Spec.Id = 427;\r
 \r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("夕張改二特");\r
             InjectMapNext(53, 5);\r
             InjectBattleResult("S");\r
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0}));\r
 \r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("天龍改二");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("古鷹改二");\r
             InjectMapNext(54, 5);\r
             InjectBattleResult("S");\r
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
@@ -1030,12 +1164,285 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 拡張「六水戦」、最前線へ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_903()\r
+        {\r
+            var count = InjectQuest(903);\r
+            _battleInfo.InjectResultStatus(new[] {ShipStatus("夕張改二"), ShipStatus("睦月"), ShipStatus("綾波")},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(51, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "六水戦駆逐が1隻");\r
+\r
+            _battleInfo.Result.Friend.Main[2] = ShipStatus("如月");\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "A勝利はカウントしない");\r
+\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "5-1");\r
+\r
+            InjectMapNext(54, 4);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "ボス以外はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("夕張改");\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "旗艦が夕張改");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("睦月"), ShipStatus("如月"), ShipStatus("夕張改二")};\r
+            InjectMapNext(54, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "旗艦が夕張改二ではない");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("弥生"), ShipStatus("卯月")};\r
+            InjectMapNext(54, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0}), "5-4");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("菊月"), ShipStatus("望月")};\r
+            InjectMapNext(64, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}), "6-4");\r
+\r
+            InjectMapNext(65, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "6-5");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("由良改")};\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "由良改");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("由良改二")};\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 2}), "由良改二");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 904: 精鋭「十九駆」、躍り出る!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_904()\r
+        {\r
+            var count = InjectQuest(904);\r
+            _battleInfo.InjectResultStatus(\r
+                new[] {ShipStatus("綾波改二"), ShipStatus("敷波")},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(25, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "敷波はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("敷波改二");\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "A勝利はカウントしない");\r
+\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "2-5");\r
+\r
+            InjectMapNext(34, 4);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "ボス以外はカウントしない");\r
+\r
+            InjectMapNext(34, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0}), "3-4");\r
+\r
+            InjectMapNext(45, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}), "4-5");\r
+\r
+            InjectMapNext(53, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "5-3");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 905: 「海防艦」、海を護る!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_905()\r
+        {\r
+            var count = InjectQuest(905);\r
+            _battleInfo.InjectResultStatus(\r
+                ShipStatusList(1, 1, 1, 2, 2, 2),\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(11, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0, 0}), "6隻はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[5] = new ShipStatus();\r
+            InjectBattleResult("B");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0, 0}), "B勝利はカウントしない");\r
+\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0, 0}), "1-1");\r
+\r
+            InjectMapNext(12, 4);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0, 0}), "ボス以外はカウントしない");\r
+\r
+            InjectMapNext(12, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0, 0}), "1-2");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(2);\r
+            InjectMapNext(13, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0, 0}), "海防艦2隻はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(1);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}), "1-3");\r
+\r
+            InjectMapNext(15, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 0}), "1-5");\r
+\r
+            InjectMapNext(16, 8);\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}), "1-6");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 912: 工作艦「明石」護衛任務\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_912()\r
+        {\r
+            var count = InjectQuest(912);\r
+            _battleInfo.InjectResultStatus(\r
+                new[] {ShipStatus("明石"), ShipStatus(2), ShipStatus(2), ShipStatus(1)},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(13, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0, 0}), "駆逐艦2隻はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(2);\r
+            InjectBattleResult("B");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0, 0}), "B勝利はカウントしない");\r
+\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0, 0}), "1-3");\r
+\r
+            InjectMapNext(21, 4);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0, 0}), "ボス以外はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(2);\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("明石");\r
+            InjectMapNext(21, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0, 0}), "旗艦明石以外はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("明石");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus(2);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0, 0}), "2-1");\r
+\r
+            InjectMapNext(22, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}), "2-2");\r
+\r
+            InjectMapNext(23, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 0}), "2-3");\r
+\r
+            InjectMapNext(16, 8);\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}), "1-6");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 912: 重巡戦隊、西へ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_914()\r
+        {\r
+            var count = InjectQuest(914);\r
+            _battleInfo.InjectResultStatus(\r
+                new[] {ShipStatus(5), ShipStatus(5), ShipStatus(5), ShipStatus(1)},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(41, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "駆逐艦なしはカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(2);\r
+            InjectBattleResult("B");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0, 0}), "B勝利はカウントしない");\r
+\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "4-1");\r
+\r
+            InjectMapNext(42, 4);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "ボス以外はカウントしない");\r
+\r
+            InjectMapNext(42, 5);\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(6);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "重巡2隻はカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 0}), "4-2");\r
+\r
+            InjectMapNext(43, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}), "4-3");\r
+\r
+            InjectMapNext(44, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "4-3");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 928: 歴戦「第十方面艦隊」、全力出撃!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_928()\r
+        {\r
+            var count = InjectQuest(928);\r
+            _battleInfo.InjectResultStatus(\r
+                new[]\r
+                {\r
+                    ShipStatus("羽黒改二"), ShipStatus("那智"), ShipStatus(1), ShipStatus(1), ShipStatus(1), ShipStatus(1)\r
+                },\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(732, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("妙高");\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("妙高");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄");\r
+            InjectMapNext(722, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("神風");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄");\r
+            InjectMapNext(42, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 280と854以降を同時に遂行していると854以降がカウントされないことがある\r
         /// </summary>\r
         [TestMethod]\r
         public void BattleResult_280_854()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {280, 854}));\r
+            InjectQuestList(new[] {280, 854});\r
 \r
             _battleInfo.InjectResultStatus(\r
                 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],\r
@@ -1052,7 +1459,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_888_893()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {888, 893}));\r
+            InjectQuestList(new[] {888, 893});\r
 \r
             _battleInfo.InjectResultStatus(\r
                 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],\r
@@ -1073,7 +1480,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void PracticeResult_303_304_302_311_315()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311, 315}));\r
+            InjectQuestList(new[] {302, 303, 304, 311, 315});\r
 \r
             _battleInfo.InjectResultStatus(new[]\r
             {\r
@@ -1116,11 +1523,34 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(1, count.Now);\r
 \r
             count.Now = 2;\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {318}));\r
+            InjectQuestList(new[] {318});\r
             Assert.AreEqual(2, count.Now, "進捗調節しない");\r
         }\r
 \r
         /// <summary>\r
+        /// 329: 【節分任務】節分演習!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_329()\r
+        {\r
+            var count = InjectQuest(329);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                ShipStatusList(3, 2),\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(0, count.Now, "軽巡、駆逐");\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now, "A勝利でカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1);\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now, "軽巡、駆逐、海防");\r
+        }\r
+\r
+        /// <summary>\r
         /// 330: 空母機動部隊、演習始め!\r
         /// </summary>\r
         [TestMethod]\r
@@ -1132,10 +1562,13 @@ namespace KancolleSniffer.Test
                 ShipStatusList(18, 7, 2, 2),\r
                 new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
             InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now, "B勝利でカウントしない");\r
+\r
+            InjectPracticeResult("A");\r
             Assert.AreEqual(1, count.Now, "装甲空母、軽空母");\r
 \r
             _battleInfo.Result.Friend.Main = ShipStatusList(11, 7, 2, 2);\r
-            InjectPracticeResult("B");\r
+            InjectPracticeResult("A");\r
             Assert.AreEqual(2, count.Now, "正規空母、軽空母");\r
 \r
             count.Now = 0;\r
@@ -1143,15 +1576,15 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(0, count.Now, "敗北");\r
 \r
             _battleInfo.Result.Friend.Main = ShipStatusList(2, 7, 11, 2);\r
-            InjectPracticeResult("B");\r
+            InjectPracticeResult("A");\r
             Assert.AreEqual(0, count.Now, "旗艦空母以外");\r
 \r
             _battleInfo.Result.Friend.Main = ShipStatusList(11, 2, 2, 2);\r
-            InjectPracticeResult("B");\r
+            InjectPracticeResult("A");\r
             Assert.AreEqual(0, count.Now, "空母一隻");\r
 \r
             _battleInfo.Result.Friend.Main = ShipStatusList(11, 7, 3, 2);\r
-            InjectPracticeResult("B");\r
+            InjectPracticeResult("A");\r
             Assert.AreEqual(0, count.Now, "駆逐一隻");\r
         }\r
 \r
@@ -1163,25 +1596,171 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(337);\r
 \r
-            _battleInfo.InjectResultStatus(new []\r
+            _battleInfo.InjectResultStatus(new[]\r
             {\r
-                ShipStatus(2, 48), ShipStatus(2, 49),\r
-                ShipStatus(2, 17), ShipStatus(2, 18),\r
-                ShipStatus(2, 19)\r
+                ShipStatus("霰"), ShipStatus("霰"),\r
+                ShipStatus("陽炎"), ShipStatus("不知火"),\r
+                ShipStatus("黒潮")\r
             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
             InjectPracticeResult("A");\r
             Assert.AreEqual(0, count.Now, "A");\r
             InjectPracticeResult("S");\r
             Assert.AreEqual(1, count.Now);\r
-            _battleInfo.Result.Friend.Main[0] = ShipStatus(2, 47);\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("涼風");\r
             InjectPracticeResult("S");\r
             Assert.AreEqual(1, count.Now, "霰→涼風");\r
-            _battleInfo.Result.Friend.Main[4] = ShipStatus(2, 464);\r
+            _battleInfo.Result.Friend.Main[4] = ShipStatus("霞改二");\r
             InjectPracticeResult("S");\r
             Assert.AreEqual(2, count.Now, "黒潮→霞改二");\r
         }\r
 \r
         /// <summary>\r
+        /// 339: 「十九駆」演習!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_339()\r
+        {\r
+            var count = InjectQuest(339);\r
+\r
+            _battleInfo.InjectResultStatus(new[]\r
+            {\r
+                ShipStatus("磯波"), ShipStatus("浦波"),\r
+                ShipStatus("綾波"), ShipStatus("敷波"),\r
+                ShipStatus("初雪")\r
+            }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now, "A");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now);\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("深雪");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now, "磯波→深雪");\r
+        }\r
+\r
+        /// <summary>\r
+        /// 342: 小艦艇群演習強化任務\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_342()\r
+        {\r
+            var count = InjectQuest(342);\r
+\r
+            _battleInfo.InjectResultStatus(new[] {ShipStatus(1), ShipStatus(1), ShipStatus(2), ShipStatus(5)},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(2);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(3);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(4);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(3, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(21);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(4, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
+        /// 345: 演習ティータイム!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_345()\r
+        {\r
+            var count = InjectQuest(345);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                new[]\r
+                {\r
+                    ShipStatus("Warspite"), ShipStatus("金剛"), ShipStatus("Ark Royal"), ShipStatus("Richelieu"),\r
+                    ShipStatus("Perth")\r
+                },\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus("Jervis");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("Janus");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("Richelieu");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
+        /// 346: 最精鋭!主力オブ主力、演習開始!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_346()\r
+        {\r
+            var count = InjectQuest(346);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                new[] {ShipStatus("夕雲改二"), ShipStatus("巻雲改二"), ShipStatus("風雲改二"), ShipStatus("秋雲改")},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus("秋雲改二");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("綾波改二");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
+        /// 348: 「精鋭軽巡」演習!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_348()\r
+        {\r
+            var count = InjectQuest(348);\r
+\r
+            _battleInfo.InjectResultStatus(ShipStatusList(3, 3, 21, 2, 2),\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(4);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus(21);\r
+            _battleInfo.Result.Friend.Main[4] = ShipStatus(1);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[4] = ShipStatus(2);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
         /// 402: 「遠征」を3回成功させよう!\r
         /// 403: 「遠征」を10回成功させよう!\r
         /// 404: 大規模遠征作戦、発令!\r
@@ -1191,7 +1770,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void MissionResult_402_403_404_410_411()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {402, 403, 404, 410, 411}));\r
+            InjectQuestList(new[] {402, 403, 404, 410, 411});\r
 \r
             _questCounter.InspectDeck(Js(\r
                 new[]\r
@@ -1262,13 +1841,253 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 434: 特設護衛船団司令部、活動開始!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_434()\r
+        {\r
+            var count = InjectQuest(434);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 3}},\r
+                    new {api_id = 3, api_mission = new[] {2, 5}},\r
+                    new {api_id = 4, api_mission = new[] {2, 100}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 101}},\r
+                    new {api_id = 3, api_mission = new[] {2, 9}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 436: 練習航海及び警備任務を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_436()\r
+        {\r
+            var count = InjectQuest(436);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 1}},\r
+                    new {api_id = 3, api_mission = new[] {2, 2}},\r
+                    new {api_id = 4, api_mission = new[] {2, 3}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 10}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 437: 小笠原沖哨戒線の強化を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_437()\r
+        {\r
+            var count = InjectQuest(437);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 104}},\r
+                    new {api_id = 4, api_mission = new[] {2, 105}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 110}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 438: 南西諸島方面の海上護衛を強化せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_438()\r
+        {\r
+            var count = InjectQuest(438);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 100}},\r
+                    new {api_id = 4, api_mission = new[] {2, 9}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 114}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 439: 兵站強化遠征任務【基本作戦】\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_439()\r
+        {\r
+            var count = InjectQuest(439);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 5}},\r
+                    new {api_id = 3, api_mission = new[] {2, 100}},\r
+                    new {api_id = 4, api_mission = new[] {2, 11}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 110}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 440: 兵站強化遠征任務【拡張作戦】\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_440()\r
+        {\r
+            var count = InjectQuest(440);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 41}},\r
+                    new {api_id = 3, api_mission = new[] {2, 5}},\r
+                    new {api_id = 4, api_mission = new[] {2, 40}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 142}},\r
+                    new {api_id = 3, api_mission = new[] {2, 46}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 442: 西方連絡作戦準備を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_442()\r
+        {\r
+            var count = InjectQuest(442);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 131}},\r
+                    new {api_id = 3, api_mission = new[] {2, 29}},\r
+                    new {api_id = 4, api_mission = new[] {2, 30}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 133}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 444: 新兵装開発資材輸送を船団護衛せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_444()\r
+        {\r
+            var count = InjectQuest(444);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 5}},\r
+                    new {api_id = 3, api_mission = new[] {2, 12}},\r
+                    new {api_id = 4, api_mission = new[] {2, 9}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 110}},\r
+                    new {api_id = 3, api_mission = new[] {2, 11}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 503: 艦隊大整備!\r
         /// 504: 艦隊酒保祭り!\r
         /// </summary>\r
         [TestMethod]\r
         public void PowerUp_503_504()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {503, 504}));\r
+            InjectQuestList(new[] {503, 504});\r
 \r
             _questCounter.CountNyukyo();\r
             _questCounter.CountCharge();\r
@@ -1288,7 +2107,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void Kousyou_605_606_607_608_609_619()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {605, 606, 607, 608, 609, 619}));\r
+            InjectQuestList(new[] {605, 606, 607, 608, 609, 619});\r
 \r
             _questCounter.InspectCreateItem(\r
                 "api_verno=1&api_item1=10&api_item2=10&api_item3=30&api_item4=10&api_multiple_flag=0");\r
@@ -1312,6 +2131,8 @@ namespace KancolleSniffer.Test
         /// 643: 主力「陸攻」の調達\r
         /// 645: 「洋上補給」物資の調達\r
         /// 653: 工廠稼働!次期作戦準備!\r
+        /// 654: 精鋭複葉機飛行隊の編成\r
+        /// 657: 新型兵装開発整備の強化\r
         /// 663: 新型艤装の継続研究\r
         /// 673: 装備開発力の整備\r
         /// 674: 工廠環境の整備\r
@@ -1320,12 +2141,13 @@ namespace KancolleSniffer.Test
         /// 677: 継戦支援能力の整備\r
         /// 678: 主力艦上戦闘機の更新\r
         /// 680: 対空兵装の整備拡充\r
+        /// 681: 航空戦力の再編増強準備\r
         /// 688: 航空戦力の強化\r
         /// </summary>\r
         [TestMethod]\r
-        public void DestroyItem_613_638_643_645_653_663_673_674_675_676_677_678_680_686_688()\r
+        public void DestroyItem_613_638_643_645_653_654_655_657_663_673_674_675_676_677_678_680_681_686_688()\r
         {\r
-            _itemInfo.InjectItemSpec(new[]\r
+            InjectItems(new[]\r
             {\r
                 new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1},\r
                 new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21},\r
@@ -1343,19 +2165,21 @@ namespace KancolleSniffer.Test
                 new ItemSpec {Id = 23, Name = "九九式艦爆", Type = 7},\r
                 new ItemSpec {Id = 16, Name = "九七式艦攻", Type = 8},\r
                 new ItemSpec {Id = 3, Name = "10cm連装高角砲", Type = 1},\r
-                new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36}\r
+                new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36},\r
+                new ItemSpec {Id = 242, Name = "Swordfish", Type = 8},\r
+                new ItemSpec {Id = 249, Name = "Fulmar", Type = 6},\r
+                new ItemSpec {Id = 21, Name = "零式艦戦52型", Type = 6}\r
             });\r
-            var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31, 35, 23, 16, 3, 121};\r
-            _itemInfo.InjectItems(items);\r
-            var questList = new[] {613, 638, 643, 645, 653, 663, 673, 674, 675, 676, 677, 678, 680, 686, 688};\r
-            _questInfo.AcceptMax = questList.Length;\r
-            _questInfo.InspectQuestList(CreateQuestList(questList));\r
+            var questList = new[]\r
+                {613, 628, 638, 643, 645, 655, 653, 654, 657, 663, 673, 674, 675, 676, 677, 678, 680, 681, 686, 688};\r
+            InjectQuestList(questList);\r
             _questCounter.InspectDestroyItem(\r
-                $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1", null);\r
+                $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, _itemInventory.Count))}&api%5Fverno=1");\r
             var scalar = new[]\r
             {\r
-                new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 643, Now = 1}, new {Id = 645, Now = 1},\r
-                new {Id = 653, Now = 1}, new {Id = 663, Now = 1}, new {Id = 673, Now = 2}, new {Id = 674, Now = 1}\r
+                new {Id = 613, Now = 1}, new{Id = 628, Now = 1}, new {Id = 638, Now = 1}, new {Id = 643, Now = 1},\r
+                new {Id = 645, Now = 1}, new {Id = 653, Now = 1}, new {Id = 663, Now = 1}, new {Id = 673, Now = 2},\r
+                new {Id = 674, Now = 1}\r
             };\r
             foreach (var e in scalar)\r
             {\r
@@ -1365,10 +2189,13 @@ namespace KancolleSniffer.Test
             }\r
             var array = new[]\r
             {\r
-                new {Id = 675, NowArray = new[] {2, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
+                new {Id = 654, NowArray = new[] {1, 1}}, new {Id = 655, NowArray = new[] {2, 1, 1, 1, 2}},\r
+                new {Id = 657, NowArray = new[] {2, 1, 1}},\r
+                new {Id = 675, NowArray = new[] {4, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
                 new {Id = 677, NowArray = new[] {1, 1, 1}}, new {Id = 678, NowArray = new[] {1, 1}},\r
                 new {Id = 680, NowArray = new[] {1, 2}}, new {Id = 686, NowArray = new[] {1, 1}},\r
-                new {Id = 688, NowArray = new[] {2, 1, 1, 1}}\r
+                new {Id = 681, NowArray = new[] {1, 2}},\r
+                new {Id = 688, NowArray = new[] {4, 1, 2, 1}}\r
             };\r
             foreach (var e in array)\r
             {\r
@@ -1378,6 +2205,11 @@ namespace KancolleSniffer.Test
             }\r
         }\r
 \r
+        private void InjectItems(IEnumerable<ItemSpec> specs)\r
+        {\r
+            _itemInventory.Add(specs.Select((s, i) => new ItemStatus {Id = i + 1, Spec = s}));\r
+        }\r
+\r
         /// <summary>\r
         /// 702: 艦の「近代化改修」を実施せよ!\r
         /// 703: 「近代化改修」を進め、戦備を整えよ!\r
@@ -1385,11 +2217,80 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void PowerUp_702_703()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {702, 703}));\r
-            _questCounter.InspectPowerUp(Js(new {api_powerup_flag = 1}));\r
+            InjectQuestList(new[] {702, 703});\r
+            _questCounter.InspectPowerUp("", Js(new {api_powerup_flag = 1}));\r
             PAssert.That(() =>\r
                 _questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
                     .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}}));\r
         }\r
+\r
+        /// <summary>\r
+        /// 714: 「駆逐艦」の改修工事を実施せよ!\r
+        /// 715: 続:「駆逐艦」の改修工事を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PowerUp_714_715()\r
+        {\r
+            var ships = new[]\r
+            {\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2), ShipStatus(2),\r
+                ShipStatus(3), ShipStatus(3), ShipStatus(3), ShipStatus(3)\r
+            };\r
+            _shipInventory.Add(ships.Select((s, i) =>\r
+            {\r
+                s.Id = i + 1;\r
+                return s;\r
+            }));\r
+\r
+            var q714 = InjectQuest(714);\r
+            _questCounter.InspectPowerUp("api_id=3&api_id_items=1,2", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q714.Now);\r
+            _questCounter.InspectPowerUp("api_id=5&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q714.Now);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q714.Now);\r
+\r
+            var q715 = InjectQuest(715);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q715.Now);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=5,6,7", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q715.Now);\r
+        }\r
+\r
+        /// <summary>\r
+        /// 716: 「軽巡」級の改修工事を実施せよ!\r
+        /// 717: 続:「軽巡」級の改修工事を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PowerUp_716_717()\r
+        {\r
+            var ships = new[]\r
+            {\r
+                ShipStatus(3), ShipStatus(3), ShipStatus(4), ShipStatus(21),\r
+                ShipStatus(5), ShipStatus(6), ShipStatus(6)\r
+            };\r
+            _shipInventory.Add(ships.Select((s, i) =>\r
+            {\r
+                s.Id = i + 1;\r
+                return s;\r
+            }));\r
+\r
+            var q716 = InjectQuest(716);\r
+            _questCounter.InspectPowerUp("api_id=1&api_id_items=2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q716.Now);\r
+            _questCounter.InspectPowerUp("api_id=1&api_id_items=2,3,5", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q716.Now);\r
+            _questCounter.InspectPowerUp("api_id=5&api_id_items=2,3,4", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q716.Now);\r
+            _questCounter.InspectPowerUp("api_id=1&api_id_items=2,3,4", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q716.Now);\r
+\r
+            var q717 = InjectQuest(717);\r
+            _questCounter.InspectPowerUp("api_id=1&api_id_items=3,4,5", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q717.Now);\r
+            _questCounter.InspectPowerUp("api_id=1&api_id_items=5,6,7", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q717.Now);\r
+        }\r
+\r
     }\r
 }
\ No newline at end of file