aboutsummaryrefslogtreecommitdiff
path: root/diplomacy/daide/tests/test_tokens.py
blob: f06ae70528f6a42b06d88d7378b60f3beda095f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
# ==============================================================================
# Copyright (C) 2019 - Philip Paquette
#
#  This program is free software: you can redistribute it and/or modify it under
#  the terms of the GNU Affero General Public License as published by the Free
#  Software Foundation, either version 3 of the License, or (at your option) any
#  later version.
#
#  This program is distributed in the hope that it will be useful, but WITHOUT
#  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
#  FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
#  details.
#
#  You should have received a copy of the GNU Affero General Public License along
#  with this program.  If not, see <https://www.gnu.org/licenses/>.
# ==============================================================================
""" Tests the DAIDE tokens"""
from enum import Enum
from diplomacy.daide.tokens import Token

class ExpectedTokens(Enum):
    """ Copy of the tokens definition from aiclient/adjudicator/TOKENS.h """
    # Source: http://www.ellought.demon.co.uk/dipai/aiclient.zip
    # Powers
    TOKEN_POWER_AUS = 0x4100
    TOKEN_POWER_ENG = 0x4101
    TOKEN_POWER_FRA = 0x4102
    TOKEN_POWER_GER = 0x4103
    TOKEN_POWER_ITA = 0x4104
    TOKEN_POWER_RUS = 0x4105
    TOKEN_POWER_TUR = 0x4106

    # Units
    TOKEN_UNIT_AMY = 0x4200
    TOKEN_UNIT_FLT = 0x4201

    # Orders
    TOKEN_ORDER_CTO = 0x4320
    TOKEN_ORDER_CVY = 0x4321
    TOKEN_ORDER_HLD = 0x4322
    TOKEN_ORDER_MTO = 0x4323
    TOKEN_ORDER_SUP = 0x4324
    TOKEN_ORDER_VIA = 0x4325
    TOKEN_ORDER_DSB = 0x4340
    TOKEN_ORDER_RTO = 0x4341
    TOKEN_ORDER_BLD = 0x4380
    TOKEN_ORDER_REM = 0x4381
    TOKEN_ORDER_WVE = 0x4382

    # Order Note
    TOKEN_ORDER_NOTE_MBV = 0x4400
    TOKEN_ORDER_NOTE_BPR = 0x4401
    TOKEN_ORDER_NOTE_CST = 0x4402
    TOKEN_ORDER_NOTE_ESC = 0x4403
    TOKEN_ORDER_NOTE_FAR = 0x4404
    TOKEN_ORDER_NOTE_HSC = 0x4405
    TOKEN_ORDER_NOTE_NAS = 0x4406
    TOKEN_ORDER_NOTE_NMB = 0x4407
    TOKEN_ORDER_NOTE_NMR = 0x4408
    TOKEN_ORDER_NOTE_NRN = 0x4409
    TOKEN_ORDER_NOTE_NRS = 0x440A
    TOKEN_ORDER_NOTE_NSA = 0x440B
    TOKEN_ORDER_NOTE_NSC = 0x440C
    TOKEN_ORDER_NOTE_NSF = 0x440D
    TOKEN_ORDER_NOTE_NSP = 0x440E
    TOKEN_ORDER_NOTE_NSU = 0x4410
    TOKEN_ORDER_NOTE_NVR = 0x4411
    TOKEN_ORDER_NOTE_NYU = 0x4412
    TOKEN_ORDER_NOTE_YSC = 0x4413

    # Results
    TOKEN_RESULT_SUC = 0x4500
    TOKEN_RESULT_BNC = 0x4501
    TOKEN_RESULT_CUT = 0x4502
    TOKEN_RESULT_DSR = 0x4503
    TOKEN_RESULT_FLD = 0x4504
    TOKEN_RESULT_NSO = 0x4505
    TOKEN_RESULT_RET = 0x4506

    # Coasts
    TOKEN_COAST_NCS = 0x4600
    TOKEN_COAST_NEC = 0x4602
    TOKEN_COAST_ECS = 0x4604
    TOKEN_COAST_SEC = 0x4606
    TOKEN_COAST_SCS = 0x4608
    TOKEN_COAST_SWC = 0x460A
    TOKEN_COAST_WCS = 0x460C
    TOKEN_COAST_NWC = 0x460E

    # Seasons
    TOKEN_SEASON_SPR = 0x4700
    TOKEN_SEASON_SUM = 0x4701
    TOKEN_SEASON_FAL = 0x4702
    TOKEN_SEASON_AUT = 0x4703
    TOKEN_SEASON_WIN = 0x4704

    # Commands
    TOKEN_COMMAND_CCD = 0x4800
    TOKEN_COMMAND_DRW = 0x4801
    TOKEN_COMMAND_FRM = 0x4802
    TOKEN_COMMAND_GOF = 0x4803
    TOKEN_COMMAND_HLO = 0x4804
    TOKEN_COMMAND_HST = 0x4805
    TOKEN_COMMAND_HUH = 0x4806
    TOKEN_COMMAND_IAM = 0x4807
    TOKEN_COMMAND_LOD = 0x4808
    TOKEN_COMMAND_MAP = 0x4809
    TOKEN_COMMAND_MDF = 0x480A
    TOKEN_COMMAND_MIS = 0x480B
    TOKEN_COMMAND_NME = 0x480C
    TOKEN_COMMAND_NOT = 0x480D
    TOKEN_COMMAND_NOW = 0x480E
    TOKEN_COMMAND_OBS = 0x480F
    TOKEN_COMMAND_OFF = 0x4810
    TOKEN_COMMAND_ORD = 0x4811
    TOKEN_COMMAND_OUT = 0x4812
    TOKEN_COMMAND_PRN = 0x4813
    TOKEN_COMMAND_REJ = 0x4814
    TOKEN_COMMAND_SCO = 0x4815
    TOKEN_COMMAND_SLO = 0x4816
    TOKEN_COMMAND_SND = 0x4817
    TOKEN_COMMAND_SUB = 0x4818
    TOKEN_COMMAND_SVE = 0x4819
    TOKEN_COMMAND_THX = 0x481A
    TOKEN_COMMAND_TME = 0x481B
    TOKEN_COMMAND_YES = 0x481C
    TOKEN_COMMAND_ADM = 0x481D
    TOKEN_COMMAND_SMR = 0x481E

    # Parameters
    TOKEN_PARAMETER_AOA = 0x4900
    TOKEN_PARAMETER_BTL = 0x4901
    TOKEN_PARAMETER_ERR = 0x4902
    TOKEN_PARAMETER_LVL = 0x4903
    TOKEN_PARAMETER_MRT = 0x4904
    TOKEN_PARAMETER_MTL = 0x4905
    TOKEN_PARAMETER_NPB = 0x4906
    TOKEN_PARAMETER_NPR = 0x4907
    TOKEN_PARAMETER_PDA = 0x4908
    TOKEN_PARAMETER_PTL = 0x4909
    TOKEN_PARAMETER_RTL = 0x490A
    TOKEN_PARAMETER_UNO = 0x490B
    TOKEN_PARAMETER_DSD = 0x490D

    # Press
    TOKEN_PRESS_ALY = 0x4A00
    TOKEN_PRESS_AND = 0x4A01
    TOKEN_PRESS_BWX = 0x4A02
    TOKEN_PRESS_DMZ = 0x4A03
    TOKEN_PRESS_ELS = 0x4A04
    TOKEN_PRESS_EXP = 0x4A05
    TOKEN_PRESS_FCT = 0x4A06
    TOKEN_PRESS_FOR = 0x4A07
    TOKEN_PRESS_FWD = 0x4A08
    TOKEN_PRESS_HOW = 0x4A09
    TOKEN_PRESS_IDK = 0x4A0A
    TOKEN_PRESS_IFF = 0x4A0B
    TOKEN_PRESS_INS = 0x4A0C
    TOKEN_PRESS_OCC = 0x4A0E
    TOKEN_PRESS_ORR = 0x4A0F
    TOKEN_PRESS_PCE = 0x4A10
    TOKEN_PRESS_POB = 0x4A11
    TOKEN_PRESS_PRP = 0x4A13
    TOKEN_PRESS_QRY = 0x4A14
    TOKEN_PRESS_SCD = 0x4A15
    TOKEN_PRESS_SRY = 0x4A16
    TOKEN_PRESS_SUG = 0x4A17
    TOKEN_PRESS_THK = 0x4A18
    TOKEN_PRESS_THN = 0x4A19
    TOKEN_PRESS_TRY = 0x4A1A
    TOKEN_PRESS_VSS = 0x4A1C
    TOKEN_PRESS_WHT = 0x4A1D
    TOKEN_PRESS_WHY = 0x4A1E
    TOKEN_PRESS_XDO = 0x4A1F
    TOKEN_PRESS_XOY = 0x4A20
    TOKEN_PRESS_YDO = 0x4A21
    TOKEN_PRESS_CHO = 0x4A22
    TOKEN_PRESS_BCC = 0x4A23
    TOKEN_PRESS_UNT = 0x4A24

    # Provinces
    TOKEN_PROVINCE_BOH = 0x5000
    TOKEN_PROVINCE_BUR = 0x5001
    TOKEN_PROVINCE_GAL = 0x5002
    TOKEN_PROVINCE_RUH = 0x5003
    TOKEN_PROVINCE_SIL = 0x5004
    TOKEN_PROVINCE_TYR = 0x5005
    TOKEN_PROVINCE_UKR = 0x5006
    TOKEN_PROVINCE_BUD = 0x5107
    TOKEN_PROVINCE_MOS = 0x5108
    TOKEN_PROVINCE_MUN = 0x5109
    TOKEN_PROVINCE_PAR = 0x510A
    TOKEN_PROVINCE_SER = 0x510B
    TOKEN_PROVINCE_VIE = 0x510C
    TOKEN_PROVINCE_WAR = 0x510D
    TOKEN_PROVINCE_ADR = 0x520E
    TOKEN_PROVINCE_AEG = 0x520F
    TOKEN_PROVINCE_BAL = 0x5210
    TOKEN_PROVINCE_BAR = 0x5211
    TOKEN_PROVINCE_BLA = 0x5212
    TOKEN_PROVINCE_EAS = 0x5213
    TOKEN_PROVINCE_ECH = 0x5214
    TOKEN_PROVINCE_GOB = 0x5215
    TOKEN_PROVINCE_GOL = 0x5216
    TOKEN_PROVINCE_HEL = 0x5217
    TOKEN_PROVINCE_ION = 0x5218
    TOKEN_PROVINCE_IRI = 0x5219
    TOKEN_PROVINCE_MAO = 0x521A
    TOKEN_PROVINCE_NAO = 0x521B
    TOKEN_PROVINCE_NTH = 0x521C
    TOKEN_PROVINCE_NWG = 0x521D
    TOKEN_PROVINCE_SKA = 0x521E
    TOKEN_PROVINCE_TYS = 0x521F
    TOKEN_PROVINCE_WES = 0x5220
    TOKEN_PROVINCE_ALB = 0x5421
    TOKEN_PROVINCE_APU = 0x5422
    TOKEN_PROVINCE_ARM = 0x5423
    TOKEN_PROVINCE_CLY = 0x5424
    TOKEN_PROVINCE_FIN = 0x5425
    TOKEN_PROVINCE_GAS = 0x5426
    TOKEN_PROVINCE_LVN = 0x5427
    TOKEN_PROVINCE_NAF = 0x5428
    TOKEN_PROVINCE_PIC = 0x5429
    TOKEN_PROVINCE_PIE = 0x542A
    TOKEN_PROVINCE_PRU = 0x542B
    TOKEN_PROVINCE_SYR = 0x542C
    TOKEN_PROVINCE_TUS = 0x542D
    TOKEN_PROVINCE_WAL = 0x542E
    TOKEN_PROVINCE_YOR = 0x542F
    TOKEN_PROVINCE_ANK = 0x5530
    TOKEN_PROVINCE_BEL = 0x5531
    TOKEN_PROVINCE_BER = 0x5532
    TOKEN_PROVINCE_BRE = 0x5533
    TOKEN_PROVINCE_CON = 0x5534
    TOKEN_PROVINCE_DEN = 0x5535
    TOKEN_PROVINCE_EDI = 0x5536
    TOKEN_PROVINCE_GRE = 0x5537
    TOKEN_PROVINCE_HOL = 0x5538
    TOKEN_PROVINCE_KIE = 0x5539
    TOKEN_PROVINCE_LON = 0x553A
    TOKEN_PROVINCE_LVP = 0x553B
    TOKEN_PROVINCE_MAR = 0x553C
    TOKEN_PROVINCE_NAP = 0x553D
    TOKEN_PROVINCE_NWY = 0x553E
    TOKEN_PROVINCE_POR = 0x553F
    TOKEN_PROVINCE_ROM = 0x5540
    TOKEN_PROVINCE_RUM = 0x5541
    TOKEN_PROVINCE_SEV = 0x5542
    TOKEN_PROVINCE_SMY = 0x5543
    TOKEN_PROVINCE_SWE = 0x5544
    TOKEN_PROVINCE_TRI = 0x5545
    TOKEN_PROVINCE_TUN = 0x5546
    TOKEN_PROVINCE_VEN = 0x5547
    TOKEN_PROVINCE_BUL = 0x5748
    TOKEN_PROVINCE_SPA = 0x5749
    TOKEN_PROVINCE_STP = 0x574A

def test_tokens():
    """ Test all tokens """
    for token in ExpectedTokens:
        token_str = token.name[-3:]
        token_bytes = token.value.to_bytes(2, byteorder='big')
        token_from_str = Token(from_str=token_str)
        token_from_bytes = Token(from_bytes=token_bytes)
        assert str(token_from_str) == token_str
        assert str(token_from_bytes) == token_str
        assert bytes(token_from_str) == token_bytes
        assert bytes(token_from_bytes) == token_bytes