
    P1iJV              	       ,   d dl Z d dlZd dlZej                  j	                  ej                  j                  ej                  j                  ej                  j                  e                         d dlm	Z	 d dl
mZ  G d de j                        Z G d de j                        Z G d d	e j                        Z G d
 de j                        Z G d de j                        Zd Zedk(  r% e         ed        e j*                  dgd       yy)    N)find_tian_yi)bzshagodc                   *    e Zd Zd Zd Zd Zd Zd Zy)TianYiTestsc                     ddddddddddddd}t        |      }| j                  t        |      d       | j                  |d   d       | j                  |d   d	       y
)u6   Test basic 天乙贵人 calculation with a simple caser      ge         yearmonthdayhourr   r   r   r   r   r   Nr   assertEquallenself	bazi_dataresultss      H/home/cursorai/projects/iching/iching/tests/../../tests/test_bzshagod.pytest_find_tian_yi_basicz#TianYiTests.test_find_tian_yi_basic   sw     !$1%#!$	
	 y)Wq) 	^4 	_5    c                 v    ddddddddddddd}t        |      }| j                  t        |      d       y	)
u$   Test when no 天乙贵人 is presentr   r   r	   r   r         r   Nr   r   s      r   test_find_tian_yi_no_matchesz(TianYiTests.test_find_tian_yi_no_matches   sK     !$1%#!$	
	 y)Wq)r   c                     ddddddddddddd}t        |      }|D cg c]  }|d   |d   f }}| j                  d|       | j                  d	|       y
c c}w )u+   Test when multiple 天乙贵人 are presentr   r   r	   r   r!   r   r   )r   r   )r   r   N)r   assertIn)r   r   r   rfound_branchess        r   "test_find_tian_yi_multiple_matchesz.TianYiTests.test_find_tian_yi_multiple_matches+   sz     !$1%#!$	
	 y) 18811Q41,8fn-fn- 9s   Ac                 n    dddddddddd}t        |      }| j                  t        |      d       y)	z%Test when hour pillar is not providedr   r   r	   r   r!   r   )r   r   r   Nr   r   s      r   test_find_tian_yi_missing_hourz*TianYiTests.test_find_tian_yi_missing_hour<   sC     !$1%#
	 y)Wq)r   c                    ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d	       dd
ddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddd
dddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddd
dddddd}t        |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        |      }| j                  |d   d       | j                  |d   d       y )!u3   Test that all day stems can find their 天乙贵人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   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   )r   r"   r   )r   r"   r   )r   r   r   N)r   r   r   s      r   test_all_caseszTianYiTests.test_all_casesG   s    !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5 !$2&#!$	
	 y)^4%56 "%1%#!$	
	 y)_5_5 !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5 !$1%#!$	
	 y)^4_5r   N)__name__
__module____qualname__r   r#   r(   r*   r0    r   r   r   r      s    6&
*."	*d6r   r   c                       e Zd Zd Zy)TianDeTestsc                    ddddddddddddd}t        j                  |      }| j                  |d   d       d	dddddd	dddddd}t        j                  |      }| j                  |d   d
       | j                  |d   d       d	dddddd	dddddd}t        j                  |      }| j                  |d   d       d	dddddd	dddddd}t        j                  |      }| j                  |d   d       | j                  |d   d       ddddddddddddd}t        j                  |      }| j                  |d   d
       | j                  |d   d       | j                  |d   d       | j                  |d   d       ddddddddddddd}t        j                  |      }| j                  |d   d
       ddddd	dddddddd}t        j                  |      }| j                  |d   d       ddddddddddddd}t        j                  |      }| j                  |d   d
       ddddddddddddd}t        j                  |      }| j                  |d   d
       ddddddddddddd}t        j                  |      }| j                  |d   d       ddddddddddddd}t        j                  |      }| j                  |d   d
       ddddddddddddd}t        j                  |      }| j                  |d   d
       y)u3   Test that all month earth branches for 天德贵人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-   
   N)r   find_tian_der   r   s      r   r0   zTianDeTests.test_all_cases   s    !$1%#!$	
	 ''	2]3 !$1%#!$	
	 ''	2]3\2 !$1%#!$	
	 ''	2]3 !$1%#!$	
	 ''	2]3]3 !$1%#!$	
	 ''	2]3^4\2]3 !$1%#!$	
	 ''	2]3 "%1%#!$	
	 ''	2]3 "%1%#!$	
	 ''	2]3 "%1%#!$	
	 ''	2]3 !$1%#!$	
	 ''	2]3 !$2&#!$	
	 ''	2]3 !$2&#!$	
	 ''	2]3r   Nr1   r2   r3   r0   r4   r   r   r6   r6      s    q4r   r6   c                       e Zd Zd Zy)
