Переглянути джерело

add simple benchmarks for speed testing

Arne Hormann 12 роки тому
батько
коміт
8c85695406
1 змінених файлів з 76 додано та 0 видалено
  1. 76 0
      benchmark_test.go

+ 76 - 0
benchmark_test.go

@@ -0,0 +1,76 @@
+package mysql
+
+import (
+	"database/sql"
+	"strings"
+	"testing"
+)
+
+var (
+	// dsn from driver_test.go
+	sample = []byte(strings.Repeat("0123456789abcdef", 1024*1024))
+)
+
+func BenchmarkRoundtripText(b *testing.B) {
+	db, err := sql.Open("mysql", dsn)
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	var result string
+	for i := 0; i < b.N; i++ {
+		length := 16 + i%(4*b.N)
+		test := string(sample[0:length])
+		rows, err := db.Query("SELECT \"" + test + "\"")
+		if err != nil {
+			b.Fatalf("crashed")
+		}
+		if !rows.Next() {
+			rows.Close()
+			b.Fatalf("crashed")
+		}
+		err = rows.Scan(&result)
+		if err != nil {
+			rows.Close()
+			b.Fatalf("crashed")
+		}
+		if result != test {
+			rows.Close()
+			b.Errorf("mismatch")
+		}
+		rows.Close()
+	}
+}
+
+func BenchmarkRoundtripPrepared(b *testing.B) {
+	db, err := sql.Open("mysql", dsn)
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	var result string
+	stmt, err := db.Prepare("SELECT ?")
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	for i := 0; i < b.N; i++ {
+		length := 16 + i%(4*b.N)
+		test := string(sample[0:length])
+		rows, err := stmt.Query(test)
+		if err != nil {
+			b.Fatalf("crashed")
+		}
+		if !rows.Next() {
+			rows.Close()
+			b.Fatalf("crashed")
+		}
+		err = rows.Scan(&result)
+		if err != nil {
+			rows.Close()
+			b.Fatalf("crashed")
+		}
+		if result != test {
+			rows.Close()
+			b.Errorf("mismatch")
+		}
+		rows.Close()
+	}
+}