Skip to content

Commit 65ef038

Browse files
DilumAluthgevchuravy
authored andcommitted
Add more granular functions for time and memory judgements (#142)
* Add more granular functions for time and memory judgements
1 parent e0b6f63 commit 65ef038

File tree

4 files changed

+85
-3
lines changed

4 files changed

+85
-3
lines changed

src/groups.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,31 @@ judge(groups::BenchmarkGroup...; kwargs...) = mapvals((x...) -> judge(x...; kwar
8282
rmskew!(group::BenchmarkGroup) = mapvals!(rmskew!, group)
8383
rmskew(group::BenchmarkGroup) = mapvals(rmskew, group)
8484

85+
isregression(f, group::BenchmarkGroup) = any((x) -> isregression(f, x), values(group))
8586
isregression(group::BenchmarkGroup) = any(isregression, values(group))
87+
88+
isimprovement(f, group::BenchmarkGroup) = any((x) -> isimprovement(f, x), values(group))
8689
isimprovement(group::BenchmarkGroup) = any(isimprovement, values(group))
90+
91+
isinvariant(f, group::BenchmarkGroup) = all((x) -> isinvariant(f, x), values(group))
8792
isinvariant(group::BenchmarkGroup) = all(isinvariant, values(group))
8893

94+
invariants(f, x) = x
8995
invariants(x) = x
96+
97+
regressions(f, x) = x
9098
regressions(x) = x
99+
100+
improvements(f, x) = x
91101
improvements(x) = x
102+
103+
invariants(f, group::BenchmarkGroup) = mapvals!((x) -> invariants(f, x), filtervals((x) -> isinvariant(f, x), group))
92104
invariants(group::BenchmarkGroup) = mapvals!(invariants, filtervals(isinvariant, group))
105+
106+
regressions(f, group::BenchmarkGroup) = mapvals!((x) -> regressions(f, x), filtervals((x) -> isregression(f, x), group))
93107
regressions(group::BenchmarkGroup) = mapvals!(regressions, filtervals(isregression, group))
108+
109+
improvements(f, group::BenchmarkGroup) = mapvals!((x) -> improvements(f, x), filtervals((x) -> isimprovement(f, x), group))
94110
improvements(group::BenchmarkGroup) = mapvals!(improvements, filtervals(isimprovement, group))
95111

96112
function loadparams!(group::BenchmarkGroup, paramsgroup::BenchmarkGroup, fields...)

src/trials.jl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,14 @@ function judge(ratio::Real, tolerance::Float64)
221221
end
222222
end
223223

224-
isimprovement(t::TrialJudgement) = time(t) == :improvement || memory(t) == :improvement
225-
isregression(t::TrialJudgement) = time(t) == :regression || memory(t) == :regression
226-
isinvariant(t::TrialJudgement) = time(t) == :invariant && memory(t) == :invariant
224+
isimprovement(f, t::TrialJudgement) = f(t) == :improvement
225+
isimprovement(t::TrialJudgement) = isimprovement(time, t) || isimprovement(memory, t)
226+
227+
isregression(f, t::TrialJudgement) = f(t) == :regression
228+
isregression(t::TrialJudgement) = isregression(time, t) || isregression(memory, t)
229+
230+
isinvariant(f, t::TrialJudgement) = f(t) == :invariant
231+
isinvariant(t::TrialJudgement) = isinvariant(time, t) && isinvariant(memory, t)
227232

228233
const colormap = (
229234
regression = :red,

test/GroupsTests.jl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,26 @@ gtrial = BenchmarkGroup([], Dict("t" => trial))
7979
judge(g1, g2; time_tolerance = 0.1, memory_tolerance = 0.1))
8080
@test ratio(g1, g2) == ratio(judge(g1, g2))
8181

82+
@test isinvariant(judge(g1, g1))
83+
@test isinvariant(time, judge(g1, g1))
84+
@test isinvariant(memory, judge(g1, g1))
85+
@test !(isregression(judge(g1, g1)))
86+
@test !(isregression(time, judge(g1, g1)))
87+
@test !(isregression(memory, judge(g1, g1)))
88+
@test !(isimprovement(judge(g1, g1)))
89+
@test !(isimprovement(time, judge(g1, g1)))
90+
@test !(isimprovement(memory, judge(g1, g1)))
91+
92+
@test BenchmarkTools.invariants(judge(g1, g2)).data == Dict("c" => judge(tc, tc))
93+
@test BenchmarkTools.invariants(time, (judge(g1, g2))).data == Dict("c" => judge(tc, tc))
94+
@test BenchmarkTools.invariants(memory, (judge(g1, g2))).data == Dict("a" => judge(t1a, t2a), "b" => judge(t1b, t2b), "c" => judge(tc, tc))
95+
@test BenchmarkTools.regressions(judge(g1, g2)).data == Dict("b" => judge(t1b, t2b))
96+
@test BenchmarkTools.regressions(time, (judge(g1, g2))).data == Dict("b" => judge(t1b, t2b))
97+
@test BenchmarkTools.regressions(memory, (judge(g1, g2))).data == Dict()
98+
@test BenchmarkTools.improvements(judge(g1, g2)).data == Dict("a" => judge(t1a, t2a))
99+
@test BenchmarkTools.improvements(time, (judge(g1, g2))).data == Dict("a" => judge(t1a, t2a))
100+
@test BenchmarkTools.improvements(memory, (judge(g1, g2))).data == Dict()
101+
82102
@test isinvariant(judge(g1, g1))
83103
@test !(isinvariant(judge(g1, g2)))
84104
@test isregression(judge(g1, g2))
@@ -89,6 +109,17 @@ gtrial = BenchmarkGroup([], Dict("t" => trial))
89109
@test regressions(judge(g1, g2)).data == Dict("b" => judge(t1b, t2b))
90110
@test improvements(judge(g1, g2)).data == Dict("a" => judge(t1a, t2a))
91111

112+
struct Bar end
113+
@test BenchmarkTools.invariants(Bar()) == Bar()
114+
@test BenchmarkTools.invariants(time, (Bar())) == Bar()
115+
@test BenchmarkTools.invariants(memory, (Bar())) == Bar()
116+
@test BenchmarkTools.regressions(Bar()) == Bar()
117+
@test BenchmarkTools.regressions(time, (Bar())) == Bar()
118+
@test BenchmarkTools.regressions(memory, (Bar())) == Bar()
119+
@test BenchmarkTools.improvements(Bar()) == Bar()
120+
@test BenchmarkTools.improvements(time, (Bar())) == Bar()
121+
@test BenchmarkTools.improvements(memory, (Bar())) == Bar()
122+
92123
@test minimum(gtrial)["t"] == minimum(gtrial["t"])
93124
@test median(gtrial)["t"] == median(gtrial["t"])
94125
@test mean(gtrial)["t"] == mean(gtrial["t"])

test/TrialsTests.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,46 @@ tj_r_2 = judge(tr; time_tolerance = 2.0, memory_tolerance = 2.0)
135135
@test isinvariant(tj_ab_2)
136136
@test isinvariant(tj_r_2)
137137

138+
@test !(isinvariant(time, tj_ab))
139+
@test !(isinvariant(time, tj_r))
140+
@test isinvariant(time, tj_ab_2)
141+
@test isinvariant(time, tj_r_2)
142+
143+
@test !(isinvariant(memory, tj_ab))
144+
@test !(isinvariant(memory, tj_r))
145+
@test isinvariant(memory, tj_ab_2)
146+
@test isinvariant(memory, tj_r_2)
147+
138148
@test isregression(tj_ab)
139149
@test isregression(tj_r)
140150
@test !(isregression(tj_ab_2))
141151
@test !(isregression(tj_r_2))
142152

153+
@test !(isregression(time, tj_ab))
154+
@test !(isregression(time, tj_r))
155+
@test !(isregression(time, tj_ab_2))
156+
@test !(isregression(time, tj_r_2))
157+
158+
@test isregression(memory, tj_ab)
159+
@test isregression(memory, tj_r)
160+
@test !(isregression(memory, tj_ab_2))
161+
@test !(isregression(memory, tj_r_2))
162+
143163
@test isimprovement(tj_ab)
144164
@test isimprovement(tj_r)
145165
@test !(isimprovement(tj_ab_2))
146166
@test !(isimprovement(tj_r_2))
147167

168+
@test isimprovement(time, tj_ab)
169+
@test isimprovement(time, tj_r)
170+
@test !(isimprovement(time, tj_ab_2))
171+
@test !(isimprovement(time, tj_r_2))
172+
173+
@test !(isimprovement(memory, tj_ab))
174+
@test !(isimprovement(memory, tj_r))
175+
@test !(isimprovement(memory, tj_ab_2))
176+
@test !(isimprovement(memory, tj_r_2))
177+
148178
###################
149179
# pretty printing #
150180
###################

0 commit comments

Comments
 (0)