OSDN Git Service

分岐係数込みの判定式(33)の値が誤っていたので修正
[kcd/KCD.git] / KCDTests / TPTest.swift
1 //
2 //  TPTest.swift
3 //  KCDTests
4 //
5 //  Created by Hori,Masaki on 2018/03/04.
6 //  Copyright © 2018年 Hori,Masaki. All rights reserved.
7 //
8
9 import XCTest
10
11 @testable import KCD
12
13 // 駆逐艦    5
14 // 軽巡洋艦    2
15 // 練習巡洋艦    6
16 // 航空巡洋艦    4
17 // 航空戦艦    7
18 // 補給艦    15
19 // 水上機母艦    9
20 // 揚陸艦    12
21 // 潜水空母    1
22 // 潜水母艦    7
23 //
24 // ドラム缶    5
25 // 大発動艇    8
26 // 特大発動艇    8
27 // 大発動艇(八十九式中戦車&陸戦隊)    8
28 // 特大発動艇+戦車第11連隊    8
29 // 特二式内火艇    22
30 // 戦闘糧食    1
31 // 秋刀魚の缶詰    1
32 // 戦闘糧食(特別なおにぎり)    1
33
34 class TPTest: XCTestCase {
35     
36     let store = ServerDataStore.oneTimeEditor()
37
38     override func setUp() {
39         
40         super.setUp()
41         
42         // 駆逐艦 大潮改二
43         // ドラム缶, 大発, 大発戦車
44         // なし
45         setupShip(id: 14, slotItems: [74_719, 11_825, 58_197], exSlot: -1, saku0: 0)
46         
47         // 駆逐艦 霞改二
48         // なし
49         // なし
50         setupShip(id: 26, slotItems: [], exSlot: -1, saku0: 0)
51         
52         // 軽巡 由良改二
53         // 大発, 大発40戦車, 特二式内火艇
54         // なし
55         setupShip(id: 62, slotItems: [60_172, 51_323, 9_742], exSlot: -1, saku0: 0)
56         
57         // 軽巡 阿武隈改二
58         // なし
59         // なし
60         setupShip(id: 475, slotItems: [], exSlot: -1, saku0: 0)
61         
62         // 軽巡 鬼怒改二
63         // なし
64         // なし
65         setupShip(id: 1_716, slotItems: [], exSlot: -1, saku0: 0)
66         
67         // 練巡 香取改
68         // 特大発, 特大発戦車, 特二式内火艇, ドラム缶
69         // なし
70         setupShip(id: 15_562, slotItems: [62_546, 70_464, 50_943, 75_011], exSlot: -1, saku0: 0)
71         
72         // 練巡 鹿島改
73         // なし
74         // なし
75         setupShip(id: 24_844, slotItems: [], exSlot: -1, saku0: 0)
76         
77         // 重巡 Prinz Eugen改
78         // なし
79         // おにぎり
80         setupShip(id: 36_488, slotItems: [], exSlot: 70_318, saku0: 0)
81         
82         // 航巡 三隈改
83         // なし
84         // なし
85         setupShip(id: 5_545, slotItems: [], exSlot: -1, saku0: 0)
86         
87         // 水母 千歳
88         // なし
89         // なし
90         setupShip(id: 50_132, slotItems: [], exSlot: -1, saku0: 0)
91         
92         // 軽空 千代田航改二
93         // 特別なおにぎり
94         // なし
95         setupShip(id: 88, slotItems: [80_171], exSlot: -1, saku0: 0)
96         
97         // 正規空母 Aquila改
98         // なし
99         // 鯖缶
100         setupShip(id: 35_997, slotItems: [], exSlot: 37_933, saku0: 0)
101         
102         // 装甲空母 瑞鶴改二甲
103         // なし
104         // なし
105         setupShip(id: 3_386, slotItems: [], exSlot: -1, saku0: 0)
106         
107         // 戦艦 長門改二
108         // なし
109         // なし
110         setupShip(id: 5_500, slotItems: [], exSlot: -1, saku0: 0)
111         
112         // 航戦 扶桑改二
113         // なし
114         // なし
115         setupShip(id: 602, slotItems: [], exSlot: -1, saku0: 0)
116         
117         // 潜水 U-511
118         // なし
119         // なし
120         setupShip(id: 24_875, slotItems: [], exSlot: -1, saku0: 0)
121         
122         // 潜水空母 伊26改
123         // なし
124         // なし
125         setupShip(id: 36_069, slotItems: [], exSlot: -1, saku0: 0)
126         
127         // 潜水母艦 大鯨
128         // なし
129         // なし
130         setupShip(id: 29_953, slotItems: [], exSlot: -1, saku0: 0)
131         
132         // 揚陸 あきつ丸改
133         // なし
134         // なし
135         setupShip(id: 6_036, slotItems: [], exSlot: -1, saku0: 0)
136         
137         // 補給 速水改
138         // なし
139         // なし
140         setupShip(id: 21_208, slotItems: [], exSlot: -1, saku0: 0)
141         
142         // 工作 明石改
143         // なし
144         // なし
145         setupShip(id: 29_268, slotItems: [], exSlot: -1, saku0: 0)
146         
147         // 海防 佐渡改
148         // なし
149         // なし
150         setupShip(id: 48_510, slotItems: [], exSlot: -1, saku0: 0)
151         
152         
153         let tempStore = TemporaryDataStore.oneTimeEditor()
154         tempStore.guardEscaped().forEach(tempStore.delete)
155     }
156     
157     override func tearDown() {
158         
159         let store = TemporaryDataStore.oneTimeEditor()
160         store.guardEscaped().forEach(store.delete)
161         
162         super.tearDown()
163     }
164     
165     func setupShip(id shipId: Int, slotItems: [Int], exSlot: Int, saku0: Int) {
166         
167         guard let ship = store.ship(by: shipId) else {
168             
169             XCTFail("Can not get ship, \(shipId)")
170             
171             fatalError()
172         }
173         ship.onslot_0 = ship.master_ship.maxeq_0
174         ship.onslot_1 = ship.master_ship.maxeq_1
175         ship.onslot_2 = ship.master_ship.maxeq_2
176         ship.onslot_3 = ship.master_ship.maxeq_3
177         ship.onslot_4 = ship.master_ship.maxeq_4
178         
179         setSlot(slotItems: slotItems, to: ship)
180         
181         ship.slot_ex = exSlot
182         ship.extraItem = store.slotItem(by: ship.slot_ex)
183         
184         ship.sakuteki_0 = saku0
185         
186     }
187     
188     func setSlot(slotItems: [Int], to ship: Ship) {
189         
190         let newItems: [SlotItem] = slotItems
191             .filter { $0 != 0 && $0 != -1 }
192             .flatMap { store.slotItem(by: $0) }
193         ship.equippedItem = NSOrderedSet(array: newItems)
194         
195         slotItems.enumerated().forEach { offset, element in
196             
197             ship.setItem(element, to: offset)
198         }
199     }
200     
201     func checkShip(_ shipId: Int, sTp: Int, bTp: Double, file: StaticString = #file, line: UInt = #line) {
202         
203         guard let ship1 = store.ship(by: shipId) else {
204             
205             XCTFail("Can not get ship")
206             
207             fatalError()
208         }
209         ship1.nowhp = ship1.maxhp
210         let tp = ShipTPValueCalculator(ship1).value
211         XCTAssertEqual(tp, sTp, file: file, line: line)
212         XCTAssertLessThan(abs(Double(tp) * 0.7 - bTp), 0.00000001, file: file, line: line)
213         
214         // 大破
215         ship1.nowhp = Int(Double(ship1.nowhp) * 0.2)
216         XCTAssertEqual(ShipTPValueCalculator(ship1).value, 0, "Taiha", file: file, line: line)
217     }
218
219     func testTP() {
220         
221         // 駆逐艦 大潮改二
222         checkShip(14, sTp: 26, bTp: 18.2)
223         
224         // 駆逐艦 霞改二
225         checkShip(26, sTp: 5, bTp: 3.5)
226         
227         // 軽巡 由良改二
228         checkShip(62, sTp: 40, bTp: 28)
229         
230         // 軽巡 阿武隈改二
231         checkShip(475, sTp: 2, bTp: 1.4)
232         
233         // 練巡 香取改
234         checkShip(15_562, sTp: 49, bTp: 34.3)
235         
236         // 練巡 鹿島改
237         checkShip(24_844, sTp: 6, bTp: 4.2)
238         
239         // 重巡 Prinz Eugen改
240         checkShip(36_488, sTp: 1, bTp: 0.7)
241         
242         // 航巡 三隈改
243         checkShip(5_545, sTp: 4, bTp: 2.8)
244         
245         // 水母 千歳
246         checkShip(50_132, sTp: 9, bTp: 6.3)
247         
248         // 軽空 千代田航改二
249         checkShip(88, sTp: 1, bTp: 0.7)
250         
251         // 正規空母 Aquila改
252         checkShip(35_997, sTp: 1, bTp: 0.7)
253         
254         // 装甲空母 瑞鶴改二甲
255         checkShip(3_386, sTp: 0, bTp: 0)
256         
257         // 戦艦 長門改二
258         checkShip(5_500, sTp: 0, bTp: 0)
259         
260         // 航戦 扶桑改二
261         checkShip(602, sTp: 7, bTp: 4.9)
262         
263         // 潜水 U-511
264         checkShip(24_875, sTp: 0, bTp: 0)
265         
266         // 潜水空母 伊26改
267         checkShip(36_069, sTp: 1, bTp: 0.7)
268         
269         // 潜水母艦 大鯨
270         checkShip(29_953, sTp: 7, bTp: 4.9)
271         
272         // 揚陸 あきつ丸改
273         checkShip(6_036, sTp: 12, bTp: 8.4)
274         
275         // 補給 速水改
276         checkShip(21_208, sTp: 15, bTp: 10.5)
277         
278         // 工作 明石改
279         checkShip(29_268, sTp: 0, bTp: 0)
280         
281         // 海防 佐渡改
282         checkShip(48_510, sTp: 0, bTp: 0)
283     }
284 }