
    DLi                        d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
ej                  j                  d e e	e      j                  j                  j                               ddlmZmZmZ  G d d      Z G d d      Z G d	 d
      Zy)u(   utils/fuzzy_match.py 테스트 스위트    N)Path)fuzzy_matchlevenshtein_distancesimilarity_ratioc                   h    e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZy)TestLevenshteinDistanceu    levenshtein_distance() 테스트Nc                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}y	)
u   동일 문자열 → 거리 0hellor   ==z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)sr   py0py2py4py6py9assert %(py11)spy11N	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationself@py_assert1@py_assert3@py_assert5@py_assert8@py_assert7@py_format10@py_format12s           3/home/jay/workspace/utils/tests/test_fuzzy_match.pytest_identical_stringsz.TestLevenshteinDistance.test_identical_strings   s    $+:W:#GW5::5::::5::::::#:::#:::G:::W:::5:::::::::::    c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}y	)
u   빈 문자열 간 거리 r   r   r   r   r   r   r   Nr   r   s           r(   test_empty_stringsz*TestLevenshteinDistance.test_empty_strings   s    $&00#B+0q0+q0000+q000000#000#000B000000+000q00000000r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   한쪽이 빈 문자열abcr,      r   r   r   r   r   r   Nxyzr   r   s           r(   test_one_emptyz&TestLevenshteinDistance.test_one_empty   s1   $)323#E2.3!3.!3333.!333333#333#333E3332333.333!3333333$&33#B.3!3.!3333.!333333#333#333B333333.333!33333333r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   1자 삽입catcats   r   r   r   r   r   r   Nr   r   s           r(   test_single_insertionz-TestLevenshteinDistance.test_single_insertion"   s    $)767#E627a72a77772a777777#777#777E77767772777a77777777r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   1자 삭제r5   r4   r6   r   r   r   r   r   r   Nr   r   s           r(   test_single_deletionz,TestLevenshteinDistance.test_single_deletion&   s    $*7E7#FE27a72a77772a777777#777#777F777E7772777a77777777r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   1자 치환r4   batr6   r   r   r   r   r   r   Nr   r   s           r(   test_single_substitutionz0TestLevenshteinDistance.test_single_substitution*       $)656#E516Q61Q66661Q666666#666#666E66656661666Q66666666r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   복합 편집kittensittingr0   r   r   r   r   r   r   Nr   r   s           r(   test_complex_editz)TestLevenshteinDistance.test_complex_edit.   s    $,=i=#Hi8=A=8A====8A======#===#===H===i===8===A========r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   완전히 다른 문자열r/   r1   r0   r   r   r   r   r   r   Nr   r   s           r(   test_completely_differentz1TestLevenshteinDistance.test_completely_different2   r=   r*   c                    d}d}t        ||      }d}d}t        ||      }||k(  }|sNt        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d	x}x}x}x}x}x}}y	)
u   대칭성: d(a,b) == d(b,a)saturdaysundayr   zd%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py14)s
{%(py14)s = %(py8)s(%(py10)s, %(py12)s)
}r   r   r   r   r   py8py10py12py14assert %(py16)spy16Nr   
r    r!   r"   r#   @py_assert9@py_assert11@py_assert13r%   @py_format15@py_format17s
             r(   test_symmetryz%TestLevenshteinDistance.test_symmetry6   s|   $. 	
 	
#J9 	
	
 	
=Qj>
 	
9 >
 
 	
 	
 	
9 >
 	
 	
	6	
 	
  $ 	
 	
 		 $ 	
 	
 		 %/ 	
 	
 		 19 	
 	
 		 : 	
 	
	6	
 	
  >R 	
 	
 		 >R 	
 	
 		 	
 	
 		 !	
 	
 		>
 	
 	
 	
 	
 	
 	
 	
 	
r*   c                 \   t        dd      }t        |t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}y)	u   반환 타입은 intfoobar5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultintr   py1r   r   N)
r   rZ   r\   r   r   r   r   r   r   r   r    r[   r"   @py_format5s       r(   test_returns_intz(TestLevenshteinDistance.test_returns_int<   s    %eU3&#&&&&&&&&z&&&z&&&&&&&&&&&&&&&&&#&&&#&&&&&&&&&&r*   c                    d}d}t        ||      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   항상 비음수testtextr   >=)z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} >= %(py9)sr   r   r   r   Nr   r   s           r(   test_non_negativez)TestLevenshteinDistance.test_non_negativeA   s    $*8F8#FF38q83q88883q888888#888#888F888F8883888q88888888r*   returnN)__name__
__module____qualname____doc__r)   r-   r2   r7   r9   r<   rA   rC   rU   ra   rg    r*   r(   r   r      s<    *;14
887>7
'
9r*   r   c                   P    e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
Zy)TestSimilarityRatiou   similarity_ratio() 테스트Nc                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}y	)
u   동일 문자열 → 1.0r
         ?r   r   r   r   r   r   N	r   r   r   r   r   r   r   r   r   r   s           r(   r)   z*TestSimilarityRatio.test_identical_stringsI   s     '8818S81S88881S8888888888888888881888S88888888r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}y	)
