§
    Ëù©j«  ã                   ó2   — d Z ddlZddlmZmZmZ d„ Zd„ ZdS )uk  
Unit Tests for Vertical Column-Major Inventory Packer (Doc 63 SSoT)
===================================================================
Kiá»ƒm thá»­ thuáº­t toÃ¡n sáº¯p xáº¿p tÃºi Ä‘á»“ vÃ  rÆ°Æ¡ng Ä‘á»“ theo chiá»�u dá»�c:
- Gom toÃ n bá»™ Ä‘á»“ nhá»� 1x1 sang cÃ¡c cá»™t ngoÃ i cÃ¹ng bÃªn pháº£i (Cá»™t 11 -> 10...).
- Dá»“n cÃ¡c trang bá»‹ lá»›n (2x4, 2x3, 2x2) theo cÃ¡c cá»™t dá»�c bÃªn trÃ¡i (Cá»™t 0 -> 1...).
- Chá»©ng minh loáº¡i bá»� triá»‡t Ä‘á»ƒ hiá»‡n tÆ°á»£ng phÃ¢n máº£nh khÃ´ng gian (Fragmentation),
  báº£o toÃ n khá»‘i chá»¯ nháº­t trá»‘ng cÃ³ chiá»�u cao 4-5 Ã´ cho trang bá»‹ kÃ­ch thÆ°á»›c lá»›n.
é    N)ÚVerticalInventoryPackerÚInventoryItemSlotÚItemDimensionc                  óv  — t          dd¬¦  «        } t          dddddd¬	¦  «        t          d
ddddd¬	¦  «        t          dddddd¬	¦  «        t          dddddd¬	¦  «        t          dddddd¬	¦  «        g}|                      |¦  «        }t          |¦  «        dk    sJ ‚i }|D ]}|j        |j        f||j        <   Œ|D ]}|j        |j        f||j        <   Œ|d         \  }}|dk    sJ ‚|dk    sJ ‚|d
         \  }}	|dk    sJ ‚|	dk    sJ ‚dD ]&}
||
         \  }}|dk    sJ ‚d|cxk    rdk     sn J ‚Œ'dS )uq   Kiá»ƒm tra viá»‡c sáº¯p xáº¿p: Ä‘á»“ lá»›n dá»“n sang trÃ¡i, Ä‘á»“ 1x1 dá»“n sang cá»™t ngoÃ i cÃ¹ng bÃªn pháº£i.é   é   ©ÚcolsÚrowsÚstaff_1zCrescent Quarterstaffr   é   é   ©Úitem_idÚnameÚcolÚrowÚwidthÚheightÚarmour_1zExpert Vaal Cuirassé   é   é   Úorb_1z
Divine OrbÚorb_2ú	Chaos OrbÚorb_3zExalted Orb)r   r   r   é   N)	r   r   Úplan_vertical_sortÚlenr   r   r   Úto_colÚto_row)ÚpackerÚitemsÚactionsÚfinal_positionsÚitÚactÚ	staff_colÚ	staff_rowÚ
armour_colÚ
armour_rowÚorb_idÚorb_colÚorb_rows                ú3C:\Projects\AutoPOE2\tests\test_inventory_sorter.pyÚ&test_vertical_inventory_packing_layoutr1      sÛ  € å$¨"°1Ð5Ñ5Ô5€Fõ 	 )Ð2IÈqÐVWÐ_`ÐijÐkÑkÔkÝ *Ð3HÈaÐUVÐ^_ÐhiÐjÑjÔjÝ '°À!ÈÐRSÐ\]Ð^Ñ^Ô^Ý '°ÀÈÐQRÐ[\Ð]Ñ]Ô]Ý '°À1È!ÐSTÐ]^Ð_Ñ_Ô_ð€Eð ×'Ò'¨Ñ.Ô.€GÝˆw‰<Œ<˜!ÒÐÐÐð €OØð 7ð 7ˆØ')¤v¨r¬vÐ&6ˆ˜œ
Ñ#Ð#Øð @ð @ˆØ(+¬
°C´JÐ'?ˆ˜œÑ$Ð$ð +¨9Ô5Ñ€IˆyØ˜Š>ˆ>ˆ>ˆ>Ø˜Š>ˆ>ˆ>ˆ>ð -¨ZÔ8Ñ€J�
Ø˜Š?ˆ?ˆ?ˆ?Ø˜Š?ˆ?ˆ?ˆ?ð .ð  ð  ˆØ*¨6Ô2Ñˆ�Ø˜"Š}ˆ}ˆ}ˆ}Ø�GÐÐÒÐ˜aÒÐÐÐÐÐÐð ð  ó    c                  ó’  — t          dd¬¦  «        } d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }|D ]}d||j                 |j        <   Œ|                      |¦  «        }d„ |D ¦   «         }t          |¦  «        d	k    sJ ‚|                      |¦  «        }d
„ |D ¦   «         }|D ]}|j        |j        f||j	        <   Œd„ t          d¦  «        D ¦   «         }	| 
                    ¦   «         D ]\  }
