kaggle-environments 1.16.8__py2.py3-none-any.whl → 1.16.10__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kaggle-environments might be problematic. Click here for more details.

Files changed (60) hide show
  1. kaggle_environments/__init__.py +1 -1
  2. kaggle_environments/agent.py +1 -1
  3. kaggle_environments/envs/chess/chess.js +10 -5
  4. kaggle_environments/envs/chess/chess.json +7 -2
  5. kaggle_environments/envs/chess/chess.py +12 -5
  6. kaggle_environments/envs/connectx/connectx.ipynb +3183 -0
  7. kaggle_environments/envs/connectx/connectx.py +1 -1
  8. kaggle_environments/envs/football/football.ipynb +75 -0
  9. kaggle_environments/envs/halite/halite.ipynb +44736 -0
  10. kaggle_environments/envs/halite/halite.py +1 -1
  11. kaggle_environments/envs/hungry_geese/hungry_geese.py +1 -1
  12. kaggle_environments/envs/kore_fleets/kore_fleets.ipynb +112 -0
  13. kaggle_environments/envs/kore_fleets/kore_fleets.py +1 -1
  14. kaggle_environments/envs/kore_fleets/starter_bots/java/Bot.java +54 -0
  15. kaggle_environments/envs/kore_fleets/starter_bots/java/README.md +26 -0
  16. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/hamcrest-core-1.3.jar +0 -0
  17. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/junit-4.13.2.jar +0 -0
  18. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Board.java +518 -0
  19. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Cell.java +61 -0
  20. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Configuration.java +24 -0
  21. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Direction.java +166 -0
  22. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Fleet.java +72 -0
  23. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/KoreJson.java +97 -0
  24. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Observation.java +72 -0
  25. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Pair.java +13 -0
  26. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Player.java +68 -0
  27. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Point.java +65 -0
  28. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Shipyard.java +70 -0
  29. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/ShipyardAction.java +59 -0
  30. kaggle_environments/envs/kore_fleets/starter_bots/java/test/BoardTest.java +567 -0
  31. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ConfigurationTest.java +25 -0
  32. kaggle_environments/envs/kore_fleets/starter_bots/java/test/KoreJsonTest.java +62 -0
  33. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ObservationTest.java +46 -0
  34. kaggle_environments/envs/kore_fleets/starter_bots/java/test/PointTest.java +21 -0
  35. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ShipyardTest.java +22 -0
  36. kaggle_environments/envs/kore_fleets/starter_bots/ts/README.md +55 -0
  37. kaggle_environments/envs/llm_20_questions/llm_20_questions.py +1 -1
  38. kaggle_environments/envs/lux_ai_2021/README.md +3 -0
  39. kaggle_environments/envs/lux_ai_2021/dimensions/754.js.LICENSE.txt +296 -0
  40. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/simple.tar.gz +0 -0
  41. kaggle_environments/envs/lux_ai_2021/testing.md +23 -0
  42. kaggle_environments/envs/lux_ai_2021/todo.md.og +18 -0
  43. kaggle_environments/envs/lux_ai_s2/.gitignore +1 -0
  44. kaggle_environments/envs/lux_ai_s2/README.md +21 -0
  45. kaggle_environments/envs/lux_ai_s2/luxai_s2/.DS_Store +0 -0
  46. kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/.DS_Store +0 -0
  47. kaggle_environments/envs/lux_ai_s3/README.md +21 -0
  48. kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json +1 -1
  49. kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +15 -8
  50. kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py +6 -29
  51. kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py +0 -17
  52. kaggle_environments/envs/tictactoe/tictactoe.ipynb +1393 -0
  53. kaggle_environments/envs/tictactoe/tictactoe.py +1 -1
  54. kaggle_environments/helpers.py +3 -3
  55. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/METADATA +2 -2
  56. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/RECORD +60 -22
  57. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/WHEEL +1 -1
  58. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/LICENSE +0 -0
  59. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/entry_points.txt +0 -0
  60. {kaggle_environments-1.16.8.dist-info → kaggle_environments-1.16.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,567 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+ import java.util.Optional;
8
+
9
+ import org.junit.Assert;
10
+ import org.junit.Test;
11
+
12
+ import kore.Board;
13
+ import kore.Direction;
14
+ import kore.Fleet;
15
+ import kore.Point;
16
+ import kore.Shipyard;
17
+ import kore.ShipyardAction;
18
+
19
+ public class BoardTest {
20
+
21
+ @Test
22
+ public void givenValidConfigAndObservation_createsSuccessful() throws IOException {
23
+ Path configPath = Paths.get("bin", "test", "configuration.json");
24
+ String rawConfig = Files.readString(configPath);
25
+ Path obsPath = Paths.get("bin", "test", "observation.json");
26
+ String rawObs = Files.readString(obsPath);
27
+
28
+ Board board = new Board(rawObs, rawConfig);
29
+
30
+ Assert.assertEquals(16, board.step);
31
+ }
32
+
33
+ @Test
34
+ public void koreRegenerates() throws IOException {
35
+ Board board = getStarterBoard();
36
+
37
+ Board nextBoard = board.next();
38
+
39
+ Assert.assertTrue("cells should regen", board.cells[3].kore < nextBoard.cells[3].kore);
40
+ }
41
+
42
+ @Test
43
+ public void spawnShips_spawnsShips() throws IOException {
44
+ Board board = getStarterBoard();
45
+
46
+ String shipyardId = board.players[0].shipyardIds.get(0);
47
+ Shipyard shipyard = board.shipyards.get(shipyardId);
48
+
49
+ shipyard.setNextAction(ShipyardAction.spawnShips(1));
50
+
51
+ Board nextBoard = board.next();
52
+ Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
53
+
54
+ Assert.assertEquals(0, shipyard.shipCount);
55
+ Assert.assertEquals(1, nextShipyard.shipCount);
56
+ }
57
+
58
+ @Test
59
+ public void spawnShips_shawnZeroShipsDoesNothing() throws IOException {
60
+ Board board = getStarterBoard();
61
+
62
+ String shipyardId = board.players[0].shipyardIds.get(0);
63
+ Shipyard shipyard = board.shipyards.get(shipyardId);
64
+
65
+ shipyard.setNextAction(ShipyardAction.spawnShips(0));
66
+
67
+ Board nextBoard = board.next();
68
+ Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
69
+
70
+ Assert.assertEquals(0, shipyard.shipCount);
71
+ Assert.assertEquals(0, nextShipyard.shipCount);
72
+ Assert.assertEquals(board.players[0].kore, nextBoard.players[0].kore, .01);
73
+ }
74
+
75
+ @Test
76
+ public void launchShips_launchesCorrectly() throws IOException {
77
+ Board board = getStarterBoard();
78
+
79
+ String shipyardId = board.players[0].shipyardIds.get(0);
80
+ Shipyard shipyard = board.shipyards.get(shipyardId);
81
+ shipyard.shipCount = 100;
82
+
83
+ shipyard.setNextAction(ShipyardAction.launchFleetWithFlightPlan(10, "N"));
84
+
85
+ Board nextBoard = board.next();
86
+ Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
87
+
88
+ Assert.assertEquals(100, shipyard.shipCount);
89
+ Assert.assertEquals(90, nextShipyard.shipCount);
90
+
91
+ Assert.assertTrue("should have launched a fleet", nextBoard.getFleetAtPoint(shipyard.position.add(Direction.NORTH)).isPresent());
92
+ Fleet launchedFleet = nextBoard.getFleetAtPoint(shipyard.position.add(Direction.NORTH)).get();
93
+ Assert.assertEquals(10, launchedFleet.shipCount);
94
+ }
95
+
96
+ @Test
97
+ public void fleetsCoalescence() throws IOException {
98
+ Board board = getStarterBoard();
99
+
100
+ Point p = new Point(10, 10);
101
+
102
+ Fleet f1 = new Fleet("f1", 100, Direction.SOUTH, p.add(Direction.NORTH), 100.0, "", 0, board);
103
+ board.addFleet(f1);
104
+ Fleet f2 = new Fleet("f2", 60, Direction.NORTH, p.add(Direction.SOUTH), 100.0, "", 0, board);
105
+ board.addFleet(f2);
106
+ Fleet f3 = new Fleet("f3", 60, Direction.EAST, p.add(Direction.WEST), 100.0, "", 0, board);
107
+ board.addFleet(f3);
108
+
109
+ Board nextBoard = board.next();
110
+
111
+ Fleet nextFleet = nextBoard.getFleetAtPoint(p).get();
112
+ Assert.assertTrue(nextFleet.id.equals("f1"));
113
+ }
114
+
115
+ @Test
116
+ public void fleetsPickUpKore() throws IOException {
117
+ Board board = getStarterBoard();
118
+
119
+ Point p = new Point(10, 10);
120
+ board.getCellAtPosition(p).kore = 100;
121
+ board.getCellAtPosition(p.add(Direction.SOUTH)).kore = 100;
122
+
123
+ Fleet fleet = new Fleet("test-fleet", 100, Direction.SOUTH, p, 100.0, "8N", 0, board);
124
+
125
+ board.addFleet(fleet);
126
+
127
+ Board nextBoard = board.next();
128
+
129
+ Fleet nextFleet = nextBoard.getFleetAtPoint(p.add(Direction.SOUTH)).get();
130
+ Assert.assertTrue(nextFleet.kore > fleet.kore);
131
+ }
132
+
133
+ @Test
134
+ public void updatesFlightPlan_decrements() throws IOException {
135
+ Board board = getStarterBoard();
136
+
137
+ Point p = new Point(10, 11);
138
+
139
+ Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "8N", 0, board);
140
+
141
+ board.addFleet(f);
142
+
143
+ Board nextBoard = board.next();
144
+
145
+ Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
146
+ Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
147
+ Assert.assertEquals("7N", nextFleet.flightPlan);
148
+ }
149
+
150
+ @Test
151
+ public void updatesFlightPlan_changesDirection() throws IOException {
152
+ Board board = getStarterBoard();
153
+
154
+ Point p = new Point(10, 11);
155
+
156
+ Fleet f = new Fleet("test-fleet", 10, Direction.NORTH, p, 100.0, "S", 0, board);
157
+
158
+ board.addFleet(f);
159
+
160
+ Board nextBoard = board.next();
161
+
162
+ Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
163
+ Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
164
+ Assert.assertEquals("", nextFleet.flightPlan);
165
+ }
166
+
167
+ @Test
168
+ public void updatesFlightPlan_convertsToShipyard() throws IOException {
169
+ Board board = getStarterBoard();
170
+
171
+ Point p = new Point(10, 11);
172
+
173
+ Fleet f = new Fleet("test-fleet", 100, Direction.NORTH, p, 100.0, "C", 0, board);
174
+
175
+ board.addFleet(f);
176
+
177
+ Board nextBoard = board.next();
178
+
179
+ Assert.assertTrue("should have made a shipyard", nextBoard.getShipyardAtPoint(p).isPresent());
180
+ Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p).get();
181
+ Assert.assertEquals(0, nextShipyard.playerId);
182
+ Assert.assertEquals(50, nextShipyard.shipCount);
183
+ }
184
+
185
+ @Test
186
+ public void updatesFlightPlan_doesNotConvertIfNotEnoughShips() throws IOException {
187
+ Board board = getStarterBoard();
188
+
189
+ Point p = new Point(10, 11);
190
+
191
+ Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "C", 0, board);
192
+
193
+ board.addFleet(f);
194
+
195
+ Board nextBoard = board.next();
196
+
197
+ Assert.assertTrue("should not have made a shipyard", nextBoard.getShipyardAtPoint(p).isEmpty());
198
+ Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
199
+ Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
200
+ Assert.assertEquals(10, nextFleet.shipCount);
201
+ Assert.assertEquals("", nextFleet.flightPlan);
202
+ }
203
+
204
+ @Test
205
+ public void updatesFlightPlan_worksWithMultipleConverts() throws IOException {
206
+ Board board = getStarterBoard();
207
+
208
+ Point p = new Point(10, 11);
209
+
210
+ Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "CCC", 0, board);
211
+
212
+ board.addFleet(f);
213
+
214
+ board = board.next();
215
+ board = board.next();
216
+ board = board.next();
217
+
218
+ Assert.assertTrue("should not have crashed", true);
219
+ }
220
+
221
+ @Test
222
+ public void correctlyJoinAlliedFleet() throws IOException {
223
+ Board board = getStarterBoard();
224
+
225
+ Point p1 = new Point(10, 11);
226
+ Point p2 = new Point(10, 9);
227
+
228
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
229
+ Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 0, board);
230
+
231
+ board.addFleet(f1);
232
+ board.addFleet(f2);
233
+
234
+ Board nextBoard = board.next();
235
+
236
+ Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
237
+ Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
238
+ Assert.assertEquals(21, combinedFleet.shipCount);
239
+ }
240
+
241
+ @Test
242
+ public void correctlyJoinAlliedFleet_onFirstTieBreak() throws IOException {
243
+ Board board = getStarterBoard();
244
+
245
+ Point p1 = new Point(10, 11);
246
+ Point p2 = new Point(10, 9);
247
+
248
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
249
+ Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 101.0, "10S", 0, board);
250
+
251
+ board.addFleet(f1);
252
+ board.addFleet(f2);
253
+
254
+ Board nextBoard = board.next();
255
+
256
+ Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
257
+ Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
258
+ Assert.assertEquals(20, combinedFleet.shipCount);
259
+ Assert.assertEquals("9S", combinedFleet.flightPlan);
260
+ }
261
+
262
+ @Test
263
+ public void correctlyJoinAlliedFleet_onSecondTieBreak() throws IOException {
264
+ Board board = getStarterBoard();
265
+
266
+ Point p1 = new Point(10, 11);
267
+ Point p2 = new Point(10, 9);
268
+
269
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
270
+ Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 0, board);
271
+
272
+ board.addFleet(f1);
273
+ board.addFleet(f2);
274
+
275
+ Board nextBoard = board.next();
276
+
277
+ Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
278
+ Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
279
+ Assert.assertEquals(20, combinedFleet.shipCount);
280
+ }
281
+
282
+ @Test
283
+ public void correctlyResolvesFleetBattles_whenThereIsAWinner() throws IOException {
284
+ Board board = getStarterBoard();
285
+
286
+ Point p1 = new Point(9, 11);
287
+ Point p2 = new Point(10, 9);
288
+
289
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
290
+ Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
291
+
292
+ board.addFleet(f1);
293
+ board.addFleet(f2);
294
+
295
+ Board nextBoard = board.next();
296
+
297
+ Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
298
+ Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
299
+ Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
300
+ Assert.assertEquals(1, survivingFleet.shipCount);
301
+ Assert.assertEquals(1, survivingFleet.playerId);
302
+ }
303
+
304
+ @Test
305
+ public void correctlyResolvesFleetBattles_whenThereIsATie() throws IOException {
306
+ Board board = getStarterBoard();
307
+
308
+ Point p1 = new Point(10, 11);
309
+ Point p2 = new Point(10, 9);
310
+
311
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
312
+ Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 1, board);
313
+
314
+ board.addFleet(f1);
315
+ board.addFleet(f2);
316
+
317
+ Board nextBoard = board.next();
318
+
319
+ Point collision = new Point(10, 10);
320
+ Assert.assertTrue("should not have a surviving fleet", nextBoard.getFleetAtPoint(collision).isEmpty());
321
+ Assert.assertTrue("should have dropped halite", board.getCellAtPosition(collision).kore + 100 < nextBoard.getCellAtPosition(collision).kore);
322
+ }
323
+
324
+ @Test
325
+ public void correctlyResolvesFleetCollisions_whenThereIsAWinner() throws IOException {
326
+ Board board = getStarterBoard();
327
+
328
+ Point p1 = new Point(10, 11);
329
+ Point p2 = new Point(10, 9);
330
+
331
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
332
+ Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
333
+
334
+ board.addFleet(f1);
335
+ board.addFleet(f2);
336
+
337
+ Board nextBoard = board.next();
338
+
339
+ Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
340
+ Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
341
+ Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
342
+ Assert.assertEquals(1, survivingFleet.shipCount);
343
+ Assert.assertEquals(1, survivingFleet.playerId);
344
+ }
345
+
346
+ @Test
347
+ public void correctlyResolvesFleetCollisions_whenThereAreMultipleFromOnePlayer() throws IOException {
348
+ Board board = getStarterBoard();
349
+
350
+ Point p1 = new Point(10, 11);
351
+ Point p2 = new Point(10, 9);
352
+ Point p3 = new Point(9, 10);
353
+
354
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
355
+ Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
356
+ Fleet f3 = new Fleet("f3", 2, Direction.EAST, p3, 100.0, "", 0, board);
357
+
358
+ board.addFleet(f1);
359
+ board.addFleet(f2);
360
+ board.addFleet(f3);
361
+
362
+ Board nextBoard = board.next();
363
+
364
+ Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
365
+ Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
366
+ Assert.assertEquals(Direction.SOUTH.toChar(), survivingFleet.direction.toChar());
367
+ Assert.assertEquals(1, survivingFleet.shipCount);
368
+ Assert.assertEquals(0, survivingFleet.playerId);
369
+ }
370
+
371
+ @Test
372
+ public void correctlyResolvesFleetCollisions_whenThereAreThreeFleets() throws IOException {
373
+ Board board = getStarterBoard();
374
+
375
+ Point p1 = new Point(10, 11);
376
+ Point p2 = new Point(10, 9);
377
+ Point p3 = new Point(9, 10);
378
+
379
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
380
+ Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
381
+ Fleet f3 = new Fleet("f3", 2, Direction.EAST, p3, 100.0, "", 2, board);
382
+
383
+ board.addFleet(f1);
384
+ board.addFleet(f2);
385
+ board.addFleet(f3);
386
+
387
+ Board nextBoard = board.next();
388
+
389
+ Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
390
+ Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
391
+ Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
392
+ Assert.assertEquals(1, survivingFleet.shipCount);
393
+ Assert.assertEquals(1, survivingFleet.playerId);
394
+ }
395
+
396
+ @Test
397
+ public void correctlyResolvesFleetCollisions_whenThereIsATie() throws IOException {
398
+ Board board = getStarterBoard();
399
+
400
+ Point p1 = new Point(10, 11);
401
+ Point p2 = new Point(10, 9);
402
+
403
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
404
+ Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 1, board);
405
+
406
+ board.addFleet(f1);
407
+ board.addFleet(f2);
408
+
409
+ Board nextBoard = board.next();
410
+
411
+ Point collision = new Point(10, 10);
412
+ Assert.assertTrue("should not have a surviving fleet", nextBoard.getFleetAtPoint(collision).isEmpty());
413
+ Assert.assertTrue("should have dropped halite", board.getCellAtPosition(collision).kore + 100 < nextBoard.getCellAtPosition(collision).kore);
414
+ }
415
+
416
+ @Test
417
+ public void fleetShipyardCollision_worksWhenTheyAreAllied() throws IOException {
418
+ Board board = getStarterBoard();
419
+
420
+ Point p1 = new Point(10, 11);
421
+ Point p2 = new Point(10, 10);
422
+
423
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
424
+ Shipyard s1 = new Shipyard("s1", 0, p2, 0, 100, board, Optional.empty());
425
+
426
+ board.addFleet(f1);
427
+ board.addShipyard(s1);
428
+
429
+ Board nextBoard = board.next();
430
+
431
+ Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
432
+ Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
433
+ Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
434
+ Assert.assertEquals(10, nextShipyard.shipCount);
435
+ Assert.assertEquals(0, nextShipyard.playerId);
436
+ Assert.assertEquals(100, s1.turnsControlled);
437
+ Assert.assertEquals(101, nextShipyard.turnsControlled);
438
+ Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
439
+ }
440
+
441
+ @Test
442
+ public void fleetShipyardCollision_smallerFleetDoesNotTakeOverLargerShipyard() throws IOException {
443
+ Board board = getStarterBoard();
444
+
445
+ Point p1 = new Point(10, 11);
446
+ Point p2 = new Point(10, 10);
447
+
448
+ Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 1, board);
449
+ Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
450
+
451
+ board.addFleet(f1);
452
+ board.addShipyard(s1);
453
+
454
+ Board nextBoard = board.next();
455
+
456
+ Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
457
+ Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
458
+ Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
459
+ Assert.assertEquals(90, nextShipyard.shipCount);
460
+ Assert.assertEquals(0, nextShipyard.playerId);
461
+ Assert.assertEquals(100, s1.turnsControlled);
462
+ Assert.assertEquals(101, nextShipyard.turnsControlled);
463
+ Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
464
+ }
465
+
466
+ @Test
467
+ public void fleetShipyardCollision_equalFleetDoesNotTakeOverLargerShipyard() throws IOException {
468
+ Board board = getStarterBoard();
469
+
470
+ Point p1 = new Point(10, 11);
471
+ Point p2 = new Point(10, 10);
472
+
473
+ Fleet f1 = new Fleet("f1", 100, Direction.SOUTH, p1, 100.0, "", 1, board);
474
+ Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
475
+
476
+ board.addFleet(f1);
477
+ board.addShipyard(s1);
478
+
479
+ Board nextBoard = board.next();
480
+
481
+ Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
482
+ Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
483
+ Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
484
+ Assert.assertEquals(0, nextShipyard.shipCount);
485
+ Assert.assertEquals(0, nextShipyard.playerId);
486
+ Assert.assertEquals(100, s1.turnsControlled);
487
+ Assert.assertEquals(101, nextShipyard.turnsControlled);
488
+ Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
489
+ }
490
+
491
+ @Test
492
+ public void fleetShipyardCollision_largerFleetDoesTakeOverSmallerShipyard() throws IOException {
493
+ Board board = getStarterBoard();
494
+
495
+ Point p1 = new Point(10, 11);
496
+ Point p2 = new Point(10, 10);
497
+
498
+ Fleet f1 = new Fleet("f1", 110, Direction.SOUTH, p1, 100.0, "", 1, board);
499
+ Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
500
+
501
+ board.addFleet(f1);
502
+ board.addShipyard(s1);
503
+
504
+ Board nextBoard = board.next();
505
+
506
+ Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
507
+ Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
508
+ Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
509
+ Assert.assertEquals(10, nextShipyard.shipCount);
510
+ Assert.assertEquals(1, nextShipyard.playerId);
511
+ Assert.assertEquals(100, s1.turnsControlled);
512
+ Assert.assertEquals(1, nextShipyard.turnsControlled);
513
+ Assert.assertEquals(nextBoard.players[1].kore, board.players[1].kore + 100, .01);
514
+ }
515
+
516
+ @Test
517
+ public void fleetAdjacentBattle_dropsKoreCorrectlyWhenBothDie() throws IOException {
518
+ Board board = getStarterBoard();
519
+
520
+ Point p1 = new Point(10, 11);
521
+ Fleet f1 = new Fleet("f1", 100, Direction.NORTH, p1, 100.0, "", 0, board);
522
+ double p1Kore = board.getCellAtPosition(p1.add(Direction.NORTH)).kore;
523
+ board.addFleet(f1);
524
+
525
+ Point p2 = p1.add(Direction.NORTH).add(Direction.NORTH).add(Direction.EAST);
526
+ Fleet f2 = new Fleet("f2", 100, Direction.SOUTH, p2, 100.0, "", 1, board);
527
+ board.addFleet(f2);
528
+
529
+ Board nextBoard = board.next();
530
+
531
+ double p1NextKore = nextBoard.getCellAtPosition(p1.add(Direction.NORTH)).kore;
532
+ Assert.assertTrue("should have been destroyed", !nextBoard.fleets.containsKey("f1"));
533
+ Assert.assertTrue("should dump all kore", p1Kore + 100 < p1NextKore);
534
+ }
535
+
536
+ @Test
537
+ public void fleetAdjacentBattle_dropsKoreCorrectlyWhenOneDies() throws IOException {
538
+ Board board = getStarterBoard();
539
+
540
+ Point p1 = new Point(10, 11);
541
+ Fleet f1 = new Fleet("f1", 50, Direction.NORTH, p1, 100.0, "", 0, board);
542
+ double p1Kore = board.getCellAtPosition(p1.add(Direction.NORTH)).kore;
543
+ board.addFleet(f1);
544
+
545
+ Point p2 = p1.add(Direction.NORTH).add(Direction.NORTH).add(Direction.EAST);
546
+ Fleet f2 = new Fleet("f2", 100, Direction.SOUTH, p2, 100.0, "", 1, board);
547
+ board.addFleet(f2);
548
+
549
+ Board nextBoard = board.next();
550
+
551
+ double p1NextKore = nextBoard.getCellAtPosition(p1.add(Direction.NORTH)).kore;
552
+ Assert.assertTrue("should have been destroyed", !nextBoard.fleets.containsKey("f1"));
553
+ Assert.assertTrue("should dump half kore", p1Kore + 50 < p1NextKore && p1Kore + 55 > p1NextKore);
554
+
555
+ Fleet f2next = nextBoard.fleets.get("f2");
556
+ Assert.assertTrue("Should have picked up half", f2.kore + 50 <= f2next.kore && f2.kore + 55 > f2next.kore);
557
+ }
558
+
559
+ private Board getStarterBoard() throws IOException {
560
+ Path configPath = Paths.get("bin", "test", "configuration.json");
561
+ String rawConfig = Files.readString(configPath);
562
+ Path obsPath = Paths.get("bin", "test", "observation.json");
563
+ String rawObs = Files.readString(obsPath);
564
+
565
+ return new Board(rawObs, rawConfig);
566
+ }
567
+ }
@@ -0,0 +1,25 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+
8
+ import org.junit.Assert;
9
+ import org.junit.Test;
10
+
11
+ import kore.Configuration;
12
+
13
+ public class ConfigurationTest {
14
+
15
+ @Test
16
+ public void givenValidConfiguration_createSuccessful() throws IOException {
17
+ Path configPath = Paths.get("bin", "test", "configuration.json");
18
+ String rawConfig = Files.readString(configPath);
19
+
20
+ Configuration config = new Configuration(rawConfig);
21
+
22
+ Assert.assertEquals(0.02, config.regenRate, .001);
23
+ }
24
+
25
+ }
@@ -0,0 +1,62 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+
8
+ import org.junit.Assert;
9
+ import org.junit.Test;
10
+
11
+ import kore.KoreJson;
12
+
13
+ public class KoreJsonTest {
14
+ @Test
15
+ public void containsKey() throws IOException {
16
+ Path observation = Paths.get("bin", "test", "observation.json");
17
+ String raw = Files.readString(observation);
18
+
19
+ Assert.assertTrue(KoreJson.containsKey(raw, "kore"));
20
+ Assert.assertFalse(KoreJson.containsKey(raw, "notThere"));
21
+ }
22
+
23
+ @Test
24
+ public void getIntFromJson() throws IOException {
25
+ Path observation = Paths.get("bin", "test", "observation.json");
26
+ String raw = Files.readString(observation);
27
+
28
+ Assert.assertEquals(KoreJson.getIntFromJson(raw, "step"), 16);
29
+ }
30
+
31
+ @Test
32
+ public void getStrFromJson() {
33
+ Assert.assertTrue(KoreJson.getStrFromJson("{'test': 'foo'}", "test").equals("foo"));
34
+ }
35
+
36
+ @Test
37
+ public void getFloatArrFromJson() throws IOException {
38
+ Path observation = Paths.get("bin", "test", "observation.json");
39
+ String raw = Files.readString(observation);
40
+
41
+ double[] kore = KoreJson.getDoubleArrFromJson(raw, "kore");
42
+ Assert.assertEquals(kore[3], 1.372, 0.0001);
43
+ }
44
+
45
+ @Test
46
+ public void getPlayerPartsFromJson() throws IOException {
47
+ Path observation = Paths.get("bin", "test", "observation.json");
48
+ String raw = Files.readString(observation);
49
+
50
+ String[] players = KoreJson.getPlayerPartsFromJson(raw);
51
+ Assert.assertEquals(players.length, 4);
52
+ Assert.assertEquals(players[0].substring(0, 3), "500");
53
+ }
54
+
55
+ @Test
56
+ public void getPlayerIdxFromJson() throws IOException {
57
+ Path observation = Paths.get("bin", "test", "observation.json");
58
+ String raw = Files.readString(observation);
59
+
60
+ Assert.assertEquals(KoreJson.getPlayerIdxFromJson(raw), 0);
61
+ }
62
+ }
@@ -0,0 +1,46 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+
8
+ import org.junit.Assert;
9
+ import org.junit.Test;
10
+
11
+ import kore.Observation;
12
+
13
+ public class ObservationTest {
14
+
15
+ @Test
16
+ public void givenValidObservation_createSuccessful() throws IOException {
17
+ Path observation = Paths.get("bin", "test", "observation.json");
18
+ String rawObservation = Files.readString(observation);
19
+
20
+ Observation ob = new Observation(rawObservation);
21
+
22
+ Assert.assertEquals(0, ob.player);
23
+ Assert.assertEquals(16, ob.step);
24
+ Assert.assertEquals(4, ob.playerHlt.length);
25
+ Assert.assertEquals(4, ob.playerFleets.size());
26
+ Assert.assertEquals(0, ob.playerFleets.get(0).size());
27
+ Assert.assertEquals(4, ob.playerShipyards.size());
28
+ Assert.assertEquals(1, ob.playerShipyards.get(0).size());
29
+ }
30
+
31
+ @Test
32
+ public void givenFullObservation_createSuccessful() throws IOException {
33
+ Path observation = Paths.get("bin", "test", "fullob.json");
34
+ String rawObservation = Files.readString(observation);
35
+
36
+ Observation ob = new Observation(rawObservation);
37
+
38
+ Assert.assertEquals(0, ob.player);
39
+ Assert.assertEquals(200, ob.step);
40
+ Assert.assertEquals(2, ob.playerHlt.length);
41
+ Assert.assertEquals(2, ob.playerFleets.size());
42
+ Assert.assertEquals(1, ob.playerFleets.get(0).size());
43
+ Assert.assertEquals(2, ob.playerShipyards.size());
44
+ Assert.assertEquals(6, ob.playerShipyards.get(0).size());
45
+ }
46
+ }