u   둘 다 빈 문자열 → 1.0r,   rr   r   r   r   r   r   r   Nrs   r   s           r(   r-   z&TestSimilarityRatio.test_empty_stringsM   s     ".B.B'.3.'3....'3...............B...'...3........r*   c                    t        dd      }d}||k  }d}||k  }|r|st        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}}y)u/   완전히 다른 문자열 → 낮은 유사도r/   r1                 ?)<=<)%(py1)s <= %(py4)sz%(py4)s < %(py6)sratior^   r   r   assert %(py8)srI   N	r   r   r   r   r   r   r   r   r   r    r{   @py_assert0@py_assert2r#   r"   @py_format7@py_format9s           r(   rC   z-TestSimilarityRatio.test_completely_differentQ   s     .!se!!c!ec!!!!!sec!!!s!!!!!!e!!!e!!!c!!!!!!!r*   c                    t        dd      }d}||k  }d}||k  }|r|st        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}}y)u   결과는 0.0~1.0 범위r4   carrv   rr   rx   rx   rz   z%(py4)s <= %(py6)sr{   r|   r}   rI   Nr~   r   s           r(   test_range_0_to_1z%TestSimilarityRatio.test_range_0_to_1V   s     ."se""s"es"""""ses"""s""""""e"""e"""s"""""""r*   c                 h   t        dd      }d}||kD  }|st        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}}y
)u'   비슷한 문자열은 높은 유사도r
   helogffffff?)>)z%(py0)s > %(py3)sr{   r   py3assert %(py5)spy5Nrs   )r    r{   r   r!   @py_format4@py_format6s         r(   test_high_similarityz(TestSimilarityRatio.test_high_similarity[   sf     &1us{usuusr*   c                 \   t        dd      }t        |t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}y)	u   반환 타입은 floatrW   rX   rY   rZ   r[   floatr]   N)
r   rZ   r   r   r   r   r   r   r   r   r_   s       r(   test_returns_floatz&TestSimilarityRatio.test_returns_float`   s    !%/&%((((((((z(((z((((((&(((&((((((%(((%((((((((((r*   c                    d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}d}d}t        ||      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}x}}y
)u   한쪽 빈 문자열 → 0.0r
   r,   rv   r   r   r   r   r   r   Nworldrs   r   s           r(   test_one_empty_stringz)TestSimilarityRatio.test_one_empty_stringe   s1    '33,33,3333,333333333333333333,3333333333 "3G3G,33,3333,333333333333333G333,33333333333r*   c                    d}d}t        ||      }d}d}t        ||      }||k(  }|sNt        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d	x}x}x}x}x}x}}y	)
u#   대칭성: ratio(a,b) == ratio(b,a)pythontyphonr   rG   r   rH   rM   rN   Nrs   rO   s
             r(   rU   z!TestSimilarityRatio.test_symmetryj   s|    ( 	
( 	
(3 	
	
	
7Gh8
 	
3 8
 
 	
 	
 	
3 8
 	
 	
	6	
 	
    	
 	
 		   	
 	
 		 !) 	
 	
 		 +3 	
 	
 		 4 	
 	
	6	
 	
  8H 	
 	
 		 8H 	
 	
 		 	
 	
 		 	
 	
 		8
 	
 	
 	
 	
 	
 	
 	
 	
r*   rh   )rj   rk   rl   rm   r)   r-   rC   r   r   r   r   rU   rn   r*   r(   rp   rp   F   s-    &9/"
#

)
4

r*   rp   c                   x    e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZy)TestFuzzyMatchu   fuzzy_match() 테스트Nc                    t        dg d      }t        |      }d}||k\  }|st        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}||k(  }	|	st        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(  }	|	st        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}	}y)u+   정확히 일치하는 항목은 1.0 점수r
   )r
   r   rW   r6   re   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)slenresultsr   r^   r   r   r}   rI   Nr   r   z%(py0)s == %(py3)s	best_namer   r   r   rr   
best_score
r   r   r   r   r   r   r   r   r   r   )r    r   r   r#   @py_assert4r   r   r   r   r!   r   r   s               r(   test_exact_matchzTestFuzzyMatch.test_exact_matcht   s[   g'@A7| q |q    |q      s   s      7   7   |   q        '
	:##yG####yG######y###y###G#######  zS    zS      z   z   S       r*   c                 \   t        dg d      }t        |t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}|D ]x  }t        |t              }|sd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	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dz  }t        t        j                  |            d}t        |      }d}||k(  }|st        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}}|\  }
}t        |
t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}t        |t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}{ y)u&   반환 타입: list[tuple[str, float]]r4   )r4   r   r;   rY   rZ   r   listr]   Nitemtuple   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r   r}   rI   namestrscorer   )r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   )r    r   r"   r`   r   r   r#   r   r   r   r   r   s               r(   test_returns_list_of_tuplesz*TestFuzzyMatch.test_returns_list_of_tuples|   s   e%:;'4((((((((z(((z(((((('((('((((((4(((4(((((((((( 	,DdE********:***:******d***d******E***E**********t9!!9>!!!9!!!!!!3!!!3!!!!!!t!!!t!!!9!!!!!!!!!!KD%dC((((((((:(((:((((((d(((d((((((C(((C((((((((((eU++++++++:+++:++++++e+++e++++++U+++U++++++++++	,r*   c                    g d}t        d|d      }|D cg c]  \  }}|	 }}}d}||v}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }	t        t        j                  |	            dx}}yc c}}w )u   threshold 이하 결과 제외)r
   r   completely_different_xyz_abcr
   g?	thresholdr   )not in)z%(py1)s not in %(py3)snamesr^   r   r   r   N	r   r   r   r   r   r   r   r   r   )