YueDeTestsc                    dddddddddddddddhd	dd
ddddddddd
ddddhd	ddddddddddd
ddddhd	ddddddddddd
dddhd	ddddd
dddddddddhd	ddddddddddddddhd	dd
dd
ddddddddddhd	dddddddd
ddd
ddddhd	dddddddddddddh dd	dd
dddddddddddddhd	dddddddddddddh dd	dddddddddddddddhd	dddddddddd
dddi d	d}|D ]  }t        j                  ||   d         }t        ||   d         dkD  rwd}||   d   D ]i  }| j                  t        |      t        ||   d         d| d||   d    d|        | j	                  |||   d   d| d||   d    d|        |dz  }k | j                  |g         y)u3   Test that all month earth branches for 月德贵人r,   r/   r	   r   r   r   r   r   bzcheckr!   r   r   r8   r   r   r   r"   >   r   r   r   r-   >   r   r   r   r   r.   )r   r   r   r   r!   r"   r/   r   r,   r-   r8   r.      r?   r@   Item  , calculated N)r   find_yue_der   r   r%   r   r   ir   cipillars         r   r0   zYueDeTests.test_all_cases$  sb   
 %&!}A!}RSXY]ijopdqr % %&!}A!}RSXY]ijopdqr %&!}A!}RSXZ^jkpqers!5) %&!}A!}RSXY]ijopdqr  %&!}A!}RSXY]ijopdqr! %&!}A!}RSXY]ijopdqr %&!}A!}RSXY]ijopdqr  %&!}A!}RSXY]ijopdqr &) %&!}A!}RSXZ^jkpqers1 %&!}A!}RSXY]ijopdqr %&!}A"~STYZmjkpqers9 %&!}A"~STYZmjkpqers &) %&!}A!}RSXY]ijopdqr}B
	H A**9Q<+=>G9Q<()A-'l73F$$S\3y|G7L3MQVWXVYYZ[def[gho[pZqq~  @G  H  PI  JMM&)A,w*?51YWX\ZaMbLccpqxpyAz{!GB 4
   "- r   Nr:   r4   r   r   r<   r<   "  s    O.r   r<   c                       e Zd Zd Zy)
TaiJiTestsc                 z   dddddddddddddddhd	ddddddd
d
dddddddhd	dddddddddd
dddddhd	dddd
dddd
ddddddhd	ddddd
ddddddddddhd	d
d
dddddddddddh dd	dddddddddddddddhd	dddd
ddddddddddhd	dddddddddddddh dd	dddd
dddddddddddhd	d
ddddddd
dddddi d	d}|D ]  }t        j                  ||   d         }t        ||   d         dkD  rwd}||   d   D ]i  }| j                  t        |      t        ||   d         d| d||   d    d|        | j	                  |||   d   d| d||   d    d|        |d
z  }k | j                  |g         y)u3   Test that all month earth branches for 太极贵人r,   r   r	   r   r/   r   r   r   r>   r   r!   r   r   r8   r-   r"   r   >   r   r   r   r   r.   r   >   r   r   r   r   r   r   r   r!   r"   r/   r   r,   r-   r8   r?   r@   rB   rC   rD   N)r   
find_taijir   r   r%   rF   s         r   r0   zTaiJiTests.test_all_casesw  s   
 %&!}A!}RSXY]ijopdqr &) %&!}A!}RSXY]ijopdqr 7+ %&!}A!}RSXZ^jkpqers!6* %&!}A!}RSXY]ijopdqr  %&!}A!}RSXY]ijopdqr '* %&!}A!}RSXY]ijoqdrs: %&!}A!}RSXY]ijoqdrs %&!}A!}RSXY]ijopdqr  %&!}A!}RSXY]ijopdqr1 %&!}A!}RSXY]ijopdqr %&!}A!}RSXY]ijopdqri8
	t A)))A,t*<=G9Q<()A-'l73F$$S\3y|G7L3MQVWXVYYZ[def[gho[pZqq~  @G  H  PI  JMM&)A,w*?51YWX\ZaMbLccpqxpyAz{!GB 4
   "- r   Nr:   r4   r   r   rK   rK   u      E.r   rK   c                       e Zd Zd Zy)LuShenTestsc                 z   dddddddddddddddhd	d
