
    MiA'                        d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
m
Z
m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  ed      Zdee   defd	Z	 	 	 	 dd
edededededefdZ G d d      Z G d d      Z G d d      Z  G d d      Z!y)u,   utils/insights_engine.py 테스트 스위트    N)datetime	timedelta)Path)InsightsEngineInsightsSummaryz+/home/jay/workspace/memory/task-timers.jsontasksreturnc                 ^    t        j                  d| D ci c]  }|d   |
 c}i      S c c}w )u+   테스트용 task-timers.json 내용 생성r   task_id)jsondumps)r   ts     7/home/jay/workspace/utils/tests/test_insights_engine.pymake_task_timersr      s,    ::w% @Q9q @ABB @s   *
r   team_idstatusduration_secondsdays_agoc                     t        j                         t        |      z
  }|t        |      z
  }| ||  d|j                         |j                         ||t	        |dz         ddS )Ndays)secondsu    설명<   u   분)r   r   description
start_timeend_timer   r   duration_human)r   nowr   	isoformatint)r   r   r   r   r   end_dtstart_dts          r   
_make_taskr#      sw     \\^iX66F	*:;;H!'*((*$$&, !12!567s;	 	    c                       e Zd ZdZddZy)TestInsightsSummaryu*   InsightsSummary dataclass 구조 테스트Nc           
      	   t        ddddddiddd	      }|j                  }d}||k(  }|st        j                  d
|fd||f      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}}|j                  }d}||k(  }|st        j                  d
|fd||f      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}}|j                  }d}||k(  }|st        j                  d
|fd||f      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}}|j                  }d}||k(  }|st        j                  d
|fd||f      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}}|j                  }ddi}||k(  }|st        j                  d
|fd||f      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}}|j                  }ddd}||k(  }|st        j                  d
|fd||f      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)u   필수 필드 존재 확인
      g      @g?	dev1-team      )	completedrunning)total_taskscompleted_tasksavg_duration_minutestotal_estimated_costtasks_by_teamtasks_by_status==z3%(py2)s
{%(py2)s = %(py0)s.total_tasks
} == %(py5)sspy0py2py5assert %(py7)spy7Nz7%(py2)s
{%(py2)s = %(py0)s.completed_tasks
} == %(py5)s)z<%(py2)s
{%(py2)s = %(py0)s.avg_duration_minutes
} == %(py5)s)z<%(py2)s
{%(py2)s = %(py0)s.total_estimated_cost
} == %(py5)s)z5%(py2)s
{%(py2)s = %(py0)s.tasks_by_team
} == %(py5)s)z7%(py2)s
{%(py2)s = %(py0)s.tasks_by_status
} == %(py5)s)r   r/   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr0   r1   r2   r3   r4   )selfr8   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s          r   test_fields_existz%TestInsightsSummary.test_fields_exist0   s   !$!%&**+:
 }}""}""""}""""""q"""q"""}""""""""""  %A% A%%%% A%%%%%%q%%%q%%% %%%A%%%%%%%%%,,%,,,,%,,,,,,q,,,q,,,%,,,,,,,,,,%%--%----%------q---q---%----------2;"22"22222"2222222q222q222222"22222222  B!$BB $BBBBB $BBBBBBBqBBBqBBB BBB$BBBBBBBBr$   r	   N)__name__
