# Copyright (C) 2013-2020 Free Software Foundation, Inc. # This program 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. # # This program 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 this program. If not, see . from __future__ import absolute_import import perftest.testresult as testresult import perftest.reporter as reporter from perftest.measure import Measure from perftest.measure import MeasurementCpuTime from perftest.measure import MeasurementWallTime from perftest.measure import MeasurementVmSize class TestCase(object): """Base class of all performance testing cases. Each sub-class should override methods execute_test, in which several GDB operations are performed and measured by attribute measure. Sub-class can also override method warm_up optionally if the test case needs warm up. """ def __init__(self, name, measure): """Constructor of TestCase. Construct an instance of TestCase with a name and a measure which is to measure the test by several different measurements. """ self.name = name self.measure = measure def execute_test(self): """Abstract method to do the actual tests.""" raise NotImplementedError("Abstract Method.") def warm_up(self): """Do some operations to warm up the environment.""" pass def run(self, warm_up=True, append=True): """Run this test case. It is a template method to invoke method warm_up, execute_test, and finally report the measured results. If parameter warm_up is True, run method warm_up. If parameter append is True, the test result will be appended instead of overwritten. """ if warm_up: self.warm_up() self.execute_test() self.measure.report(reporter.TextReporter(append), self.name) class TestCaseWithBasicMeasurements(TestCase): """Test case measuring CPU time, wall time and memory usage.""" def __init__(self, name): result_factory = testresult.SingleStatisticResultFactory() measurements = [MeasurementCpuTime(result_factory.create_result()), MeasurementWallTime(result_factory.create_result()), MeasurementVmSize(result_factory.create_result())] super (TestCaseWithBasicMeasurements, self).__init__ (name, Measure(measurements))