@@ -571,3 +571,71 @@ func Benchmark_reduce(b *testing.B) {
571571
572572 require .Equal (b , 5050 , out .(int ))
573573}
574+
575+ func Benchmark_min (b * testing.B ) {
576+ arr := []any {55 , 58 , 42 , 61 , 75 , 52 , 64 , 62 , 16 , 79 , 40 , 14 , 50 , 76 , 23 , 2 , 5 , 80 , 89 , 51 , 21 , 96 , 91 , 13 , 71 , 82 , 65 , 63 , 11 , 17 , 94 , 81 , 74 , 4 , 97 , 1 , 39 , 3 , 28 , 8 , 84 , 90 , 47 , 85 , 7 , 56 , 49 , 93 , 33 , 12 , 19 , 60 , 86 , 100 , 44 , 45 , 36 , 72 , 95 , 77 , 34 , 92 , 24 , 73 , 18 , 38 , 43 , 26 , 41 , 69 , 67 , 57 , 9 , 27 , 66 , 87 , 46 , 35 , 59 , 70 , 10 , 20 , 53 , 15 , 32 , 98 , 68 , 31 , 54 , 25 , 83 , 88 , 22 , 48 , 29 , 37 , 6 , 78 , 99 , 30 }
577+ env := map [string ]any {"arr" : arr }
578+
579+ program , err := expr .Compile (`min(arr)` , expr .Env (env ))
580+ require .NoError (b , err )
581+
582+ var out any
583+ b .ResetTimer ()
584+ for n := 0 ; n < b .N ; n ++ {
585+ out , _ = vm .Run (program , env )
586+ }
587+ b .StopTimer ()
588+
589+ require .Equal (b , 1 , out )
590+ }
591+
592+ func Benchmark_max (b * testing.B ) {
593+ arr := []any {55 , 58 , 42 , 61 , 75 , 52 , 64 , 62 , 16 , 79 , 40 , 14 , 50 , 76 , 23 , 2 , 5 , 80 , 89 , 51 , 21 , 96 , 91 , 13 , 71 , 82 , 65 , 63 , 11 , 17 , 94 , 81 , 74 , 4 , 97 , 1 , 39 , 3 , 28 , 8 , 84 , 90 , 47 , 85 , 7 , 56 , 49 , 93 , 33 , 12 , 19 , 60 , 86 , 100 , 44 , 45 , 36 , 72 , 95 , 77 , 34 , 92 , 24 , 73 , 18 , 38 , 43 , 26 , 41 , 69 , 67 , 57 , 9 , 27 , 66 , 87 , 46 , 35 , 59 , 70 , 10 , 20 , 53 , 15 , 32 , 98 , 68 , 31 , 54 , 25 , 83 , 88 , 22 , 48 , 29 , 37 , 6 , 78 , 99 , 30 }
594+ env := map [string ]any {"arr" : arr }
595+
596+ program , err := expr .Compile (`max(arr)` , expr .Env (env ))
597+ require .NoError (b , err )
598+
599+ var out any
600+ b .ResetTimer ()
601+ for n := 0 ; n < b .N ; n ++ {
602+ out , _ = vm .Run (program , env )
603+ }
604+ b .StopTimer ()
605+
606+ require .Equal (b , 100 , out )
607+ }
608+
609+ func Benchmark_mean (b * testing.B ) {
610+ arr := []any {55 , 58 , 42 , 61 , 75 , 52 , 64 , 62 , 16 , 79 , 40 , 14 , 50 , 76 , 23 , 2 , 5 , 80 , 89 , 51 , 21 , 96 , 91 , 13 , 71 , 82 , 65 , 63 , 11 , 17 , 94 , 81 , 74 , 4 , 97 , 1 , 39 , 3 , 28 , 8 , 84 , 90 , 47 , 85 , 7 , 56 , 49 , 93 , 33 , 12 , 19 , 60 , 86 , 100 , 44 , 45 , 36 , 72 , 95 , 77 , 34 , 92 , 24 , 73 , 18 , 38 , 43 , 26 , 41 , 69 , 67 , 57 , 9 , 27 , 66 , 87 , 46 , 35 , 59 , 70 , 10 , 20 , 53 , 15 , 32 , 98 , 68 , 31 , 54 , 25 , 83 , 88 , 22 , 48 , 29 , 37 , 6 , 78 , 99 , 30 }
611+ env := map [string ]any {"arr" : arr }
612+
613+ program , err := expr .Compile (`mean(arr)` , expr .Env (env ))
614+ require .NoError (b , err )
615+
616+ var out any
617+ b .ResetTimer ()
618+ for n := 0 ; n < b .N ; n ++ {
619+ out , _ = vm .Run (program , env )
620+ }
621+ b .StopTimer ()
622+
623+ require .Equal (b , 50.5 , out )
624+ }
625+
626+ func Benchmark_median (b * testing.B ) {
627+ arr := []any {55 , 58 , 42 , 61 , 75 , 52 , 64 , 62 , 16 , 79 , 40 , 14 , 50 , 76 , 23 , 2 , 5 , 80 , 89 , 51 , 21 , 96 , 91 , 13 , 71 , 82 , 65 , 63 , 11 , 17 , 94 , 81 , 74 , 4 , 97 , 1 , 39 , 3 , 28 , 8 , 84 , 90 , 47 , 85 , 7 , 56 , 49 , 93 , 33 , 12 , 19 , 60 , 86 , 100 , 44 , 45 , 36 , 72 , 95 , 77 , 34 , 92 , 24 , 73 , 18 , 38 , 43 , 26 , 41 , 69 , 67 , 57 , 9 , 27 , 66 , 87 , 46 , 35 , 59 , 70 , 10 , 20 , 53 , 15 , 32 , 98 , 68 , 31 , 54 , 25 , 83 , 88 , 22 , 48 , 29 , 37 , 6 , 78 , 99 , 30 }
628+ env := map [string ]any {"arr" : arr }
629+
630+ program , err := expr .Compile (`median(arr)` , expr .Env (env ))
631+ require .NoError (b , err )
632+
633+ var out any
634+ b .ResetTimer ()
635+ for n := 0 ; n < b .N ; n ++ {
636+ out , _ = vm .Run (program , env )
637+ }
638+ b .StopTimer ()
639+
640+ require .Equal (b , 50.5 , out )
641+ }
0 commit comments