ソースを参照

Adding basic benchmarks

Armon Dadgar 10 年 前
コミット
2ed5ac90b3
1 ファイル変更81 行追加0 行削除
  1. 81 0
      bench_test.go

+ 81 - 0
bench_test.go

@@ -0,0 +1,81 @@
+package yamux
+
+import (
+	"testing"
+)
+
+func BenchmarkPing(b *testing.B) {
+	client, server := testClientServer()
+	defer client.Close()
+	defer server.Close()
+
+	for i := 0; i < b.N; i++ {
+		rtt, err := client.Ping()
+		if err != nil {
+			b.Fatalf("err: %v", err)
+		}
+		if rtt == 0 {
+			b.Fatalf("bad: %v", rtt)
+		}
+	}
+}
+
+func BenchmarkAccept(b *testing.B) {
+	client, server := testClientServer()
+	defer client.Close()
+	defer server.Close()
+
+	go func() {
+		for i := 0; i < b.N; i++ {
+			stream, err := server.AcceptStream()
+			if err != nil {
+				return
+			}
+			stream.Close()
+		}
+	}()
+
+	for i := 0; i < b.N; i++ {
+		stream, err := client.Open()
+		if err != nil {
+			b.Fatalf("err: %v", err)
+		}
+		stream.Close()
+	}
+}
+
+func BenchmarkSendRecv(b *testing.B) {
+	client, server := testClientServer()
+	defer client.Close()
+	defer server.Close()
+
+	sendBuf := make([]byte, 512)
+	recvBuf := make([]byte, 512)
+
+	doneCh := make(chan struct{})
+	go func() {
+		stream, err := server.AcceptStream()
+		if err != nil {
+			return
+		}
+		defer stream.Close()
+		for i := 0; i < b.N; i++ {
+			if _, err := stream.Read(recvBuf); err != nil {
+				b.Fatalf("err: %v", err)
+			}
+		}
+		close(doneCh)
+	}()
+
+	stream, err := client.Open()
+	if err != nil {
+		b.Fatalf("err: %v", err)
+	}
+	defer stream.Close()
+	for i := 0; i < b.N; i++ {
+		if _, err := stream.Write(sendBuf); err != nil {
+			b.Fatalf("err: %v", err)
+		}
+	}
+	<-doneCh
+}