§
    0s»j‘  ã                   ó    — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZmZmZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )z«
Unit tests for FreeExile Item Crafting Engine & Affix / Suffix Matrix.
Validates Path of Exile 2 style deterministic and stochastic currency crafting with Primal Stones.
é    N)ÚItemCraftingEngineÚ
ItemRarityÚCraftingItemÚ	AffixTypeÚAffixModÚSpiritStoneCurrencyc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestItemCraftingEnginec                 ó,   — t          ¦   «         | _        d S )N)r   Úengine)Úselfs    ú6C:\Projects\FreeExile\tests\unit\test_item_crafting.pyÚsetUpzTestItemCraftingEngine.setUp   s   € Ý(Ñ*Ô*ˆŒˆˆó    c                 óœ  — t          dddt          j        ¬¦  «        }| j                             |t
          j        ¦  «        \  }}}|                      ||¦  «         |                      |j	        t          j
        ¦  «         |                      dt          |j        ¦  «        t          |j        ¦  «        z   cxk    odk    nc ¦  «         d S )NÚbase_sword_001u   Thanh Phong Kiáº¿m PhÃ´iéK   ©Ú	item_uuidÚ	base_nameÚ
item_levelÚrarityé   é   )r   r   ÚNORMALr   Úapply_currencyr   ÚKHAI_LINH_CHAUÚ
assertTrueÚassertEqualr   ÚMAGICÚlenÚprefixesÚsuffixes)r   ÚitemÚsuccessÚmsgÚmodified_items        r   Útest_transmute_normal_to_magicz5TestItemCraftingEngine.test_transmute_normal_to_magic   sÉ   € ÝØ&Ø0ØÝÔ$ð	
ñ 
ô 
ˆð '+¤k×&@Ò&@ÀÕGZÔGiÑ&jÔ&jÑ#ˆ��mØ�Š˜ Ñ%Ô%Ð%Ø×Ò˜Ô-­zÔ/?Ñ@Ô@Ð@Ø�Š˜�S Ô!7Ñ8Ô8½3¸}Ô?UÑ;VÔ;VÑVÐ[Ð[Ò[Ð[ÐZ[Ò[Ð[Ð[Ð[Ñ\Ô\Ð\Ð\Ð\r   c           	      ó€  — t          dddt          j        ¬¦  «        }|j                             t          ddt          j        dd¬	¦  «        ¦  «         |j                             t          d
dt          j	        dd¬	¦  «        ¦  «         | j
                             |t          j        ¦  «        \  }}}|                      ||¦  «         |                      |j        t          j        ¦  «         t#          |j        ¦  «        t#          |j        ¦  «        z   }|                      d|cxk    odk    nc d|› �¦  «         d S )NÚrare_blade_001u   Liá»‡t Diá»…m Cuá»“ng Ä�aoéP   r   Úphys_dmg_pctu   TÄƒng SÃ¡t ThÆ°Æ¡ng Váº­t LÃ½r   éx   ©Úmod_idÚmod_nameÚmod_typeÚtierÚvalueÚcrit_chanceu   Tá»‰ Lá»‡ Báº¡o KÃ­ché#   é   é   zExpected 3-6 mods, got )r   r   ÚRAREr"   Úappendr   r   ÚPREFIXr#   ÚSUFFIXr   r   r   ÚHON_NGUYEN_THACHr   r   r   r!   )r   r$   r%   r&   Úrerolled_itemÚ