dddddd
d
dddddddhd	dddddddddd
dddddhd	dddd
dddd
ddddddhd	d
ddddddddddddddhd	dddddddddddddh dd	dddddddddddddh dd	dddd
ddddddddddhd	dddddddddddddddhd	dddddddddddddddhd	d
dddddd
d
dddddi d	d}|D ]  }t        j                  ||   d         }t        ||   d         dkD  rwd}||   d   D ]i  }| j                  t        |      t        ||   d         d| d||   d    d|        | j	                  |||   d   d| d||   d    d|        |d
z  }k | j                  |g         y)u   Test all cases for 禄神r,   r   r	   r   r!   r   r   r   r>   r   r   r"   r/   r   r8   r-   r   >   r   r   r   >   r   r   r   r   r.   rM   r?   r@   rB   rC   rD   N)r   find_lushenr   r   r%   rF   s         r   r0   zLuShenTests.test_all_cases  s
   
 %&!}A!}RSXY]ijopdqr &) %&!}A!}RSXY]ijopdqr 7+ %&!}A!}RSXZ^jkpqers!6* %&!}A!}RSXY]ijopdqr  %&!}A!}RSXY]ijopdqr '* %&!}A!}RSXY]ijopdqr3 %&!}A!}RSXY]ijopdqr9 %&!}A!}RSXY]ijopdqr  %&"~Q2TUZ[}klqrfst '* %&!}A!}RSXY]ijopdqr!6* %&!}A!}RSXY]ijopdqri8
	t A**9Q<+=>G9Q<()A-'l73F$$S\3y|G7L3MQVWXVYYZ[def[gho[pZqq~  @G  H  PI  JMM&)A,w*?51YWX\ZaMbLccpqxpyAz{!GB 4
   "- r   Nr:   r4   r   r   rQ   rQ     rO   r   rQ   c                  8   t        d       t        d       t        d       t        d       t        d       t        d       t        d       t        d       t        d	       t        d
       t        d       t        d       t        d       t        d       y)z1Print explanation of what each test case verifiesz
Test Cases Explanation:z1. test_find_tian_yi_basic:u)      - Tests a basic case with 甲 day stemu@      - Verifies both 阴贵人 (丑) and 阳贵人 (未) are foundz!
2. test_find_tian_yi_no_matches:u8      - Tests when no 天乙贵人 is present in any pillarz'
3. test_find_tian_yi_multiple_matches:u      - Tests with 戊 day stemuI      - Verifies both 阴贵人 and 阳贵人 are found in different pillarsz#
4. test_find_tian_yi_missing_hour:z;   - Tests proper handling when hour pillar is not providedz 
5. test_all_stems_have_tian_yi:z   - Tests all 10 day stemsuA      - Verifies each stem can find both its 阴贵人 and 阳贵人N)printr4   r   r   print_test_explanationrV     s    	
%&	
'(	
56	
LM	
./	
DE	
45	
()	
UV	
01	
GH	
-.	
'(	
MNr   __main__z
Running tests...zfirst-arg-is-ignoredF)argvexit)unittestsysospathappenddirnameabspath__file__iching.utils.bzshagodr   iching.utilsr   TestCaser   r6   r<   rK   rQ   rV   r1   rU   mainr4   r   r   <module>rf      s     
 	 0I JK L . !`6(## `6Ds4(## s4jQ."" Q.fG."" G.RG.(## G.RO* z	
HMM./e<	 r   