o
    ÚñhF*  ã                   @   sx   d dl mZmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlZddlZddlmZ G d	d
„ d
eƒZdS )é   )ÚTestBaseÚFileCreatoré    )ÚWindowCursorÚSlidingWindowMapManagerÚStaticWindowMapManager)Úalign_to_mmap)Úrandint)ÚtimeN)Úcopyc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestMManc                 C   s  t | jdƒG}tƒ }t|ƒ}| ¡ rJ ‚| ¡ rJ ‚| ¡ dks"J ‚| |j¡}| ¡ r.J ‚| ¡ s4J ‚| 	¡ |jks=J ‚| ¡ |jksFJ ‚W d   ƒ n1 sPw   Y  t
|ƒ}| ¡ sa| ¡ scJ ‚| ¡ riJ ‚| |¡ | ¡ sv| ¡ sxJ ‚| ¡  | ¡  | ¡  t|ƒ ¡  d S )NÚcursor_testr   )r   Úk_window_test_sizer   r   Úis_validÚis_associatedÚsizeÚmake_cursorÚpathÚ	file_sizer   ÚassignÚunuse_regionÚ_destroy)ÚselfÚfcÚmanÚciÚcvÚcio© r   úH/var/www/vscode/kcb/lib/python3.10/site-packages/smmap/test/test_mman.pyÚtest_cursor   s*   õ
zTestMMan.test_cursorc           
      C   sØ  t ƒ }tƒ }||fD ]ß}| ¡ dksJ ‚| ¡ dksJ ‚d}t|tƒr%d}| ¡ |ks-J ‚| ¡ dks5J ‚| ¡ dks=J ‚| d¡ | d¡ | t	j
¡dksQJ ‚t| jdƒŠ}t |jtj¡}zs|j|fD ]R}| |¡}| ¡ |u suJ ‚| dd¡ ¡ sJ ‚| ¡ dks‡J ‚| ¡ dksJ ‚t|jdƒ}	| ¡ d d … |	 d¡dd … ks©J ‚W d   ƒ n1 s³w   Y  qft|tƒrÆ|  t|j¡ n|  t|j¡ W t |¡ nt |¡ w W d   ƒ n1 säw   Y  q
d S )Nr   éÿÿÿÿé
   Úmanager_testÚrbé   )r   r   Únum_file_handlesÚnum_open_filesÚ
isinstanceÚwindow_sizeÚmapped_memory_sizeÚmax_mapped_memory_sizeÚ_collect_lru_regionÚsysÚmaxsizer   r   ÚosÚopenr   ÚO_RDONLYr   Ú
path_or_fdÚ
use_regionr   Ú	ofs_beginr   ÚbufferÚreadÚintÚassertRaisesÚ
ValueErrorÚfdÚclose)
r   Ú	slide_manÚ
static_manr   Úwinsize_cmp_valr   r:   ÚitemÚcÚfpr   r   r   Útest_memory_manager2   sF   



(ÿ€
€í€ìzTestMMan.test_memory_managerc                 C   s˜  t | jdƒº}t|jdƒ}| ¡ }W d   ƒ n1 sw   Y  t |jtj¡}z‡d}td|jd |fft	|jd |jd |fffD ]e\}}|j|fD ]Z}t
|ƒ|jks[J ‚||d |d |d d	}	|	 |¡}
|	 ¡ dksuJ ‚|	 ¡ dks}J ‚d
}|	 ¡ d }|
 ||¡ ¡ sJ ‚|
 ¡ }| ¡ dks›J ‚|	 ¡ dks£J ‚|	 ¡ dks«J ‚|	 ¡ | ¡ ksµJ ‚|
 ¡ |ks½J ‚| ¡ dksÅJ ‚|	 ¡ r×| ¡ t|	 ¡ dƒksÖJ ‚n	| ¡ |jksàJ ‚|
 ¡ d d … ||||pï|
 ¡  … ksöJ ‚|pú|jd }|
 d|¡ ¡ sJ ‚|
 ¡ |ksJ ‚|	 ¡ dksJ ‚|
 ¡ |ks#J ‚|
 ¡ dks,J ‚|
 ¡ d d … |d |… ks=J ‚d}|j|pG|
 ¡  | }|
 ||¡ ¡ sVJ ‚|	 ¡ r€|	 ¡ dksdJ ‚|
 ¡ |k smJ ‚|
 ¡ |usvJ ‚| ¡ dksJ ‚n
|
 ¡ |jk sŠJ ‚|
 ¡ }| ¡ dks—J ‚| ¡ |
 ¡ k s¢J ‚| ¡ |jks¬J ‚|
 ¡ d d … ||||p¼|
 ¡  … ksÄJ ‚|
 ¡  |
 ¡ rÏJ ‚|	 ¡ rÝ|	 ¡ dksÝJ ‚d
}|}d}tƒ }|
j}|	 ¡ }|	 ¡ }|	j}|	j}|rd|d8 }td|jd ƒ}|	 ¡ r||ƒ ksJ ‚||ƒ ksJ ‚|
 ||p$|
 ¡ ¡ ¡ s+J ‚|
 ¡ }|
 ¡ d d … |||| … ksBJ ‚||7 }||ƒsMJ ‚||| d ƒsXJ ‚||| ƒraJ ‚|súttƒ | dƒ}tdƒ}t d||| |t!|ƒ||| | f t"j#d |
 |j|¡ ¡ r“J ‚|	 ¡ sšJ ‚|	 $¡ s¡J ‚|	 ¡ dksªJ ‚qOqEW t %|¡ nt %|¡ w W d   ƒ d S 1 sÅw   Y  d S )NÚmanager_operation_testr$   é   r   é   éd   r   é   )r)   Úmax_memory_sizeÚmax_open_handlesiˆ  Tr"   i   gü©ñÒMbP?i@B z`%s: Read %i mb of memory with %i random on cursor initialized with %s accesses in %fs (%f mb/s)
)Úfile)&r   r   r0   r   r6   r/   r1   r   r   r   Úlenr   r'   r*   r)   r3   r   ÚregionÚclient_countr&   r4   r   r5   Úofs_endr   r
   Úincludes_ofsr+   Úmax_file_handlesr	   ÚmaxÚfloatÚprintÚtyper-   ÚstderrÚcollectr;   )r   r   rA   Údatar:   Úmax_num_handlesÚmtypeÚargsr?   r   r@   Úbase_offsetr   ÚrrÚnsizeÚ	overshootÚmax_random_accessesÚnum_random_accessesÚmemory_readÚstrO   r+   rP   r*   r&   ÚcsizeÚelapsedÚmbr   r   r   Útest_memman_operation`   sº   
ÿÿ
,"
0

 &ðÿþþw$‚zTestMMan.test_memman_operationN)Ú__name__Ú
__module__Ú__qualname__r    rB   rf   r   r   r   r   r      s    .r   )Úlibr   r   Ú
smmap.mmanr   r   r   Ú
smmap.utilr   Úrandomr	   r
   r/   r-   r   r   r   r   r   r   Ú<module>   s    