diff --git a/snappy_test.go b/snappy_test.go
index 4dbb527..593be2f 100644
--- a/snappy_test.go
+++ b/snappy_test.go
@@ -21,7 +21,10 @@
 	"testing"
 )
 
-var download = flag.Bool("download", false, "If true, download any missing files before running benchmarks")
+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")
+)
 
 // goEncoderShouldMatchCppEncoder is whether to test that the algorithm used by
 // Go's encoder matches byte-for-byte what the C++ snappy encoder produces, on
@@ -460,12 +463,12 @@
 }
 
 const (
-	goldenText       = "testdata/Mark.Twain-Tom.Sawyer.txt"
+	goldenText       = "Mark.Twain-Tom.Sawyer.txt"
 	goldenCompressed = goldenText + ".rawsnappy"
 )
 
 func TestDecodeGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(goldenCompressed)
+	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenCompressed))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -473,7 +476,7 @@
 	if err != nil {
 		t.Fatalf("Decode: %v", err)
 	}
-	want, err := ioutil.ReadFile(goldenText)
+	want, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -483,12 +486,12 @@
 }
 
 func TestEncodeGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(goldenText)
+	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
 	got := Encode(nil, src)
-	want, err := ioutil.ReadFile(goldenCompressed)
+	want, err := ioutil.ReadFile(filepath.Join(*testdata, goldenCompressed))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -498,7 +501,7 @@
 }
 
 func TestExtendMatchGoldenInput(t *testing.T) {
-	src, err := ioutil.ReadFile(goldenText)
+	src, err := ioutil.ReadFile(filepath.Join(*testdata, goldenText))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
@@ -585,7 +588,7 @@
 		if err := downloadBenchmarkFiles(t, tf.filename); err != nil {
 			t.Fatalf("failed to download testdata: %s", err)
 		}
-		data := readFile(t, filepath.Join(benchDir, tf.filename))
+		data := readFile(t, filepath.Join(*testdata, benchDir, tf.filename))
 		if n := tf.sizeLimit; 0 < n && n < len(data) {
 			data = data[:n]
 		}
@@ -1212,12 +1215,13 @@
 	// 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.
-	benchDir = "testdata/bench"
+	// They are copied to this local directory under testdata.
+	benchDir = "bench"
 )
 
 func downloadBenchmarkFiles(b testing.TB, basename string) (errRet error) {
-	filename := filepath.Join(benchDir, basename)
+	tdBenchDir := filepath.Join(*testdata, benchDir)
+	filename := filepath.Join(tdBenchDir, basename)
 	if stat, err := os.Stat(filename); err == nil && stat.Size() != 0 {
 		return nil
 	}
@@ -1227,8 +1231,8 @@
 	}
 	// Download the official snappy C++ implementation reference test data
 	// files for benchmarking.
-	if err := os.MkdirAll(benchDir, 0777); err != nil && !os.IsExist(err) {
-		return fmt.Errorf("failed to create %s: %s", benchDir, err)
+	if err := os.MkdirAll(tdBenchDir, 0777); err != nil && !os.IsExist(err) {
+		return fmt.Errorf("failed to create %s: %s", tdBenchDir, err)
 	}
 
 	f, err := os.Create(filename)
@@ -1261,7 +1265,7 @@
 	if err := downloadBenchmarkFiles(b, testFiles[i].filename); err != nil {
 		b.Fatalf("failed to download testdata: %s", err)
 	}
-	data := readFile(b, filepath.Join(benchDir, testFiles[i].filename))
+	data := readFile(b, filepath.Join(*testdata, benchDir, testFiles[i].filename))
 	if n := testFiles[i].sizeLimit; 0 < n && n < len(data) {
 		data = data[:n]
 	}