r    
candidatesr   r   _r   r   r   r   r   s
             r(   test_threshold_filteringz'TestFuzzyMatch.test_threshold_filtering   s    G
gzSA%,-'$---:-U::::-U:::-::::::U:::U::::::: .s   Cc                    t        d      D cg c]  }d| 	 }}t        d|d      }t        |      }d}||k  }|st        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}}yc c}w )u   max_results 개수 제한   item_item_5r0   )max_resultsrx   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)sr   r   r   r}   rI   Nranger   r   r   r   r   r   r   r   r   r   	r    ir   r   r   r#   r   r   r   s	            r(   test_max_results_limitz%TestFuzzyMatch.test_max_results_limit   s    +095aaSk5
5h
B7| q |q    |q      s   s      7   7   |   q        6s   D;c                    t        dg d      }|D cg c]  \  }}|	 }}}d}t        ||      }||k(  }|s7t        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      nd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}}yc c}}w )u$   결과는 점수 내림차순 정렬r   )r   r   javaythonT)reverser   )zA%(py0)s == %(py7)s
{%(py7)s = %(py2)s(%(py3)s, reverse=%(py5)s)
}scoressorted)r   r   r   r   py7zassert %(py9)sr   N)
r   r   r   r   r   r   r   r   r   r   )
r    r   r   r   r   r   @py_assert6r!   @py_format8r&   s
             r(   test_sorted_by_score_descendingz.TestFuzzyMatch.test_sorted_by_score_descending   s    h(MN(/0HAu%0004555v55555v5555555v555v55555555555555555555555555555555 1s   E8c                 h   t        dg       }g }||k(  }|st        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}}y)	u    빈 후보 목록 → 빈 결과r
   r   r   r   r   r   r   N	r   r   r   r   r   r   r   r   r   r    r   r   r!   r   r   s         r(   test_empty_candidatesz$TestFuzzyMatch.test_empty_candidates   sf    gr*w"}w"ww"r*   c                 p   t        dg dd      }g }||k(  }|st        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}}y)u%   threshold 이상 없으면 빈 결과r
   )r1   r/   qqqg?r   r   r   r   r   r   r   Nr   r   s         r(   test_no_matches_above_thresholdz.TestFuzzyMatch.test_no_matches_above_threshold   si    g'<Lw"}w"ww"r*   c           	         t        dg d      }|D ]  \  }}d}||k  }d}||k  }|r|st        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}} y)u   모든 점수는 0.0~1.0rc   )rc   rd   testingbestrv   rr   r   r   r   r|   r}   rI   Nr   )
r    r   r   r   r   r   r#   r"   r   r   s
             r(   test_score_between_0_and_1z)TestFuzzyMatch.test_score_between_0_and_1   s    f&IJ 	'HAu&3%&&3&%3&&&&&3%3&&&3&&&&&&%&&&%&&&3&&&&&&&	'r*   c                    t        dg d      }|D cg c]  \  }}|	 }}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d	x}}y	c c}}w )