__module____qualname____doc__rN    r$   r   r&   r&   -   s    4Cr$   r&   c                   8    e Zd ZdZdeddfdZdeddfdZddZy)	TestInsightsEngineInitu"   InsightsEngine 초기화 테스트tmp_pathr	   Nc                    t        t        d      g      }|dz  }|j                  |       t        |      }d}||u}|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   유효한 경로로 초기화t1task-timers.jsonNis notz%(py0)s is not %(py3)senginer:   py3assert %(py5)sr<   )r   r#   
write_textr   r@   rA   rB   rC   rD   rE   rF   rG   	rH   rW   datapr^   @py_assert2rI   @py_format4rL   s	            r   test_init_with_valid_pathz0TestInsightsEngineInit.test_init_with_valid_pathE   s    D!1 23))	T"!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!r$   c                    t        t        d      g      }|dz  }|j                  |       t        t	        |            }d}||u}|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   문자열 경로로 초기화rY   rZ   Nr[   r]   r^   r_   ra   r<   )r   r#   rb   r   strr@   rA   rB   rC   rD   rE   rF   rG   rc   s	            r   test_init_with_string_pathz1TestInsightsEngineInit.test_init_with_string_pathM   s    D!1 23))	TA'!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!r$   c                 d   t        d      }d}||u}|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)	uI   존재하지 않는 경로도 초기화는 성공 (로드 시 빈 결과)/nonexistent/task-timers.jsonNr[   r]   r^   r_   ra   r<   )	r   r@   rA   rB   rC   rD   rE   rF   rG   )rH   r^   rf   rI   rg   rL   s         r   test_init_nonexistent_path_okz4TestInsightsEngineInit.test_init_nonexistent_path_okU   sf     ?@!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!r$   rO   )rP   rQ   rR   rS   r   rh   rk   rn   rT   r$   r   rV   rV   B   s0    ,"$ "4 ""4 "D ""r$   rV   c                       e Zd ZdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfd	Z	deddfd
Z
deddfdZdeddfdZddZdeddfdZddZy)TestGetSummaryu   get_summary() 테스트rW   r	   Nc                    t        d      t        d      g}|dz  }|j                  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   InsightsSummary 반환rY   t2rZ      r   5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr   r:   py1r;   py4N)r#   rb   r   r   get_summaryru   r   rB   rC   r@   rD   rE   rF   rG   )rH   rW   r   re   r^   rv   rK   @py_format5s           r   test_returns_insights_summaryz,TestGetSummary.test_returns_insights_summary^   s    D!:d#34))	%e,-"###,&/22222222z222z222222&222&222222/222/2222222222r$   c                 b   t        d      D cg c]  }t        d| d       }}|dz  }|j                  t        |             t	        |      }|j                  d      }|j                  }d}||k(  }	|	st        j                  d|	fd	||f      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.   total_tasks는 기간 내 전체 태스크 수r+   r      r   rZ   rs   r   r5   r7   rv   r9   r=   r>   N)ranger#   rb   r   r   rz   r/   r@   rA   rB   rC   rD   rE   rF   rG   rH   rW   ir   re   r^   rv   rI   rJ   rK   rL   rM   s               r   test_total_tasks_counts_allz*TestGetSummary.test_total_tasks_counts_allg   s    :?(CQasGa0CC))	%e,-"###,!!&Q&!Q&&&&!Q&&&&&&v&&&v&&&!&&&Q&&&&&&& Ds   D,c                 X   t        dd      t        dd      t        dd      g}|dz  }|j                  t        |             t        |      }|j	                  d	      }|j
                  }d
}||k(  }|st        j                  d|fd||f      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)u0   completed_tasks는 status=completed만 카운트rY   r-   r   rr   t3r.   rZ   rs   r   r,   r5   r?   rv   r9   r=   r>   N)r#   rb   r   r   rz   r0   r@   rA   rB   rC   rD   rE   rF   rG   rH   rW   r   re   r^   rv   rI   rJ   rK   rL   rM   s              r   #test_completed_tasks_filters_statusz2TestGetSummary.test_completed_tasks_filters_statusp   s     tK0tK0tI.

 ))	%e,-"###,%%**%****%******v***v***%**********r$   c           	      T   t        dd      t        dd      g}|dz  }|j                  t        |             t        |      }|j	                  d      }|j
                  }d	}||z
  }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                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
