WIP test runner for subset tests.
diff --git a/test/subset/run-tests.py b/test/subset/run-tests.py
new file mode 100755
index 0000000..90da962
--- /dev/null
+++ b/test/subset/run-tests.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+# Runs a subsetting test suite. Compares the results of subsetting via harfbuz
+# to subsetting via fonttools.
+
+from __future__ import print_function
+
+import io
+import os
+import subprocess
+import sys
+
+from subset_test_suite import SubsetTestSuite
+
+
+def cmd(command):
+	p = subprocess.Popen (
+		command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+	p.wait ()
+	print (p.stderr.read (), end="") # file=sys.stderr
+	return p.stdout.read (), p.returncode
+
+
+def run_test(test):
+	result, return_code = cmd([hb_subset,
+														 test.font_path,
+														 "--unicodes=%s" % test.unicodes()])
+
+	if return_code:
+		print ("ERROR: hb-subset failed for %s, %s, %s" % (test.font_path, test.profile_path, test.unicodes()))
+		return 1
+
+	with open(os.path.join(test_suite.get_output_directory(),
+												 test.get_font_name())) as expected:
+		if not result == expected.read():
+			print ("ERROR: hb-subset %s, %s, %s does not match expected value." % (test.font_path, test.profile_path, test.unicodes()))
+			return 1
+
+	return 0
+
+
+args = sys.argv[1:]
+if not args or sys.argv[1].find('hb-subset') == -1 or not os.path.exists (sys.argv[1]):
+	print ("First argument does not seem to point to usable hb-subset.")
+	sys.exit (1)
+hb_subset, args = args[0], args[1:]
+
+if not len(args):
+	print ("No tests supplied.")
+	sys.exit (1)
+
+fails = 0
+for path in args:
+	with io.open(path, mode="r", encoding="utf-8") as f:
+		print ("Running tests in " + path)
+		test_suite = SubsetTestSuite(path, f.read())
+		for test in test_suite.tests():
+			fails += run_test(test)
+
+if fails != 0:
+	print (str (fails) + " test(s) failed.")
+	sys.exit(1)
+else:
+	print ("All tests passed.")