--- /dev/null
+// Copyright ©2017 The Gonum Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package f64
+
+import (
+ "fmt"
+ "testing"
+)
+
+var uniScal = []int64{1, 3, 10, 30, 1e2, 3e2, 1e3, 3e3, 1e4, 3e4}
+
+func BenchmarkScalUnitary(t *testing.B) {
+ tstName := "ScalUnitary"
+ for _, ln := range uniScal {
+ t.Run(fmt.Sprintf("%s-%d", tstName, ln), func(b *testing.B) {
+ b.SetBytes(64 * ln)
+ x := x[:ln]
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ ScalUnitary(a, x)
+ }
+ })
+ }
+}
+
+func BenchmarkScalUnitaryTo(t *testing.B) {
+ tstName := "ScalUnitaryTo"
+ for _, ln := range uniScal {
+ t.Run(fmt.Sprintf("%s-%d", tstName, ln), func(b *testing.B) {
+ b.SetBytes(int64(64 * ln))
+ x, y := x[:ln], y[:ln]
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ ScalUnitaryTo(y, a, x)
+ }
+ })
+ }
+}
+
+var incScal = []struct {
+ len uintptr
+ inc []int
+}{
+ {1, []int{1}},
+ {3, []int{1, 2, 4, 10}},
+ {10, []int{1, 2, 4, 10}},
+ {30, []int{1, 2, 4, 10}},
+ {1e2, []int{1, 2, 4, 10}},
+ {3e2, []int{1, 2, 4, 10}},
+ {1e3, []int{1, 2, 4, 10}},
+ {3e3, []int{1, 2, 4, 10}},
+ {1e4, []int{1, 2, 4, 10}},
+}
+
+func BenchmarkScalInc(t *testing.B) {
+ tstName := "ScalInc"
+ for _, tt := range incScal {
+ for _, inc := range tt.inc {
+ t.Run(fmt.Sprintf("%s-%d-inc(%d)", tstName, tt.len, inc), func(b *testing.B) {
+ b.SetBytes(int64(64 * tt.len))
+ tstInc := uintptr(inc)
+ for i := 0; i < b.N; i++ {
+ ScalInc(a, x, uintptr(tt.len), tstInc)
+ }
+ })
+ }
+ }
+}
+
+func BenchmarkScalIncTo(t *testing.B) {
+ tstName := "ScalIncTo"
+ for _, tt := range incScal {
+ for _, inc := range tt.inc {
+ t.Run(fmt.Sprintf("%s-%d-inc(%d)", tstName, tt.len, inc), func(b *testing.B) {
+ b.SetBytes(int64(64 * tt.len))
+ tstInc := uintptr(inc)
+ for i := 0; i < b.N; i++ {
+ ScalIncTo(z, tstInc, a, x, uintptr(tt.len), tstInc)
+ }
+ })
+ }
+ }
+}