initial version of example tests
diff --git a/test/run_examples_test.py b/test/run_examples_test.py
new file mode 100755
index 0000000..4a73b99
--- /dev/null
+++ b/test/run_examples_test.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+#-------------------------------------------------------------------------------
+# test/run_examples_test.py
+#
+# Run the examples and compare their output to a reference
+#
+# Eli Bendersky (eliben@gmail.com)
+# This code is in the public domain
+#-------------------------------------------------------------------------------
+import os, sys
+import logging
+sys.path.insert(0, '.')
+from test.utils import run_exe, is_in_rootdir, dump_output_to_temp_files
+
+
+# Create a global logger object
+#
+testlog = logging.getLogger('run_examples_test')
+testlog.setLevel(logging.DEBUG)
+testlog.addHandler(logging.StreamHandler(sys.stdout))
+
+
+def discover_examples():
+    """ Return paths to all example scripts. Assume we're in the root source
+        dir of pyelftools.
+    """
+    root = './examples'
+    for filename in os.listdir(root):
+        if os.path.splitext(filename)[1] == '.py':
+            yield os.path.join(root, filename)
+
+
+def reference_output_path(example_path):
+    """ Compute the reference output path from a given example path.
+    """
+    examples_root, example_name = os.path.split(example_path)
+    example_noext, _ = os.path.splitext(example_name)
+    return os.path.join(examples_root, 'reference_output', example_noext + '.out')
+
+
+def run_example_and_compare(example_path):
+    testlog.info("Example '%s'" % example_path)
+
+    reference_path = reference_output_path(example_path)
+    ref_str = ''
+    try:
+        with open(reference_path) as ref_f:
+            ref_str = ref_f.read()
+    except (IOError, OSError) as e:
+        testlog.info('.......ERROR - reference output cannot be read! - %s' % e)
+        return False
+
+    rc, example_out = run_exe(example_path, ['./examples/sample_exe64.elf'])
+    if rc != 0:
+        testlog.info('.......ERROR - example returned error code %s' % rc)
+        return False
+    
+    if example_out == ref_str:
+        return True
+    else:
+        testlog.info('.......FAIL comparison')
+        dump_output_to_temp_files(testlog, example_out)
+        return False
+
+
+def main():
+    if not is_in_rootdir():
+        testlog.error('Error: Please run me from the root dir of pyelftools!')
+        return 1
+
+    success = True
+    for example_path in discover_examples():
+        if success:
+            success = success and run_example_and_compare(example_path)
+
+    if success:
+        testlog.info('\nConclusion: SUCCESS')
+        return 0
+    else:
+        testlog.info('\nConclusion: FAIL')
+        return 1
+
+
+if __name__ == '__main__':
+    sys.exit(main())
+