aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile15
-rw-r--r--allocbench/benchmarks/dummy.py35
-rwxr-xr-xbench.py10
-rw-r--r--tests/integration/__init__.py0
-rw-r--r--tests/integration/test_benchmarks.py39
5 files changed, 92 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index d6e393f..42d4983 100644
--- a/Makefile
+++ b/Makefile
@@ -20,8 +20,12 @@ export CXXFLAGS = -std=c++11 $(CFLAGS) -fno-exceptions
export LDFLAGS = -pthread -static-libgcc
export LDXXFLAGS = $(LDFLAGS) -static-libstdc++
-.PHONY: all clean pylint format tags check check-format check-pylint $(MAKEFILES) $(CMAKELISTS)
-all: $(OBJDIR)/ccinfo $(MAKEFILES) $(CMAKELISTS)
+.PHONY: all clean pylint format tags\
+ check check-format check-pylint check-mypy\
+ test integration-test\
+ $(MAKEFILES) $(CMAKELISTS)
+
+all: $(OBJDIR)/ccinfo $(MAKEFILES) $(CMAKELISTS)
$(CMAKELISTS):
$(eval BENCHDIR=$(OBJDIR)$(shell echo $@ | sed s/$(SRCDIR)//))
@@ -62,4 +66,9 @@ check-mypy:
tags:
ctags -R --exclude="build/*" --exclude="cache/*" --exclude="doc/*" --exclude="results/*"
-check: check-pylint check-format check-mypy
+integration-test:
+ python3 -m unittest discover -s tests/integration
+
+test: integration-test
+
+check: check-pylint check-format check-mypy test
diff --git a/allocbench/benchmarks/dummy.py b/allocbench/benchmarks/dummy.py
new file mode 100644
index 0000000..ef67891
--- /dev/null
+++ b/allocbench/benchmarks/dummy.py
@@ -0,0 +1,35 @@
+# Copyright 2020 Florian Fischer <florian.fl.fischer@fau.de>
+#
+# This file is part of allocbench.
+#
+# allocbench is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# allocbench is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with allocbench. If not, see <http://www.gnu.org/licenses/>.
+"""Definition of dummy benchmark
+
+This benchmark does nothing and is only usefull for testing allocbench"""
+
+from allocbench.benchmark import Benchmark
+
+
+class BenchmarkDummy(Benchmark):
+ """Dummy benchmark
+
+ This benchmark does nothing"""
+ def __init__(self):
+ name = "dummy"
+
+ self.cmd = "true"
+
+ self.args = {}
+
+ super().__init__(name)
diff --git a/bench.py b/bench.py
index 9b3c1c9..f821e33 100755
--- a/bench.py
+++ b/bench.py
@@ -130,10 +130,12 @@ def main():
# Prepare allocbench
print_status("Building allocbench ...")
- make_cmd = ["make"]
- if args.verbose < 2:
- make_cmd.append("-s")
- run_cmd(make_cmd, output_verbosity=1)
+ # TODO: sort out recursive makes when running integration tests through our Makefile
+ if not 'MAKELEVEL' in os.environ:
+ make_cmd = ["make", "-d"]
+ if args.verbose < 2:
+ make_cmd.append("-s")
+ run_cmd(make_cmd, output_verbosity=1)
# allocators to benchmark
allocators = collect_allocators(args.allocators)
diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/__init__.py
diff --git a/tests/integration/test_benchmarks.py b/tests/integration/test_benchmarks.py
new file mode 100644
index 0000000..a3b8ef7
--- /dev/null
+++ b/tests/integration/test_benchmarks.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+# Copyright 2020 Florian Fischer <florian.fl.fischer@fau.de>
+#
+# This file is part of allocbench.
+#
+# allocbench is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# allocbench is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with allocbench. If not, see <http://www.gnu.org/licenses/>.
+"""Integration tests for in allocbench included benchmarks"""
+
+import unittest
+import subprocess
+
+
+class TestDummy(unittest.TestCase):
+ """Test the dummy benchmark"""
+ def test_execution(self):
+ """Test if it executes successfully and outputs something"""
+ cmd = './bench.py -b dummy -a system_default -r 1 -vv'
+ res = subprocess.check_output(cmd.split(),
+ text=True,
+ stderr=subprocess.STDOUT)
+
+ # allocbench should output something
+ self.assertNotEqual(res, "")
+
+
+if __name__ == '__main__':
+ unittest.main()