o
    qoiM&                     @   s  d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlZ	ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ dd ZG dd dejZejG dd dZdd ZG dd dejZG dd dejZG dd dejZG dd dejZedkre  dS dS )z#Tests for fiddle.testing.test_util.    N)Any)absltest)parameterized)daglish)diffing)tagging)testing)	test_utilc                  K   s   | S N )kwargsr   r   V/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/testing/test_util_test.py	sample_fn!   s   r   c                   @   s   e Zd ZdZdS )	SampleTagzTag for testing.N)__name__
__module____qualname____doc__r   r   r   r   r   %   s    r   c                   @   s&   e Zd ZU dZeed< dZeed< dS )SampleClass   a   bN)r   r   r   r   r   __annotations__r   r   r   r   r   r   )   s   
 r   c               
   C   sL   ddg} t d}tjtdd}d| g}tjt| ||| ||g|tdgdS )N      r      )x   )r   r   cdef)r   fdlConfigr   r   new)shared_listshared_objectshared_confignested_shared_listr   r   r   make_test_value/   s   
r*   c                   @   s   e Zd Zeddedffdedffdedffdedffd	e	 ffd
ededffdededffdededffdededededede	 ffg
dd Z
eg ddd ZdS )ParsePathTest) r   .foofooz[0]r   z["foo"]z	['a b c']za b cz.__fn_or_cls__.foo.barbarz.foo[22]r   z[5]["x"]r   r   ".foo[8].bar.baz["x"].__fn_or_cls__   bazc                 C   s   |  t|| d S r
   )assertEqualr   
parse_path)selfpath_strpathr   r   r   test_parse_path@   s   zParsePathTest.test_parse_path)z.@#$zfoo.barz["]z[foo]c                 C   s<   |  td t| W d    d S 1 sw   Y  d S )NzUnable to parse path)assertRaisesRegex
ValueErrorr   r5   )r6   r7   r   r   r   test_parse_path_errorU   s   "z#ParsePathTest.test_parse_path_errorN)r   r   r   r   
parametersr   AttrIndexKeyBuildableFnOrClsr9   r<   r   r   r   r   r+   >   s(    
r+   c                   @   s   e Zd Zeddeddfddededffddededed	ffd
ded
ede	ded	ede
de ffgdd ZdS )ParseReferenceTestoldr,   r   my_rootr-   r.   $r/   r0   rootr1   r2   r3   r   c                 C   s   |  t||| d S r
   )r4   r   parse_reference)r6   rF   r7   r8   r   r   r   test_parse_referenceb   s   z'ParseReferenceTest.test_parse_referenceN)r   r   r   r   r=   r   	Referencer   r>   r?   r@   rA   rH   r   r   r   r   rB   `   s"    rB   c                   @   s   e Zd ZdZdg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dd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(DescribeDagDiffsTesti  r   c                 C   s$   t  }t  }| t||g  d S r
   )r*   r4   r	   describe_dag_diffsr6   r   yr   r   r   test_no_diffsy   s   z"DescribeDagDiffsTest.test_no_diffsc                 C   s   |  tdgdgdg d S )Nr   0z:* type(x[0]) != type(y[0]): <class 'int'> vs <class 'str'>r4   r	   rK   r6   r   r   r   test_type_diff~   s   z#DescribeDagDiffsTest.test_type_diffc                 C   sH   dg}||g}|dgg}|  t||dg |  t||dg d S )Nr   z1* Sharing diff: x[1] is x[0] but y[1] is not y[0]z1* Sharing diff: y[1] is y[0] but x[1] is not x[0]rP   )r6   r&   r   r   r   r   r   test_sharing_diff   s   


z&DescribeDagDiffsTest.test_sharing_diffc                 C   sT   t td}||g}|t tdg}| |d |d  | t|t| d S )N   r   r   )tuplerangeassertIsNotr4   r	   get_shared_paths)r6   shared_tupler   r   r   r   r   )test_no_sharing_diff_for_internable_value   s   z>DescribeDagDiffsTest.test_no_sharing_diff_for_internable_valuec                 C   6   t jtdd}t jtdd}| t||dg d S )Nr   r   r   z* x.a=5 but y.a=6r#   r$   r   r4   r	   rK   rL   r   r   r   test_leaf_diff   s   z#DescribeDagDiffsTest.test_leaf_diffc                 C   r[   )N(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr\   (yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyze* x.a='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' but
  y.a='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'r]   rL   r   r   r   test_big_leaf_diff   s   
z'DescribeDagDiffsTest.test_big_leaf_diffc                 C   sF   t jttddgd}t jttddgd}| t||dg d S )Nr   r   r\   r   z* x.a={1, 2} but y.a={2, 3})r#   r$   r   setr4   r	   rK   rL   r   r   r   test_set_diff   s
   z"DescribeDagDiffsTest.test_set_diffc                 C   s@   |  tdgddgdg |  tdggddggdg d S )Nr   r   r   %* y[1] has a value but x[1] does not.+* y[0][1] has a value but x[0][1] does not.rP   rQ   r   r   r   test_list_len_diff   s   z'DescribeDagDiffsTest.test_list_len_diffc                 C   s4   |  tdddg |  tdgdgdg d S )N)r   )r   r   rd   re   rP   rQ   r   r   r   test_tuple_len_diff   s   