total_modss         r   Útest_chaos_reroll_rare_itemz2TestItemCraftingEngine.test_chaos_reroll_rare_item"   sj  € åØ&Ø2ØÝ”?ð	
ñ 
ô 
ˆð 	Œ×Ò�X¨^ÐFeÕpyô  qAð  HIð  QTð  Uñ  Uô  Uñ  	Vô  	Vð  	VØŒ×Ò�X¨]ÐE\ÕgpÔgwÐ~ð  HJð  Kñ  Kô  Kñ  	Lô  	Lð  	Là&*¤k×&@Ò&@ÀÕGZÔGkÑ&lÔ&lÑ#ˆ��mØ�Š˜ Ñ%Ô%Ð%Ø×Ò˜Ô-­z¬Ñ?Ô?Ð?Ý˜Ô/Ñ0Ô0µ3°}Ô7MÑ3NÔ3NÑNˆ
Ø�Š˜˜ZÐ,Ð,Ò,Ð,¨1Ò,Ð,Ð,Ð,Ð.TÈ
Ð.TÐ.TÑUÔUÐUÐUÐUr   c           	      ól  — t          dddt          j        ¬¦  «        }|j                             t          ddt          j        dd¬	¦  «        ¦  «         |j                             t          d
dt          j	        dd¬	¦  «        ¦  «         t          |j        ¦  «        t          |j        ¦  «        z   }| j                             |t          j        ¦  «        \  }}}|                      ||¦  «         t          |j        ¦  «        t          |j        ¦  «        z   }|                      ||dz   ¦  «         d S )NÚrare_armor_001u   ThiÃªn Táº±m KhÃ­ CÃ´ng GiÃ¡péR   r   Úmax_lifeu   Sinh Lá»±c Tá»‘i Ä�ar   én   r.   Úfire_resu   KhÃ¡ng Há»�aé-   )r   r   r8   r"   r9   r   r   r:   r#   r;   r!   r   r   r   ÚTHIEN_MENH_DANr   r   )r   r$   Úinitial_mod_countr%   r&   Úexalted_itemÚnew_mod_counts          r   Ú!test_exalt_adds_new_affix_to_rarez8TestItemCraftingEngine.test_exalt_adds_new_affix_to_rare4   s2  € ÝØ&Ø5ØÝ”?ð	
ñ 
ô 
ˆð 	Œ×Ò�X¨ZÐBXÕclÔcsÐz{ð  DGð  Hñ  Hô  Hñ  	Iô  	Ið  	IØŒ×Ò�X¨ZÀ.Õ[dÔ[kÐrsÐ{}Ð~Ñ~Ô~ÑÔÐå ¤Ñ.Ô.µ°T´]Ñ1CÔ1CÑCÐØ%)¤[×%?Ò%?ÀÕFYÔFhÑ%iÔ%iÑ"ˆ��lØ�Š˜ Ñ%Ô%Ð%Ý˜LÔ1Ñ2Ô2µS¸Ô9NÑ5OÔ5OÑOˆØ×Ò˜Ð(9¸AÑ(=Ñ>Ô>Ð>Ð>Ð>r   c           
      ó   — t          dddt          j        ¬¦  «        }t          d¦  «        D ]>}|j                             t          d|› �d|› �t          j        dd	¬
¦  «        ¦  «         Œ?t          d¦  «        D ]>}|j	                             t          d|› �d|› �t          j
        dd¬
¦  «        ¦  «         Œ?| j                             |t          j        ¦  «        \  }}}|                      |¦  «         |                      d|¦  «         d S )NÚfull_mod_ringu   ThÃ¡i HÆ° Giá»›i Chá»‰éU   r   r6   Úp_zPrefix r   é2   r.   Ús_zSuffix é   ÚAFFIXES_FULL)r   r   r8   Úranger"   r9   r   r   r:   r#   r;   r   r   r   rG   ÚassertFalseÚassertIn)r   r$   Úir%   r&   Ú_s         r   Ú(test_exalt_rejects_when_affixes_are_fullz?TestItemCraftingEngine.test_exalt_rejects_when_affixes_are_fullD   s7  € ÝØ%Ø.ØÝ”?ð	
ñ 
ô 
ˆõ �q‘”ð 	Að 	AˆAØŒM× Ò ¥°°a°°ÀMÈaÀMÀMÕ\eÔ\lÐstÐ|~Ð!Ñ!Ô!ñ  Aô  Að  Að  Aå�q‘”ð 	Að 	AˆAØŒM× Ò ¥°°a°°ÀMÈaÀMÀMÕ\eÔ\lÐstÐ|~Ð!Ñ!Ô!ñ  Aô  Að  Að  Aàœ+×4Ò4°TÕ;NÔ;]Ñ^Ô^‰ˆ��aØ×Ò˜Ñ!Ô!Ð!Ø�Š�n cÑ*Ô*Ð*Ð*Ð*r   c           	      ó|  — t          dddt          j        ¬¦  «        }|j                             t          ddt          j        dd¬	¦  «        ¦  «         |j                             t          d
dt          j        dd¬	¦  «        ¦  «         |j                             t          ddt          j	        dd¬	¦  «        ¦  «         | j
                             |t          j        ¦  «        \  }}}|                      ||¦  «         |                      t!          |j        ¦  «        t!          |j        ¦  «        z   d¦  «         d S )NÚannul_target_amuletu   BÃ¡t QuÃ¡i Há»™ ThÃ¢n PhÃ¹éT   r   Úp1u   TÄƒng KhÃ­ Huyáº¿tr   r+   r.   Úp2u   XuyÃªn GiÃ¡pé   Ús1u   Tá»‘c Ä�á»™ Di Chuyá»ƒné   r   )r   r   r8   r"   r9   r   r   r:   r#   r;   r   r   r   ÚTHAN_TUONG_PHUr   r   r!   )r   r$   r%   r&   Úannulled_items        r   Ú&test_annul_removes_single_random_affixz=TestItemCraftingEngine.test_annul_removes_single_random_affixV   s9  € ÝØ+Ø2ØÝ”?ð	
