AI_Diplomacy/diplomacy/daide/tests/test_tokens.py
2025-02-06 14:33:10 -08:00

268 lines
8.2 KiB
Python

# ==============================================================================
# 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