\  }}d|	|         |<   Œ|                      |	¦  «        }d„ |D ¦   «         }t          |¦  «        d	k    sJ ‚dS )ub   Chá»©ng minh thuáº­t toÃ¡n giá»¯ Ä‘Æ°á»£c khá»‘i trá»‘ng 2x4 liÃªn tá»¥c cho vÅ© khÃ­ tiáº¿p theo.r   r   r	   c           
      ó>   — g | ]}t          d |› �d|ddd¬¦  «        ‘ŒS )Úorb_r   r   r   r   )r   )Ú.0Úis     r0   ú
<listcomp>zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>C   sE   € ð ð ð àõ 	 *¨ * *°;ÀAÈ1ÐTUÐ^_Ð`Ñ`Ô`ðð ð r2   r   c                 ó@   — g | ]}d „ t          d¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS ©F© ©r6   Ú_s     r0   r8   zQtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>.<listcomp>I   s   € Ð-Ð-Ð-˜a�EÐ-Ð-Ð-r2   r   ©Úranger=   s     r0   r8   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>I   s-   € Ð@Ð@Ð@°!Ð-Ð-¥5¨¡9¤9Ð-Ñ-Ô-Ð@Ð@Ð@r2   Tc                 óZ   — g | ](}|d          d k    ¯|d         dk    ¯|d         dk     ¯&|‘Œ)S ©r   r   r   r   é   r<   ©r6   Úbs     r0   r8   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>O   sB   € ÐYÐYÐY˜a°A°a´D¸A²I°IÀ!ÀAÄ$È!Â)À)ÐPQÐRSÔPTÐWXÒPXÐPX˜ÐPXÐPXÐPXr2   r   c                 ó6   — i | ]}|j         |j        |j        f“ŒS r<   )r   r   r   )r6   r'   s     r0   ú
<dictcomp>zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<dictcomp>T   s%   € ÐDÐDÐD¸�r”z B¤F¨B¬FÐ#3ÐDÐDÐDr2   c                 ó@   — g | ]}d „ t          d¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS r;   r<   r=   s     r0   r8   zQtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>.<listcomp>X   s   € Ð,Ð,Ð,˜Q�5Ð,Ð,Ð,r2   r   r?   r=   s     r0   r8   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>X   s-   € Ð?Ð?Ð?°Ð,Ð,¥%¨¡)¤)Ð,Ñ,Ô,Ð?Ð?Ð?r2   c                 óZ   — g | ](}|d          d k    ¯|d         dk    ¯|d         dk     ¯&|‘Œ)S rB   r<   rD   s     r0   r8   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>^   s;   € ÐWÐWÐW˜Q°!°A´$¸!²)°)ÀÀ!ÄÈÂ	À	ÈaÐPQÌdÐUVÊhÈh�qÈhÈhÈhr2   N)r   r@   r   r   Úcalculate_free_blocksr    r   r!   r"   r   r$   )r#   r$   Úgrid_beforer'   Úblocks_beforeÚvalid_2x4_beforer%   r&   r(   Ú
grid_afterr   ÚcÚrÚblocks_afterÚvalid_2x4_afters                  r0   Ú2test_vertical_packing_prevents_space_fragmentationrT   >   s¡  € å$¨"°1Ð5Ñ5Ô5€Fðð å�q‘”ðñ ô €Eð AÐ@µu¸Q±x´xÐ@Ñ@Ô@€KØð +ð +ˆØ&*ˆ�B”FÔ˜BœFÑ#Ð#à×0Ò0°Ñ=Ô=€MàYÐY =ÐYÑYÔYÐÝÐÑ Ô  AÒ%Ð%Ð%Ð%ð ×'Ò'¨Ñ.Ô.€GØDÐD¸eÐDÑDÔD€OØð @ð @ˆØ(+¬
°C´JÐ'?ˆ˜œÑ$Ð$à?Ð?µe¸A±h´hÐ?Ñ?Ô?€JØ*×0Ò0Ñ2Ô2ð  ð  ‰ˆ‘�!�QØˆ
�1Œ�aÑÐð ×/Ò/°
Ñ;Ô;€LØWÐW ,ÐWÑWÔW€Oõ ˆÑÔ !Ò#Ð#Ð#Ð#Ð#Ð#r2   )Ú__doc__ÚpytestÚ#src.assistant_tool.inventory_sorterr   r   r   r1   rT   r<   r2   r0   ú<module>rX      su   ððð ð €€€ðð ð ð ð ð ð ð ð ð ð( ð ( ð ( ðV#$ð #$ð #$ð #$ð #$r2   