u"   기본 threshold=0.6 동작 확인	calculate)r   calculationcalc)in)z%(py1)s in %(py3)sr   r   r   r   Nr   )	r    r   r   r   r   r   r   r   r   s	            r(   test_default_thresholdz%TestFuzzyMatch.test_default_threshold   s    k+OP%,-'$--#{e####{e###{######e###e####### .s   C	c                    t        d      D cg c]	  }d|dd }}t        d|      }t        |      }d}||k  }|st        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}}yc c}w )u   기본 max_results=5 제한d   file_03dz.pyzfile_005.py   r   r   r   r   r   r}   rI   Nr   r   s	            r(   test_default_max_resultsz'TestFuzzyMatch.test_default_max_results   s    27*=QaWC(=
=mZ87| q |q    |q      s   s      7   7   |   q        >s   D;c                 &   t        dddg      }|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u1   대소문자 구별 여부 확인 (기본 동작)r
   HELLOr   r   z%(py1)s == %(py4)sr^   r   assert %(py6)sr   N)r   r   r   r   r   r   )r    results_lowerr   r"   r   r`   r   s          r(   test_case_sensitivityz$TestFuzzyMatch.test_case_sensitivity   sj    #Ggw-?@Q"-g-"g----"g---"---g-------r*   c                 `   t        dg d      }t        |t              }|sd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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d}y)	u.   부분 일치도 threshold 이상이면 포함r   )r   
calculator	calibraterY   rZ   r   r   r]   N)
r   rZ   r   r   r   r   r   r   r   r   )r    r   r"   r`   s       r(   test_partial_match_includedz*TestFuzzyMatch.test_partial_match_included   s    f&NO'4((((((((z(((z(((((('((('((((((4(((4((((((((((r*   c                 N   t        ddgd      }t        |      }d}||k(  }|st        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}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            dx}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            dx}x}}y)u   후보 1개r
   rw   r   r6   r   r   r   r   r   r}   rI   Nr   r   r   r   r   rr   r   )
r    r   r   r#   r   r   r   r   r"   r`   s
             r(   test_single_candidatez$TestFuzzyMatch.test_single_candidate   sB   gyC@7| q |q    |q      s   s      7   7   |   q       qz!}''}''''}'''}''''''''''qz!}##}####}###}##########r*   rh   )rj   rk   rl   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   r*   r(   r   r   q   sF    !!	,;!6

'$!.)$r*   r   )rm   builtinsr   _pytest.assertion.rewrite	assertionrewriter   syspathlibr   pytestpathinsertr   __file__parentutils.fuzzy_matchr   r   r   r   rp   r   rn   r*   r(   <module>r     sn    .   
   3tH~,,33::; < 19 19h(
 (
VX$ X$r*   