diff --git a/services/syncbase/store/ptrie/benchmark_test.go b/services/syncbase/store/ptrie/benchmark_test.go
index a24fc0d..34b7f3b 100644
--- a/services/syncbase/store/ptrie/benchmark_test.go
+++ b/services/syncbase/store/ptrie/benchmark_test.go
@@ -84,13 +84,6 @@
 	fillPtrie(b, t, keys)
 }
 
-func BenchmarkMapPut(b *testing.B) {
-	keys := generateMapKeys(b)
-	m := make(map[string]interface{})
-	b.ResetTimer()
-	fillMap(b, m, keys)
-}
-
 func BenchmarkPtrieOverwrite(b *testing.B) {
 	keys := generatePtrieKeys(b)
 	t := New(copyOnWrite)
@@ -99,14 +92,6 @@
 	fillPtrie(b, t, keys)
 }
 
-func BenchmarkMapOverwrite(b *testing.B) {
-	keys := generateMapKeys(b)
-	m := make(map[string]interface{})
-	fillMap(b, m, keys)
-	b.ResetTimer()
-	fillMap(b, m, keys)
-}
-
 func BenchmarkPtrieDelete(b *testing.B) {
 	keys := generatePtrieKeys(b)
 	t := New(copyOnWrite)
@@ -117,16 +102,6 @@
 	}
 }
 
-func BenchmarkMapDelete(b *testing.B) {
-	keys := generateMapKeys(b)
-	m := make(map[string]interface{})
-	fillMap(b, m, keys)
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		delete(m, keys[i])
-	}
-}
-
 func BenchmarkPtrieGet(b *testing.B) {
 	keys := generatePtrieKeys(b)
 	t := New(copyOnWrite)
@@ -137,16 +112,6 @@
 	}
 }
 
-func BenchmarkMapGet(b *testing.B) {
-	keys := generateMapKeys(b)
-	m := make(map[string]interface{})
-	fillMap(b, m, keys)
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		_ = m[keys[i]]
-	}
-}
-
 func BenchmarkPtrieScan(b *testing.B) {
 	keys := generatePtrieKeys(b)
 	t := New(copyOnWrite)
@@ -156,12 +121,59 @@
 	for i := 0; i < b.N; i++ {
 		s.Advance()
 	}
-	if s.Advance() {
-		panic(123)
+}
+
+func BenchmarkMapPut(b *testing.B) {
+	// Running this test takes a lot of time and benchmarking a map is not
+	// really important, so we skip the test.
+	b.SkipNow()
+	keys := generateMapKeys(b)
+	m := make(map[string]interface{})
+	b.ResetTimer()
+	fillMap(b, m, keys)
+}
+
+func BenchmarkMapOverwrite(b *testing.B) {
+	// Running this test takes a lot of time and benchmarking a map is not
+	// really important, so we skip the test.
+	b.SkipNow()
+	keys := generateMapKeys(b)
+	m := make(map[string]interface{})
+	fillMap(b, m, keys)
+	b.ResetTimer()
+	fillMap(b, m, keys)
+}
+
+func BenchmarkMapDelete(b *testing.B) {
+	// Running this test takes a lot of time and benchmarking a map is not
+	// really important, so we skip the test.
+	b.SkipNow()
+	keys := generateMapKeys(b)
+	m := make(map[string]interface{})
+	fillMap(b, m, keys)
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		delete(m, keys[i])
+	}
+}
+
+func BenchmarkMapGet(b *testing.B) {
+	// Running this test takes a lot of time and benchmarking a map is not
+	// really important, so we skip the test.
+	b.SkipNow()
+	keys := generateMapKeys(b)
+	m := make(map[string]interface{})
+	fillMap(b, m, keys)
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		_ = m[keys[i]]
 	}
 }
 
 func BenchmarkMapScan(b *testing.B) {
+	// Running this test takes a lot of time and benchmarking a map is not
+	// really important, so we skip the test.
+	b.SkipNow()
 	keys := generateMapKeys(b)
 	m := make(map[string]interface{})
 	fillMap(b, m, keys)
