Add a benchdataDir flag.
diff --git a/snappy_test.go b/snappy_test.go
index 593be2f..f4813f4 100644
--- a/snappy_test.go
+++ b/snappy_test.go
@@ -22,8 +22,9 @@
 )
 
 var (
-	download = flag.Bool("download", false, "If true, download any missing files before running benchmarks")
-	testdata = flag.String("testdata", "testdata", "Directory containing the test data")
+	download     = flag.Bool("download", false, "If true, download any missing files before running benchmarks")
+	testdataDir  = flag.String("testdataDir", "testdata", "Directory containing the test data")
+	benchdataDir = flag.String("benchdataDir", "testdata/bench", "Directory containing the benchmark data")
 )
 
 // goEncoderShouldMatchCppEncoder is whether to test that the algorithm used by
@@ -468,7 +469,8 @@
 )
 
 func TestDecodeGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenCompressed))
+	tDir := filepath.FromSlash(*testdataDir)
+	src, err := ioutil.ReadFile(filepath.Join(tDir, goldenCompressed))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -476,7 +478,7 @@
 	if err != nil {
 		t.Fatalf("Decode: %v", err)
 	}
-	want, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
+	want, err := ioutil.ReadFile(filepath.Join(tDir, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -486,12 +488,13 @@
 }
 
 func TestEncodeGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
+	tDir := filepath.FromSlash(*testdataDir)
+	src, err := ioutil.ReadFile(filepath.Join(tDir, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
 	got := Encode(nil, src)
-	want, err := ioutil.ReadFile(filepath.Join(*testdata, goldenCompressed))
+	want, err := ioutil.ReadFile(filepath.Join(tDir, goldenCompressed))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -501,7 +504,8 @@
 }
 
 func TestExtendMatchGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
+	tDir := filepath.FromSlash(*testdataDir)
+	src, err := ioutil.ReadFile(filepath.Join(tDir, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -583,12 +587,13 @@
 	if msg := skipTestSameEncodingAsCpp(); msg != "" {
 		t.Skip(msg)
 	}
+	bDir := filepath.FromSlash(*benchdataDir)
 	failed := false
 	for i, tf := range testFiles {
 		if err := downloadBenchmarkFiles(t, tf.filename); err != nil {
 			t.Fatalf("failed to download testdata: %s", err)
 		}
-		data := readFile(t, filepath.Join(*testdata, benchDir, tf.filename))
+		data := readFile(t, filepath.Join(bDir, tf.filename))
 		if n := tf.sizeLimit; 0 < n && n < len(data) {
 			data = data[:n]
 		}
@@ -1214,14 +1219,11 @@
 const (
 	// The benchmark data files are at this canonical URL.
 	benchURL = "https://raw.githubusercontent.com/google/snappy/master/testdata/"
-
-	// They are copied to this local directory under testdata.
-	benchDir = "bench"
 )
 
 func downloadBenchmarkFiles(b testing.TB, basename string) (errRet error) {
-	tdBenchDir := filepath.Join(*testdata, benchDir)
-	filename := filepath.Join(tdBenchDir, basename)
+	bDir := filepath.FromSlash(*benchdataDir)
+	filename := filepath.Join(bDir, basename)
 	if stat, err := os.Stat(filename); err == nil && stat.Size() != 0 {
 		return nil
 	}
@@ -1231,8 +1233,8 @@
 	}
 	// Download the official snappy C++ implementation reference test data
 	// files for benchmarking.
-	if err := os.MkdirAll(tdBenchDir, 0777); err != nil && !os.IsExist(err) {
-		return fmt.Errorf("failed to create %s: %s", tdBenchDir, err)
+	if err := os.MkdirAll(bDir, 0777); err != nil && !os.IsExist(err) {
+		return fmt.Errorf("failed to create %s: %s", bDir, err)
 	}
 
 	f, err := os.Create(filename)
@@ -1265,7 +1267,8 @@
 	if err := downloadBenchmarkFiles(b, testFiles[i].filename); err != nil {
 		b.Fatalf("failed to download testdata: %s", err)
 	}
-	data := readFile(b, filepath.Join(*testdata, benchDir, testFiles[i].filename))
+	bDir := filepath.FromSlash(*benchdataDir)
+	data := readFile(b, filepath.Join(bDir, testFiles[i].filename))
 	if n := testFiles[i].sizeLimit; 0 < n && n < len(data) {
 		data = data[:n]
 	}