y)u'   평균 소요시간 계산 (분 단위)rY   g      ^@)r   rr   g     f@rZ   rs   r   g      @g?)<)zf%(py8)s
{%(py8)s = %(py0)s((%(py3)s
{%(py3)s = %(py1)s.avg_duration_minutes
} - %(py5)s))
} < %(py11)sabsrv   )r:   rx   r`   r<   py8py11assert %(py13)spy13N)r#   rb   r   r   rz   r1   r   r@   rA   rB   rC   rD   rE   rF   rG   )rH   rW   r   re   r^   rv   rf   rJ   @py_assert6@py_assert7@py_assert10@py_assert9@py_format12@py_format14s                 r   %test_avg_duration_minutes_calculationz4TestGetSummary.test_avg_duration_minutes_calculation}   s!    te4te4
 ))	%e,-"###,..;;.4;s45;;5;;;;5;;;;;;s;;;s;;;;;;6;;;6;;;.;;;;;;5;;;;;;;;;;;r$   c           	      H   t        dd      t        dd      t        dd      g}|dz  }|j                  t        |             t        |      }|j	                  d	      }|j
                  }|j                  }d} ||      }	d
}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
|j
                  }|j                  }d} ||      }	d}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
y)u   팀별 태스크 집계rY   r*   )r   rr   r   	dev2-teamrZ   rs   r   r,   r5   )zm%(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.tasks_by_team
}.get
}(%(py6)s)
} == %(py11)srv   r:   r;   ry   py6r   r   r   r   Nr~   )r#   rb   r   r   rz   r3   getr@   rA   rB   rC   rD   rE   rF   rG   rH   rW   r   re   r^   rv   rI   rK   @py_assert5r   r   r   r   r   s                 r   test_tasks_by_team_groupedz)TestGetSummary.test_tasks_by_team_grouped   s    t[1t[1t[1

 ))	%e,-"###,##9#''99'499499994999999v999v999#999'999999499999999999##9#''99'499499994999999v999v999#999'999999499999999999r$   c           	      H   t        dd      t        dd      t        dd      g}|dz  }|j                  t        |             t        |      }|j	                  d	      }|j
                  }|j                  }d} ||      }	d
}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
|j
                  }|j                  }d} ||      }	d}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}	x}}
y)u   상태별 태스크 집계rY   r-   r   rr   r   r.   rZ   rs   r   r,   r5   )zo%(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.tasks_by_status
}.get
}(%(py6)s)
} == %(py11)srv   r   r   r   Nr~   )r#   rb   r   r   rz   r4   r   r@   rA   rB   rC   rD   rE   rF   rG   r   s                 r   test_tasks_by_status_groupedz+TestGetSummary.test_tasks_by_status_grouped   s    tK0tK0tI.

 ))	%e,-"###,%%;%));+;)+6;!;6!;;;;6!;;;;;;v;;;v;;;%;;;);;;+;;;6;;;!;;;;;;;;%%9%))9)9))499499994999999v999v999%999)999)999499999999999r$   c                 @   t        dd      t        dd      g}|dz  }|j                  t        |             t        |      }|j	                  d      }|j
                  }d	}||k(  }|st        j                  d
|fd||f      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)u(   days 필터: 기간 밖 태스크 제외recentr+   r   oldr   rZ   rs   r   r~   r5   r7   rv   r9   r=   r>   N)r#   rb   r   r   rz   r/   r@   rA   rB   rC   rD   rE   rF   rG   r   s              r   #test_days_filter_excludes_old_tasksz2TestGetSummary.test_days_filter_excludes_old_tasks   s     x!,ur*
 ))	%e,-"###,!!&Q&!Q&&&&!Q&&&&&&v&&&v&&&!&&&Q&&&&&&&r$   c                    |dz  }|j                  t        j                  di i             t        |      }|j	                  d      }|j
                  }d}||k(  }|st        j                  d|fd||f      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}}|j                  }d}||k(  }|st        j                  d|fd||f      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)u    데이터 없으면 0값 SummaryrZ   r   rs   r   r   r5   r7   rv   r9   r=   r>   Nr?   )rb   r   r   r   rz   r/   r@   rA   rB   rC   rD   rE   rF   rG   r0   )
rH   rW   re   r^   rv   rI   rJ   rK   rL   rM   s
             r   $test_empty_data_returns_zero_summaryz3TestGetSummary.test_empty_data_returns_zero_summary   s'   ))	TZZ"./"###,!!&Q&!Q&&&&!Q&&&&&&v&&&v&&&!&&&Q&&&&&&&%%**%****%******v***v***%**********r$   c                    t        d      }|j                  d      }|j                  }d}||k(  }|st        j                  d|fd||f      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)u   파일 없으면 0값 Summaryrm   rs   r   r   r5   r7   rv   r9   r=   r>   N)r   rz   r/   r@   rA   rB   rC   rD   rE   rF   rG   )rH   r^   rv   rI   rJ   rK   rL   rM   s           r   *test_nonexistent_file_returns_zero_summaryz9TestGetSummary.test_nonexistent_file_returns_zero_summary   s     ?@###,!!&Q&!Q&&&&!Q&&&&&&v&&&v&&&!&&&Q&&&&&&&r$   c                 ^   t        d      D cg c]  }t        d|        }}|dz  }|j                  t        |             t	        |      }|j                  d      }|j                  }d}||k\  }	|	st        j                  d|	fd||f      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   rZ   rs   r   g        )>=)z<%(py2)s
{%(py2)s = %(py0)s.total_estimated_cost
} >= %(py5)srv   r9   r=   r>   N)r   r#   rb   r   r   rz   r2   r@   rA   rB   rC   rD   rE   rF   rG   r   s               r   %test_total_estimated_cost_nonnegativez4TestGetSummary.test_total_estimated_cost_nonnegative   s    .3Ah7asG$77))	%e,-"###,**1c1*c1111*c111111v111v111*111c1111111 8s   D*c                    t         j                         st        j                  d       t	        t               }|j                  d      }|j                  }d}||kD  }|st        j                  d|fd||f      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}}|j                  }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t        j                  |      dt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |	      dz  }
t        t        j                  |
            dx}}	y)u   실제 task-timers.json 로드u   task-timers.json 없음im  r   r   >)z2%(py2)s
{%(py2)s = %(py0)s.total_tasks
} > %(py5)srv   r9   r=   r>   NzXassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.tasks_by_team
}, %(py4)s)
}ru   dict)r:   rx   r`   ry   r   )TASK_TIMERS_PATHexistspytestskipr   rz   r/   r@   rA   rB   rC   rD   rE   rF   rG   r3   ru   r   )rH   r^   rv   rI   rJ   rK   rL   rM   rf   r   @py_format7s              r   test_real_task_timersz$TestGetSummary.test_real_task_timers   sK   &&(KK12 01###-!!%A%!A%%%%!A%%%%%%v%%%v%%%!%%%A%%%%%%% ..5z.55555555z555z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5r$   rO   )rP   rQ   rR   rS   r   r|   r   r   r   r   r   r   r   r   r   r   rT   r$   r   rp   rp   [   s    !3d 3t 3'D 'T '+D +T +<d <t <:4 :D ::T :d :
'D 
'T 
'+T +d +'2d 2t 26r$   rp   c                   p    e Zd ZdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfd	Z	deddfd
Z
y)TestRenderAsciiChartu   render_ascii_chart() 테스트rW   r	   Nc                    |dz  }|j                  t        j                  di i             t        |      }|j	                  d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
   str 반환t.jsonr   r   r~   )abrt   ru   rv   rj   rw   Nrb   r   r   r   render_ascii_chartru   rj   rB   rC   r@   rD   rE   rF   rG   rH   rW   re   r^   rv   rK   r{   s          r   test_returns_stringz(TestRenderAsciiChart.test_returns_string   s    x	TZZ"./"**+;<&#&&&&&&&&z&&&z&&&&&&&&&&&&&&&&&#&&&#&&&&&&&&&&r$   c                 ,   |dz  }|j                  t        j                  di i             t        |      }|j	                  ddd      }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}}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)u    레이블이 차트에 포함됨r   r   r(   r+   )r*   r   r*   inz%(py1)s in %(py3)srv   rx   r`   ra   r<   Nr   rb   r   r   r   r   r@   rA   rE   rB   rC   rD   rF   rG   	rH   rW   re   r^   rv   @py_assert0rf   rg   rL   s	            r   test_contains_keysz'TestRenderAsciiChart.test_contains_keys   s    x	TZZ"./"**!+LM${f$$$${f$$${$$$$$$f$$$f$$$$$$$${f$$$${f$$${$$$$$$f$$$f$$$$$$$r$   c                    |dz  }|j                  t        j                  di i             t        |      }|j	                  ddi      }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)u   막대 문자(█) 포함r   r   r   r(   u   █r   r   rv   r   ra   r<   Nr   r   s	            r   test_contains_bar_charsz,TestRenderAsciiChart.test_contains_bar_chars   s    x	TZZ"./"**C95uuur$   c                    |dz  }|j                  t        j                  di i             t        |      }|j	                  ddid      }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)u   title 인자 반영r   r   xr~   u   팀별 태스크)titler   r   rv   r   ra   r<   Nr   r   s	            r   test_with_titlez$TestRenderAsciiChart.test_with_title   s    x	TZZ"./"**C8;M*N!+!V++++!V+++!++++++V+++V+++++++r$   c                    |dz  }|j                  t        j                  di i             t        |      }|j	                  i       }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)	uD   빈 데이터는 에러 없이 빈 문자열 또는 메시지 반환r   r   rt   ru   rv   rj   rw   Nr   r   s          r   test_empty_dataz$TestRenderAsciiChart.test_empty_data   s    x	TZZ"./"**2.&#&&&&&&&&z&&&z&&&&&&&&&&&&&&&&&#&&&#&&&&&&&&&&r$   c           	         |dz  }|j                  t        j                  di i             t        |      }|j	                  ddd      }|j                         D cg c]  }d|v sd|v s| }}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        d |D              }t        d |D              }t        |      }t        |      }||kD  }	|	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                  |      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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}	}yc c}w )u   큰 값이 더 긴 막대r   r   d   r~   )bigsmallr   r   r,   r5   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenlines)r:   rx   r`   r   zassert %(py8)sr   Nc              3   *   K   | ]  }d |v s|  yw)r   NrT   .0ls     r   	<genexpr>zHTestRenderAsciiChart.test_larger_value_has_longer_bar.<locals>.<genexpr>  s     7aEQJ7   	c              3   *   K   | ]  }d |v s|  yw)r   NrT   r   s     r   r   zHTestRenderAsciiChart.test_larger_value_has_longer_bar.<locals>.<genexpr>	  s     ;gl!;r   r   )zM%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}big_line
small_line)r:   rx   r`   r<   r   r   zassert %(py10)spy10)rb   r   r   r   r   
splitlinesr   r@   rA   rB   rC   rD   rE   rF   rG   next)rH   rW   re   r^   rv   r   r   rf   r   rJ   r   @py_format9r   r   r   @py_format11s                   r    test_larger_value_has_longer_barz5TestRenderAsciiChart.test_larger_value_has_longer_bar   s   x	TZZ"./"**3+CD"--/Nq5A:ANN5zQzQzQss55zQ7577;U;;
8}.s:.}....}......s...s......8...8...}......s...s......:...:..........	 Os   M
+M
)rP   rQ   rR   rS   r   r   r   r   r   r   r   rT   r$   r   r   r      sw    ('D 'T '%4 %D %  , , ,' ' '
/ 
/$ 
/r$   r   )r*   r-   g     r@r~   )"rS   builtinsrB   _pytest.assertion.rewrite	assertionrewriter@   r   systempfiler   r   pathlibr   r   pathinsertrj   __file__parentutils.insights_enginer   r   r   listr   r   floatr    r#   r&   rV   rp   r   rT   r$   r   <module>r      s    2    
  (   3tH~,,33::; < AEF CDJ C3 C #  	
  
*C C*" "2v6 v6r6/ 6/r$   