rustt(#rustc 1.72.0 (5680fa18f 2023-08-23) }ޱL{ :-8f88c761e33f2651ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5YnFmZܝ--649be05783c8912epWĪ9/-f002c8f83a289c4b &c~~*ĽVa-682387162b570769cfg_ifz$kdgK!--05a2cedbb78c1d4f miniz_oxidePnzn )m-9c3df673b2797081adlerA%lon  2-c6afbee8d1102512 hashbrown8*^| -356231f77d1e268arustc_std_workspace_allocL%gqG-80ed5799bf463787 std_detecta^Ʒc -1bccb7a942e1b311rustc_demanglekŗ,N/ST%L)-bc6864da821ce9a2 addr2line2Ȃ']51:.-4930b3dc482158f7gimli~2)F25˼-65bea4bb6af40828object^]UVW-919f89587cbed68dmemchrk/YO+-c6624cb4360306cdBhnge],Q-f9018f9cee1cc5ff__rt;:::::::::: hitcheck check_countLEVELhit_cold   GuardInnermarkhits expected_hitsGuardinner  ACTIVE"__init"__getit$__KEY$ 7 7$7  Ɍ*+ ++ +++0+0\vD?,+ +0#p#p#p $ )7 {-P )7 {-P!!!borrow!valueamZ444buf040bW`(%%%%%phantom%yjƙ     Y*666Global 7C\ w {-P "&p "&p"p "&p#p$p"$p"Mp nZc$p#p$p{ fn __init() -> RefCell>> { Default::default() } unsafe fn __getit<'_>(init: ::std::option::Option<&'_ mut ::std::option::Option>>>>) -> ::std::option::Option<&'static RefCell>>> { static __KEY: ::std::thread::local_impl::Key>>> = ::std::thread::local_impl::Key>>>::new(); unsafe { __KEY.get(move || { if let ::std::option::Option::Some(init) = init { if let ::std::option::Option::Some(value) = init.take() { return value; } else if true { { ::core::panicking::panic_fmt(<#[lang = "format_arguments"]>::new_v1(&["internal error: entered unreachable code: missing default value"], &<#[lang = "format_argument"]>::none())); }; } } __init() }) } } unsafe { ::std::thread::LocalKey::new(__getit) } },, ,p#p+pp%p &  {-P pp G&###p"p$ ppp#p#p GGKeyG GG dtor_stateG+op$pinitp p,p ,p*p G,pup%up%#pup "p #"p p#$ pp ?p#p #pp p"p  p p7 p.Z.Z&   .Z   *""Z""Z G  ""Z""Z  ""Z   GG formatterG1 2 7e""Z""Z G   ""Z!@Z!Z A  !@Z!p "p"p # "p"p!p p&ppMpp$p"p$p p-#pp7 p!@ZIpiecesEEE4&w\NF""Z*.Z+""Z + ""Z/""Z*.Z%p#%ppp%.Z *.Z?internal error: entered unreachable code: missing default value??*.Z.Z&p*.Z*.Z.Z,,  - ,- - ,- 0,- - - .,#,*,0, ,2,BA(O -#- key,, . . ! .. .. !!Ref!!iILJ.... .... V..  *.   #7 .+. 9NNIterNMNMN_markerMjg(+777 .. .. .0.0 #.#  #7.0.8.  .:. .:. 5.5. 8.7.0it.4-7.0 _ref__key. .  . . .7.. . ...#. 8.7. . =. *.7.g.4-7.:44  !4 4'4'4' ""RefMut"""=Cզ4'4'4744  44'4 544444,4, #4#974,4 4'A4' >4'>4474,:4 374, _ref__inner66 >6 666>6666 566666!6 {-P6!# 9D#66A6A6A6>6:66 !& < # cov-markG This library at its core provides two macros, [`hit!`] and [`check!`],JI which can be used to verify that a certain test exercises a certain code^L path.  Here's a short example: ```4 fn parse_date(s: &str) -> Option<(u32, u32, u32)> {7 if 10 != s.len() {% // By using `cov_mark::hit!`(5 // we signal which test exercises this code.8$ cov_mark::hit!(short_date);' return None; } , if "-" != &s[4..5] || "-" != &s[7..8] {/$ cov_mark::hit!(bad_dashes);'IJ  // ... # unimplemented!() } #[test]  fn test_parse_date() { { 5 // `cov_mark::check!` creates a guard object8< // that verifies that by the end of the scope we've?7 // executed the corresponding `cov_mark::hit`.:& cov_mark::check!(short_date);)- assert!(parse_date("92").is_none());0J 1 // This will fail. Although the test looks like44 // it exercises the second condition, it does not.7= // The call to `covers!` call catches this bug in the test.@ // { ' // cov_mark::check!(bad_dashes);; *4 // assert!(parse_date("27.2.2013").is_none()); 7 // }  L & cov_mark::check!(bad_dashes); )5 assert!(parse_date("27.02.2013").is_none()); 8J K   # fn main() {} G  & Here's why coverage marks are useful: ) B * Verifying that something doesn't happen for the *right* reason. EK * Finding the test that exercises the code (grep for `check!(mark_name)`). NT * Finding the code that the test is supposed to check (grep for `hit!(mark_name)`). WE * Making sure that code and tests don't diverge during refactorings. HM * (If used pervasively) Verifying that each branch has a corresponding test.P # LimitationsB * In the presence of threads, [`check!`] may falsely pass, if theEK mark is hit by an unrelated thread, unless the `thread-local` feature isN enabled.* * Names of marks must be globally unique.-1 * [`check!`] can't be used in integration tests.4 # Implementation DetailsD Each coverage mark is an `AtomicUsize` counter. [`hit!`] incrementsGB this counter, [`check!`] returns a guard object which checks thatEF the mark was incremented. When the `thread-local` feature is enabled,IE each counter is stored as a thread-local, allowing for more accurateH counting. K Counters are declared using `#[no_mangle]` attribute, so that [`hit!`] andNM [`check!`] both can find the mark without the need to declare it in a commonP3 module. Aren't the linkers ~~horrible~~ wonderful?6 # Safety N Technically, the [`hit!`] macro in this crate is unsound: it uses `extern "C"QL #[no_mangle]` symbol, which *could* clash with an existing symbol and causeOA UB. For example, `cov_mark::hit!(main)` may segfault. That said:D? * If there's no existing symbol, the result is a linker error.BK * If there exists corresponding `cov_mark::check!`, the result is a linkerN error. ? * Code inside `cov_mark::hit!` is hidden under `#[cfg(test)]`.BI It is believed that it is practically impossible to cause UB by accidentLG when using this crate. For this reason, the `hit` macro hides unsafetyJ inside.  !& " Hit a mark with a specified name.% # Example G5 fn safe_divide(dividend: u32, divisor: u32) -> u32 {8 if divisor == 0 {* cov_mark::hit!(save_divide_zero);- return 0;J  dividend / divisorKG            !& Checks that a specified mark was hit.)f GL  fn test_safe_divide_by_zero() {#( cov_mark::check!(save_divide_zero);+' assert_eq!(safe_divide(92, 0), 0);*K7 # fn safe_divide(dividend: u32, divisor: u32) -> u32 {: # if divisor == 0 { , # cov_mark::hit!(save_divide_zero); / # return 0;  # }!  # dividend / divisor! # }!G!! ! !!!"!"! !! """" " _guard""" "" ""  "" """  "  """" "" """&L Checks that a specified mark was hit exactly the specified number of times."O#f# #G# struct CoveredDropper;# impl Drop for CoveredDropper {#" fn drop(&mut self) {$/ cov_mark::hit!(covered_dropper_drops);$2J$ K$$L$  fn drop_count_test() {$6 cov_mark::check_count!(covered_dropper_drops, 2);%9, let _covered_dropper1 = CoveredDropper;%/, let _covered_dropper2 = CoveredDropper;&/K&G&& & && &'&' & && &&& &' '''' ' p''' '' ''  '' '''  '  '''' '' '''' '''( '''' ''''(( ((('("Cell(  (! (% \(  ))(s(s(((((((s( ( ))++ ,, # 4,-$-~#34-.(()9.(()8.. Y*..~//  { L~ m //  {-P // Ɍ*//00 0'7 '7~#0<0401  1E1~   1 2 4(()A5 55(7 (7 #5 56 (!(!)!! E$.p+pp,pp)7 {-P p%p1p p  ppp%p$(&(&)&&$$05pt15Jnt15*gt15hRt15G,ct15}wNrt15f}1"t15zҏt15nm@t15Mmq_Rt15 B t15[dخt15.Ntt15:';jwt15> PSt15XMCRt15aB|nt15Q(lt15%g:.ht15Lwjt15Hnt15|蘞t15K"t15( r& t15H ^t15mYt?yt15|tz!4t157 t15 Ӽt15Fuu5t15[ɬ;V=t15+9A*t15l`Jt15(I0BNt15{._ɲt15t15hIt15Bi5%$t15kt15YK)dt15BV-D@t15@|t15CerTDSD2="^259<=>>?O???@%@l@@@A*AAAA+BABBBB$CCC2=?@#AA:B%%%  247;=>>*??@+@r@@@>AAUBBC9CC"222y596=Y>a>i>u>>>>>>>?I???@@f@@@A$AAAA%B;BBBBCCC:DBDJD22}47;=_>g>o>{>>>>>>>??@%@l@@@A*AAA-BABBB$CC@DHDQD>?>5?]???@-@t@@@A[AAAA/BoBBBCCC D>?>????@:@@@ A!AnAAA#B8BBBBCCC8D>,??@@AAVB C;C>,?@AAVB C;C>>?O??0AAAGBBB+CCCh(R 7Ce&D {"5d'Q |"6B= B ?@?pAABCCj 2=?@AA+B?@?@9<@GQ]ovz~")-18<IVdptz?@47;UDMMA#G ##  %*59*# #* Location@@col@heMDQQQStderrQ Q I%4rYBox  l*>>Custom>>errornsʗҷ#  ÷# # ͸###G$GG$GGܵ5$5ED9#A#EDA#9#9*9*#9#@@@AssertUnwindSafeA R:e_0*е9#9#   GAdapter 4'GOs Simple  SimpleMessage  g÷5>Ѷ  l*"" UnsafeCell"_   'w#Ѷ  l*%"""_55 LazyKeyInner5 5$ !! BorrowRef!CW <[Zd"" BorrowRefMut"6LRepr   /Q÷:   'w#D##RawVec&'cap(ܜ 4!     !!!!D V?>C>!!BorrowMutErrorDDC#;;; AccessError !CDC5!! BorrowError`HB bb߇grE3 LayoutError ډRS9}888CapacityOverflow8 AllocError8layout8c%/S# #BNonNull#CC8f  _/G88TryReserveError8~E`T#  B#Z# #GGG'%%RcBox%strong%%weak%%%\06\''&&55QS##T#Z##<LKB& &6!6!5L"X#ʸ#89*9*  666 ! "" $crate::panic::panic_2021 \Z ZA@t15Aqt15'R$k$crate::const_format_args !"ZY fmt_internalsconst_fmt_arguments_newt158|}k pt155Db $crate::panic::unreachable_2021 !-pZA@t15*Au,t15bȾ.$crate::thread::local_impl::thread_local_inner$Cppthread_local_internals GGt15Hd3Z $crate::cfg pY$t15e8Sp GGt15Z 5F  66  $crate::unreachable!-pYt154Z>(Qs +_3t15X-FW $crate::panic \ZYt15ɱ[ggdjgglgujcg[jgg}gmjugg%hjj^ii~jhjgIh:ihg9hjKji jj*i0khhNih ODHT *@t15aB|nt15Hnt15hRt15Jnt15nm@t15H ^t15[ɬ;V=t15> PS t15Q(lt15zҏt15Lwjt15(I0BN t15hI#t15Cer)t15|蘞t157 t15.Nt t15[dخ t15*gt15XMCRt15"t15( r& t15}wNrt15YK)d&t15Mmq_Rt15:';jw t15G,ct15BV-D@'t15mYt?yt15{._ɲ!t15f}1"t15l`Jt15 Ӽt15Fuu5t15Bi5%$$t15k%t15K"t15%g:.ht15|tz!4t15+9A*t15 B t15@|(V7} zL6\m'$9q:gsnG9L)tstgYgypW5JzFeV7} zb/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cov-mark-2.0.0-pre.1/src/lib.rs !<[<%<KM 8)9( 0(   9@;*1 58A +8  *9 *FOXIQFO.5HFJIOQ7 RPECO CMK 9-&9. .* $,+;0 IP#3  :00)Q8[N;5J$% /J &+"A P%$()G )@*&5-''':D  #A ptbywG}5rrx86_64-unknown-linux-gnu=9$qWlsqcov_mark-206742618f52210at15}8888** ' !'!%%ddddd!d!w"pppp