mirror of https://github.com/SolarLune/tetra3d.git
135 lines
2.6 KiB
Go
135 lines
2.6 KiB
Go
package tetra3d
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
// func BenchmarkAllocateVectors(b *testing.B) {
|
|
|
|
// b.ReportAllocs()
|
|
|
|
// for i := 0; i < b.N; i++ {
|
|
// vecs := make([]Vector, 0, 100)
|
|
// vecs = append(vecs, vector.Vector{0, 0, 0})
|
|
// }
|
|
|
|
// }
|
|
|
|
func BenchmarkAllocateArraysF64(b *testing.B) {
|
|
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
vecs := make([][3]float64, 0, 100)
|
|
vecs = append(vecs, [3]float64{0, 0, 0})
|
|
}
|
|
|
|
}
|
|
|
|
func BenchmarkAllocateVectorStructs(b *testing.B) {
|
|
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
vecs := make([]Vector, 0, 100)
|
|
vecs = append(vecs, Vector{0, 0, 0, 0})
|
|
}
|
|
|
|
}
|
|
|
|
// func BenchmarkMathExternalVector(b *testing.B) {
|
|
|
|
// b.StopTimer()
|
|
|
|
// maxSize := 1200
|
|
|
|
// vecs := make([]Vector, 0, maxSize)
|
|
|
|
// for i := 0; i < maxSize; i++ {
|
|
// vecs = append(vecs, vector.Vector{rand.Float64(), rand.Float64(), rand.Float64()})
|
|
// }
|
|
|
|
// b.ReportAllocs()
|
|
// b.StartTimer()
|
|
|
|
// // Main point of benchmarking
|
|
// for z := 0; z < b.N; z++ {
|
|
// for i := 0; i < maxSize-1; i++ {
|
|
// vector.In(vecs[i]).Add(vecs[i+1])
|
|
// vectorCrossUnsafe(vecs[i], vecs[i+1], vecs[i])
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
|
|
func BenchmarkMathInternalVector(b *testing.B) {
|
|
|
|
b.StopTimer()
|
|
|
|
maxSize := 1200
|
|
|
|
vecs := make([]Vector, 0, maxSize)
|
|
|
|
for i := 0; i < maxSize; i++ {
|
|
vecs = append(vecs, Vector{X: rand.Float64(), Y: rand.Float64(), Z: rand.Float64()})
|
|
}
|
|
|
|
b.ReportAllocs()
|
|
b.StartTimer()
|
|
|
|
// Main point of benchmarking
|
|
for z := 0; z < b.N; z++ {
|
|
for i := 0; i < maxSize-1; i++ {
|
|
vecs[i] = vecs[i].Add(vecs[i+1]).Cross(vecs[i+1])
|
|
}
|
|
}
|
|
|
|
// // Main point of benchmarking
|
|
// for z := 0; z < b.N; z++ {
|
|
// for i := 0; i < maxSize-1; i++ {
|
|
// vecs[i].Add(vecs[i+1]).CCross(vecs[i+1])
|
|
// }
|
|
// }
|
|
|
|
}
|
|
|
|
// Benchmark function for previous iteration of vectors, which were type definitions that just pointed to [4]float32.
|
|
|
|
type testVectorFloat [4]float64
|
|
|
|
func BenchmarkMathArrayF64(b *testing.B) {
|
|
|
|
b.StopTimer()
|
|
|
|
maxSize := 1200
|
|
|
|
vecs := make([]testVectorFloat, 0, maxSize)
|
|
|
|
for i := 0; i < maxSize; i++ {
|
|
vecs = append(vecs, testVectorFloat{rand.Float64(), rand.Float64(), rand.Float64()})
|
|
}
|
|
|
|
b.ReportAllocs()
|
|
b.StartTimer()
|
|
|
|
// Main point of benchmarking
|
|
for z := 0; z < b.N; z++ {
|
|
for i := 0; i < maxSize-1; i++ {
|
|
// Add
|
|
vecs[i][0] += vecs[i+1][0]
|
|
vecs[i][1] += vecs[i+1][1]
|
|
vecs[i][2] += vecs[i+1][2]
|
|
|
|
// Cross
|
|
ogVecY := vecs[i][1]
|
|
ogVecZ := vecs[i][2]
|
|
|
|
vecs[i][2] = vecs[i][0]*vecs[i+1][1] - vecs[i+1][0]*vecs[i][1]
|
|
vecs[i][1] = ogVecZ*vecs[i+1][1] - vecs[i+1][2]*vecs[i][0]
|
|
vecs[i][0] = ogVecY*vecs[i+1][2] - vecs[i+1][1]*ogVecZ
|
|
}
|
|
}
|
|
|
|
}
|