z(DescribeDagDiffsTest.test_tuple_len_diffc                 C   sP   |  ttddtddddg |  ttddgtddgddg d S )	Nr   r\   r   z)* x['a'] has a value but y['a'] does not.z)* y['b'] has a value but x['b'] does not.r   z/* x[0]['a'] has a value but y[0]['a'] does not.z/* y[0]['b'] has a value but x[0]['b'] does not.)r4   r	   rK   dictrQ   r   r   r   test_dict_keys_diff   s   z(DescribeDagDiffsTest.test_dict_keys_diffc                 C   s8   t jtdd}t jtdd}| t||ddg d S )Nr   r\   rh   z#* x.a has a value but y.a does not.z#* y.b has a value but x.b does not.r]   rL   r   r   r   test_config_arg_names_diff   s   
z/DescribeDagDiffsTest.test_config_arg_names_diffc                 C   s.   t t}t t}| t||dg d S )Nz7* x=<Config[SampleClass()]> but y=<Config[sample_fn()]>)r#   r$   r   r   r4   r	   rK   rL   r   r   r   test_config_callable_diff   s   


z.DescribeDagDiffsTest.test_config_callable_diffc                 C   s.   t  }t  }d|_| t||g d d S )N   )3* Sharing diff: x.d[0] is x.a but y.d[0] is not y.a3* Sharing diff: x.e[1] is x.a but y.e[1] is not y.a9* Sharing diff: y.e[1] is y.d[0] but x.e[1] is not x.d[0]z9* type(x.a) != type(y.a): <class 'list'> vs <class 'int'>)r*   r   r4   r	   rK   rL   r   r   r   'test_replace_value_with_unrelated_value   s   z<DescribeDagDiffsTest.test_replace_value_with_unrelated_valuec                 C   s6   t  }t  }t|j|_| t||g d d S )N)rn   ro   rp   )r*   copyr   r4   r	   rK   rL   r   r   r   test_replace_value_with_copy   s   z1DescribeDagDiffsTest.test_replace_value_with_copyc                 C   sZ   t  }t  }t|j|_t|j|_|jd |jg|_| t	||ddg d S )Nr   z)* x.e[1] has a value but y.e[1] does not.z)* y.d[3] has a value but x.d[3] does not.)
r*   rr   r   r   r    appendr!   r4   r	   rK   rL   r   r   r   test_multiple_difference   s   

z-DescribeDagDiffsTest.test_multiple_differencec                 C   s>   t t}t jtdd}| || | t||dg d S )Nr   r\   z#* y.a has a value but x.a does not.)r#   r$   r   r4   r	   rK   rL   r   r   r    test_config_default_is_different   s   

z5DescribeDagDiffsTest.test_config_default_is_differentc                 C   s:   dg}t ||d}t |t|d}| t|| d S )Nr   )r   r   )r   rr   assertEmptyr	   rK   )r6   r&   r   rM   r   r   r   3test_sharing_not_detected_in_non_traversable_object  s   zHDescribeDagDiffsTest.test_sharing_not_detected_in_non_traversable_objectc                 C   sB   t t}t |dt t |dt | t|t t d S )Nr   )	r#   r$   r   add_tagr   
remove_tagrw   r	   rK   )r6   configr   r   r   +test_adding_and_removing_tags_is_equivalent  s   
z@DescribeDagDiffsTest.test_adding_and_removing_tags_is_equivalentN)r   r   r   maxDiffr&   rN   rR   rS   rZ   r^   ra   rc   rf   rg   rj   rk   rl   rq   rs   ru   rv   rx   r|   r   r   r   r   rJ   s   s*    					rJ   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestCaseTestc                 C   s   t  }t  }| || d S r
   )r*   assertDagEqualrL   r   r   r   test_dag_equal  s   zTestCaseTest.test_dag_equalc                 C   sP   t  }t  }d|_| | j | || W d    d S 1 s!w   Y  d S )Nr   )r*   r   assertRaisesfailureExceptionr   rL   r   r   r   test_dag_not_equal  s   "zTestCaseTest.test_dag_not_equalc                 C   sZ   t  }t  }t|j|_| | jd | || W d    d S 1 s&w   Y  d S )NzSharing diff)r*   rr   r   r:   r   r   rL   r   r   r   test_dag_sharing_diff'  s   "z"TestCaseTest.test_dag_sharing_diffN)r   r   r   r   r   r   r   r   r   r   r~     s    r~   __main__)r   rr   dataclassestypingr   absl.testingr   r   fiddler#   r   r   r   r   fiddle._src.testingr	   r   Tagr   	dataclassr   r*   TestCaser+   rB   rJ   r~   r   mainr   r   r   r   <module>   s2   " &