B °-__ã@s´dZddlmZmZddlmZdZdZdZdZ dZ dZ ee ee ee Z e dks\t ‚dd „Zd d „Zdd d„Zdd„Zdd„Zdd„Zdd„ZeddƒZdd„Zdd„ZdS)zVarious utility functions.é)Ú namedtupleÚCounter)Ú commonprefixTéPé écCsBt|ƒ||}|tkr>d|d|…||t|ƒ|d…f}|S)Nz%s[%d chars]%s)ÚlenÚ_PLACEHOLDER_LEN)ÚsÚ prefixlenZ suffixlenÚskip©r ú#/usr/lib/python3.7/unittest/util.pyÚ_shortens&rcs¸ttt|ƒƒ}ttt|ƒƒ}|tkr(|St|ƒ‰tˆƒ‰t|ˆtt}|t kr”ttt |ˆtkspt ‚t ˆt|ƒ‰t‡‡fdd„|DƒƒSt ˆtt ƒ‰t‡‡fdd„|DƒƒS)Nc3s|]}ˆ|ˆd…VqdS)Nr )Ú.0r )Úprefixr r rú 'sz'_common_shorten_repr..c3s&|]}ˆt|ˆd…ttƒVqdS)N)rÚ _MIN_DIFF_LENÚ _MIN_END_LEN)rr )rr r rr*s) ÚtupleÚmapÚ safe_reprÚmaxrÚ _MAX_LENGTHrÚ_MIN_BEGIN_LENr Ú_MIN_COMMON_LENÚAssertionErrorr)ÚargsÚmaxlenZ common_lenr )rr rÚ_common_shorten_reprs    rFcCsPy t|ƒ}Wntk r*t |¡}YnX|r|rB| ¡}y| |¡Wqtk r>| |¡YqXqW||fS)z­Same behavior as sorted_list_difference but for lists of unorderable items (like dicts). As it does a linear search per item (remove) it has O(n*n) performance.)ÚpopÚremoveÚ ValueErrorr+)r.r/r2Úitemr r rÚunorderable_list_differencebsr:cCs||k||kS)z.Return -1 if x < y, 0 if x == y and 1 if x > yr )ÚxÚyr r rÚ three_way_cmpssr=ZMismatchzactual expected valuecCsDt|ƒt|ƒ}}t|ƒt|ƒ}}tƒ}g}x¢t|ƒD]–\}} | |krJq8d} } x.t||ƒD] } || | kr^| d7} ||| <q^Wx,t|ƒD] \} } | | krŒ| d7} ||| <qŒW| | kr8t| | | ƒ}| |¡q8Wxlt|ƒD]`\}} | |krîqÜd} x2t||ƒD]$} || | krþ| d7} ||| <qþWtd| | ƒ}| |¡qÜW|S)zHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differrr*)Úlistrr"Ú enumerateÚrangeÚ _Mismatchr+)r/r.r ÚtÚmÚnZNULLr%r0ÚelemÚcnt_sÚcnt_tr1Z other_elemÚdiffr r rÚ_count_diff_all_purposeys<     rIc CsŽt|ƒt|ƒ}}g}x>| ¡D]2\}}| |d¡}||kr t|||ƒ}| |¡q Wx2| ¡D]&\}}||kr`td||ƒ}| |¡q`W|S)zHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differr)rÚitemsÚgetrAr+) r/r.r rBr%rErFrGrHr r rÚ_count_diff_hashableœs   rLN)F)Ú__doc__Ú collectionsrrÚos.pathrZ __unittestrr rrrrrrrrr)r5r:r=rArIrLr r r rÚs*   ) #