@@ -6,38 +6,33 @@ macro_rules! benchmark {
66 ( $year: tt, $day: tt) => {
77 mod $day {
88 use aoc:: $year:: $day:: * ;
9- use std:: fs;
10- use std:: path:: PathBuf ;
11- use std:: sync:: OnceLock ;
9+ use std:: fs:: read_to_string ;
10+ use std:: path:: Path ;
11+ use std:: sync:: LazyLock ;
1212 use test:: Bencher ;
1313
14- fn load_once( ) -> & ' static str {
15- static DATA : OnceLock <String > = OnceLock :: new( ) ;
16- DATA . get_or_init( || {
17- let year = stringify!( $year) ;
18- let day = & format!( "{}.txt" , stringify!( $day) ) ;
19- let path: PathBuf = [ "input" , year, day] . iter( ) . collect( ) ;
20- fs:: read_to_string( path) . unwrap( )
21- } )
22- }
14+ static DATA : LazyLock <String > = LazyLock :: new( || {
15+ let year = stringify!( $year) ;
16+ let day = stringify!( $day) ;
17+ let path = Path :: new( "input" ) . join( year) . join( day) . with_extension( "txt" ) ;
18+ read_to_string( path) . unwrap( )
19+ } ) ;
2320
2421 #[ bench]
2522 fn parse_bench( b: & mut Bencher ) {
26- let data = load_once ( ) ;
23+ let data = & DATA ;
2724 b. iter( || parse( data) ) ;
2825 }
2926
3027 #[ bench]
3128 fn part1_bench( b: & mut Bencher ) {
32- let data = load_once( ) ;
33- let input = parse( data) ;
29+ let input = parse( & DATA ) ;
3430 b. iter( || part1( & input) ) ;
3531 }
3632
3733 #[ bench]
3834 fn part2_bench( b: & mut Bencher ) {
39- let data = load_once( ) ;
40- let input = parse( data) ;
35+ let input = parse( & DATA ) ;
4136 b. iter( || part2( & input) ) ;
4237 }
4338 }
0 commit comments