§
    Ëù©j«  ã                   óL   — 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 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                  ó  — 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òt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}i }|D ]}	|	j        |	j        f||	j        <   Œ|D ]}
|
j        |
j        f||
j        <   Œ|d         \  }}d}||k    }|s—t	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        d œz  }d!d"|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d}||k    }|s—t	          j        d|fd||f¦  «        d#t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd#t	          j	        |¦  «        d œz  }d!d"|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}|d
         \  }}d}||k    }|s—t	          j        d|fd||f¦  «        d$t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd$t	          j	        |¦  «        d œz  }d!d"|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d}||k    }|s—t	          j        d|fd||f¦  «        d%t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd%t	          j	        |¦  «        d œz  }d!d"|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d&D �]{}||         \  }}d'}||k    }|s—t	          j        d|fd||f¦  «        d(t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd(t	          j	        |¦  «        d œz  }d!d"|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d}||k    }d}||k     }|r|s¬t	          j        d)||fd*|||f¦  «        t	          j	        |¦  «        d+t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd+t	          j	        |¦  «        d,œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}}�Œ}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©ú>©z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sÚlenÚactions©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8N©ú==)z%(py0)s == %(py3)sÚ	staff_col)r$   r&   zassert %(py5)sÚpy5Ú	staff_rowÚ
armour_colÚ
armour_row)r   r   r   é   Úorb_col)ú<=ú<)z%(py1)s <= %(py4)sz%(py4)s < %(py6)sÚorb_row)r%   Úpy4r'   )r   r   Úplan_vertical_sortr!   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   r   r   Úto_colÚto_row)ÚpackerÚitemsr"   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9Úfinal_positionsÚitÚactr,   r.   Ú@py_assert1Ú@py_format4Ú@py_format6r/   r0   Úorb_idr2   r5   Ú@py_assert0Ú@py_assert3s                          ú3C:\Projects\AutoPOE2\tests\test_inventory_sorter.pyÚ&test_vertical_inventory_packing_layoutrS      s4  € å$¨"°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‰<Œ<Ð˜!Ðˆ<˜!ÒÐÐÐÕÔÐÐÐÐˆ<˜!ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔˆ<ÑÔÕÔ˜!ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐð €OØð 7ð 7ˆØ')¤v¨r¬vÐ&6ˆ˜œ
Ñ#Ð#Øð @ð @ˆØ(+¬
°C´JÐ'?ˆ˜œÑ$Ð$ð +¨9Ô5Ñ€IˆyØÐˆ9˜Š>ÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ9ÑÔÐÕÔˆ9ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ9˜Š>ÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ9ÑÔÐÕÔˆ9ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð -¨ZÔ8Ñ€J�
ØÐˆ:˜Š?ÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ:ÑÔÐÕÔˆ:ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ:˜Š?ÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ:ÑÔÐÕÔˆ:ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð .ð  ñ  ˆØ*¨6Ô2Ñˆ�ØÐˆw˜"Š}ÐÐÐÕÔÐÐÐÐˆw˜"ÐÑÔÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔ˜"ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆq�GÒÐ˜aÐ�G˜aÒÐÐÐÐÐÕÔÐÐÐÐÐˆq�G˜aÐÑÔÕÔˆqÑÔÐÕÔÑÔÐÐÕÔ�GÑÔÐÕÔ�GÑÔÐÐÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐÑð ð  ó    c                  ó‚  — t          dd¬¦  «        } d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }|D ]}d||j                 |j        <   Œ|                      |¦  «        }d„ |D ¦   «         }t          |¦  «        }d	}||k    }|sòt          j        d
|fd||f¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}|                      |¦  «        }d„ |D ¦   «         }|D ]}|j        |j        f||j        <   Œd„ t          d¦  «        D ¦   «         }|                     ¦   «         D ]\  }\  }}d||         |<   Œ|                      |¦  «        }d„ |D ¦   «         }t          |¦  «        }d	}||k    }|sòt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}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     rR   ú
<listcomp>zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>C   sE   € ð ð ð àõ 	 *¨ * *°;ÀAÈ1ÐTUÐ^_Ð`Ñ`Ô`ðð ð rT   r   c                 ó@   — g | ]}d „ t          d¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS ©F© ©rX   Ú_s     rR   rZ   zQtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>.<listcomp>I   s   € Ð-Ð-Ð-˜a�EÐ-Ð-Ð-rT   r   ©Úranger_   s     rR   rZ   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>I   s-   € Ð@Ð@Ð@°!Ð-Ð-¥5¨¡9¤9Ð-Ñ-Ô-Ð@Ð@Ð@rT   Tc                 óZ   — g | ](}|d          d k    ¯|d         dk    ¯|d         dk     ¯&|‘Œ)S ©r   r   r   r   é   r^   ©rX   Úbs     rR   rZ   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ÐPXrT   r   r*   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr!   Úvalid_2x4_beforer#   r(   r)   Nc                 ó6   — i | ]}|j         |j        |j        f“ŒS r^   )r   r   r   )rX   rJ   s     rR   ú
<dictcomp>zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<dictcomp>T   s%   € ÐDÐDÐD¸�r”z B¤F¨B¬FÐ#3ÐDÐDÐDrT   c                 ó@   — g | ]}d „ t          d¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS r]   r^   r_   s     rR   rZ   zQtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>.<listcomp>X   s   € Ð,Ð,Ð,˜Q�5Ð,Ð,Ð,rT   r   ra   r_   s     rR   rZ   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>X   s-   € Ð?Ð?Ð?°Ð,Ð,¥%¨¡)¤)Ð,Ñ,Ô,Ð?Ð?Ð?rT   c                 óZ   — g | ](}|d          d k    ¯|d         dk    ¯|d         dk     ¯&|‘Œ)S rd   r^   rf   s     rR   rZ   zFtest_vertical_packing_prevents_space_fragmentation.<locals>.<listcomp>^   s;   € ÐWÐWÐW˜Q°!°A´$¸!²)°)ÀÀ!ÄÈÂ	À	ÈaÐPQÌdÐUVÊhÈh�qÈhÈhÈhrT   r   r    Úvalid_2x4_after)r   rb   r   r   Úcalculate_free_blocksr!   r8   r9   r:   r;   r<   r=   r>   r?   r7   r@   rA   r   rC   )rB   rC   Úgrid_beforerJ   Úblocks_beforerh   rD   rE   rF   rG   rH   r"   rI   rK   Ú
grid_afterr   ÚcÚrÚblocks_afterrn   s                       rR   Ú2test_vertical_packing_prevents_space_fragmentationrv   >   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Ð%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�3Ñ%Ô%Ð%Õ%Ô%�3Ñ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ÐÑ%Ô%Ð%Õ%Ô%ÐÑ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% 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õ ˆÑÔÐ# !Ð#Ð !Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#Ð !Ð#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�3Ñ#Ô#Ð#Õ#Ô#�3Ñ#Ô#Ð#Ð#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆÑ#Ô#Ð#Õ#Ô#ˆÑ#Ô#Ð#Ð#Õ#Ô#ÐÑ#Ô#Õ#Ô# !Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#rT   )Ú__doc__Úbuiltinsr:   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter8   ÚpytestÚ#src.assistant_tool.inventory_sorterr   r   r   rS   rv   r^   rT   rR   ú<module>r~      s�   ððð ð € € € € € € € € € € € € €€€€ðð ð ð ð ð ð ð ð ð ð( ð ( ð ( ðV#$ð #$ð #$ð #$ð #$rT   