Parcourir la source

Merge pull request #61 from arnehormann/simple-benchmarks

add simple benchmarks for speed testing
Arne Hormann il y a 12 ans
Parent
commit
d32925bb1f
1 fichiers modifiés avec 84 ajouts et 0 suppressions
  1. 84 0
      driver_test.go

+ 84 - 0
driver_test.go

@@ -1035,3 +1035,87 @@ func TestConcurrent(t *testing.T) {
 		dbt.Logf("Reached %d concurrent connections \r\n", max)
 	})
 }
+
+// BENCHMARKS
+var sample []byte
+
+func initBenchmarks() ([]byte, int, int) {
+	if sample == nil {
+		sample = []byte(strings.Repeat("0123456789abcdef", 1024*1024))
+	}
+	return sample, 16, len(sample)
+}
+
+func BenchmarkRoundtripText(b *testing.B) {
+	sample, min, max := initBenchmarks()
+	db, err := sql.Open("mysql", dsn)
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	defer db.Close()
+	var result string
+	for i := 0; i < b.N; i++ {
+		length := min + i
+		if length > max {
+			length = max
+		}
+		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) {
+	sample, min, max := initBenchmarks()
+	db, err := sql.Open("mysql", dsn)
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	defer db.Close()
+	var result string
+	stmt, err := db.Prepare("SELECT ?")
+	if err != nil {
+		b.Fatalf("crashed")
+	}
+	for i := 0; i < b.N; i++ {
+		length := min + i
+		if length > max {
+			length = max
+		}
+		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()
+	}
+}