forked from fyne-io/fyne
-
Notifications
You must be signed in to change notification settings - Fork 0
/
geometry_benchmark_test.go
134 lines (112 loc) · 3.76 KB
/
geometry_benchmark_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//go:build !ci
// +build !ci
package fyne_test
import (
"testing"
"github.com/stretchr/testify/assert"
"fyne.io/fyne/v2"
)
func BenchmarkPosition_Add(b *testing.B) {
b.Run("Add()", benchmarkPositionAdd)
b.Run("AddXY()", benchmarkPositionAddXY)
}
func BenchmarkPosition_Subtract(b *testing.B) {
b.Run("Subtract()", benchmarkPositionSubtract)
b.Run("SubtractXY()", benchmarkPositionSubtractXY)
}
func BenchmarkSize_Add(b *testing.B) {
b.Run("Add()", benchmarkSizeAdd)
b.Run("AddWidthHeight()", benchmarkSizeAddWidthHeight)
}
func BenchmarkSize_Subtract(b *testing.B) {
b.Run("Subtract()", benchmarkSizeSubtract)
b.Run("SubtractWidthHeight()", benchmarkSizeSubtractWidthHeight)
}
// This test prevents Position.Add to be simplified to `return p.AddXY(v.Components())`
// because this slows down the speed by factor 10.
func TestPosition_Add_Speed(t *testing.T) {
add := testing.Benchmark(benchmarkPositionAdd)
addXY := testing.Benchmark(benchmarkPositionAddXY)
assert.Less(t, nsPerOpPrecise(add), nsPerOpPrecise(addXY)*5)
}
// This test prevents Position.Subtract to be simplified to `return p.SubtractXY(v.Components())`
// because this slows down the speed by factor 10.
func TestPosition_Subtract_Speed(t *testing.T) {
subtract := testing.Benchmark(benchmarkPositionSubtract)
subtractXY := testing.Benchmark(benchmarkPositionSubtractXY)
assert.Less(t, nsPerOpPrecise(subtract), nsPerOpPrecise(subtractXY)*5)
}
// This test prevents Size.Add to be simplified to `return s.AddWidthHeight(v.Components())`
// because this slows down the speed by factor 10.
func TestSize_Add_Speed(t *testing.T) {
add := testing.Benchmark(benchmarkSizeAdd)
addWidthHeight := testing.Benchmark(benchmarkSizeAddWidthHeight)
assert.Less(t, nsPerOpPrecise(add), nsPerOpPrecise(addWidthHeight)*5)
}
// This test prevents Size.Subtract to be simplified to `return s.SubtractWidthHeight(v.Components())`
// because this slows down the speed by factor 10.
func TestSize_Subtract_Speed(t *testing.T) {
subtract := testing.Benchmark(benchmarkSizeSubtract)
subtractWidthHeight := testing.Benchmark(benchmarkSizeSubtractWidthHeight)
assert.Less(t, nsPerOpPrecise(subtract), nsPerOpPrecise(subtractWidthHeight)*5)
}
var benchmarkResult interface{}
func benchmarkPositionAdd(b *testing.B) {
pos := fyne.NewPos(10, 10)
for n := 0; n < b.N; n++ {
pos = pos.Add(fyne.NewPos(float32(n), float32(n)))
}
benchmarkResult = pos
}
func benchmarkPositionAddXY(b *testing.B) {
pos := fyne.NewPos(10, 10)
for n := 0; n < b.N; n++ {
pos = pos.AddXY(float32(n), float32(n))
}
benchmarkResult = pos
}
func benchmarkPositionSubtract(b *testing.B) {
pos := fyne.NewPos(10, 10)
for n := 0; n < b.N; n++ {
pos = pos.Subtract(fyne.NewPos(float32(n), float32(n)))
}
benchmarkResult = pos
}
func benchmarkPositionSubtractXY(b *testing.B) {
pos := fyne.NewPos(10, 10)
for n := 0; n < b.N; n++ {
pos = pos.SubtractXY(float32(n), float32(n))
}
benchmarkResult = pos
}
func benchmarkSizeAdd(b *testing.B) {
size := fyne.NewSize(10, 10)
for n := 0; n < b.N; n++ {
size = size.Add(fyne.NewPos(float32(n), float32(n)))
}
benchmarkResult = size
}
func benchmarkSizeAddWidthHeight(b *testing.B) {
size := fyne.NewSize(10, 10)
for n := 0; n < b.N; n++ {
size = size.AddWidthHeight(float32(n), float32(n))
}
benchmarkResult = size
}
func benchmarkSizeSubtract(b *testing.B) {
size := fyne.NewSize(10, 10)
for n := 0; n < b.N; n++ {
size = size.Subtract(fyne.NewSize(float32(n), float32(n)))
}
benchmarkResult = size
}
func benchmarkSizeSubtractWidthHeight(b *testing.B) {
size := fyne.NewSize(10, 10)
for n := 0; n < b.N; n++ {
size = size.SubtractWidthHeight(float32(n), float32(n))
}
benchmarkResult = size
}
func nsPerOpPrecise(b testing.BenchmarkResult) float64 {
return float64(b.T.Nanoseconds()) / float64(b.N)
}