ñ 
ô 
ˆð 	Œ×Ò�X¨TÐ<PÕ[dÔ[kÐrsÐ{}Ð~Ñ~Ô~ÑÔÐØŒ×Ò�X¨T¸NÕU^ÔUeÐlmÐuwÐxÑxÔxÑyÔyÐyØŒ×Ò�X¨TÐ<UÕ`iÔ`pÐwxð  ACð  Dñ  Dô  Dñ  	Eô  	Eð  	Eà&*¤k×&@Ò&@ÀÕGZÔGiÑ&jÔ&jÑ#ˆ��mØ�Š˜ Ñ%Ô%Ð%Ø×Ò�˜]Ô3Ñ4Ô4µs¸=Ô;QÑ7RÔ7RÑRÐTUÑVÔVÐVÐVÐVr   c           	      óf  — t          dddt          j        ¬¦  «        }|j                             t          ddt          j        dd¬	¦  «        ¦  «         |j                             t          d
dt          j	        dd¬	¦  «        ¦  «         | j
                             |t          j        ¦  «        \  }}}|                      ||¦  «         |                      |j        ¦  «         |                      |j        |j        ¦  «         |                      |j        |j        ¦  «         |                      t)          |j        ¦  «        t)          |j        ¦  «        ¦  «         | j
                             |t          j        ¦  «        \  }}}|                      |¦  «         |                      d|¦  «         d S )NÚgod_tier_swordu   Cá»­u TiÃªu Long NgÃ¢m Kiáº¿méd   r   r]   u   BÃ¡ Ä�áº¡o SÃ¡t ThÆ°Æ¡ngr   éú   r.   r`   u!   Tá»‘c Ä�á»™ Ä�Ã¡nh Ä�iÃªn Cuá»“ngrP   ÚCANNOT_MODIFY_MIRRORED_ITEM)r   r   r8   r"   r9   r   r   r:   r#   r;   r   r   r   ÚTHAI_HU_CAN_KHON_KINHr   Úis_mirroredÚassertNotEqualr   r   r   r!   r<   rU   rV   )r   Úoriginalr%   r&   Úmirrored_copyrX   s         r   Ú%test_mirror_creates_immutable_replicaz<TestItemCraftingEngine.test_mirror_creates_immutable_replicae   s¹  € ÝØ&Ø5ØÝ”?ð	
ñ 
ô 
ˆð 	Ô× Ò ¥°Ð@ZÕenÔeuÐ|}ð  FIð  "Jñ  "Jô  "Jñ  	Kô  	Kð  	KØÔ× Ò ¥°Ð@cÕnwÔn~ð  FGð  OQð  "Rñ  "Rô  "Rñ  	Sô  	Sð  	Sà&*¤k×&@Ò&@ÀÕK^ÔKtÑ&uÔ&uÑ#ˆ��mØ�Š˜ Ñ%Ô%Ð%Ø�Š˜Ô1Ñ2Ô2Ð2Ø×Ò˜MÔ3°XÔ5GÑHÔHÐHØ×Ò˜Ô0°(Ô2DÑEÔEÐEØ×Ò�˜]Ô3Ñ4Ô4µc¸(Ô:KÑ6LÔ6LÑMÔMÐMð œ+×4Ò4°]ÕDWÔDhÑiÔi‰ˆ��aØ×Ò˜Ñ!Ô!Ð!Ø�ŠÐ3°SÑ9Ô9Ð9Ð9Ð9r   N)
Ú__name__Ú
__module__Ú__qualname__r   r(   r?   rK   rY   rd   ro   © r   r   r
   r
      s†   € € € € € ð+ð +ð +ð]ð ]ð ]ðVð Vð Vð$?ð ?ð ?ð +ð +ð +ð$Wð Wð Wð:ð :ð :ð :ð :r   r
   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚ!server.world.item_crafting_enginer   r   r   r   r   r   ÚTestCaser
   rp   Úmainrs   r   r   ú<module>r€      sà   ððð ð
 € € € € € € € € € € € € €€€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðh:ð h:ð h:ð h:ð h:˜XÔ.ñ h:ô h:ð h:ðV ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   