DryChem 1.0.0
A generic, compile-time C++ toolbox with no dependencies for the modern computational chemistry project.
Loading...
Searching...
No Matches
testPerformanceTesting.hpp
Go to the documentation of this file.
1// Copyright (c) 2020-2025 Cody R. Drisko. All rights reserved.
2// Licensed under the MIT License. See the LICENSE file in the project root for more information.
3//
4// Name: testPerformanceTesting.hpp
5// Author: crdrisko
6// Date: 10/21/2020-16:42:31
7// Description: Provides ~100% unit test coverage over all performance testing functions
8
9#ifndef DRYCHEM_COMMON_UTILITIES_LIBS_UTILITIES_TESTS_TESTTESTING_TESTPERFORMANCETESTING_HPP
10#define DRYCHEM_COMMON_UTILITIES_LIBS_UTILITIES_TESTS_TESTTESTING_TESTPERFORMANCETESTING_HPP
11
12#include <cstddef>
13
15#include <gtest/gtest.h>
16
18
19GTEST_TEST(testPerformanceTesting, timeAndInvokeReturnsAReturnTypeStruct)
20{
22
23 std::size_t iterations {1'000};
24
25 CppUtils::Testing::details::ReturnType ret = DryChem::timeAndInvoke(sumSquares, iterations);
26
27 ASSERT_TRUE(ret.time >= 0);
28 ASSERT_EQ(ret.result, 332'833'500ULL);
29}
30
31GTEST_TEST(testPerformanceTesting, timeAndInvokeWithAVoidFunctionReturnsOnlyTheTime)
32{
34
35 std::size_t iterations {1'000};
36
37 auto time = DryChem::timeAndInvoke(voidSumSquares, iterations);
38
39 ASSERT_TRUE(time >= 0);
40}
41
42GTEST_TEST(testPerformanceTesting, timeAndInvokeWithAFunctorReturnsResultAndTime)
43{
45
46 std::size_t iterations {1'000};
47
48 auto [result, time] = DryChem::timeAndInvoke(SumSquares(), iterations);
49
50 ASSERT_TRUE(time >= 0);
51 ASSERT_EQ(result, 332'833'500ULL);
52}
53
54GTEST_TEST(testPerformanceTesting, timeAndInvokeWithAMemberFunctionReturnsResultAndTime)
55{
57
58 std::size_t iterations {1'000};
59 MyClass myClass {iterations};
60
61 auto [result, time] = DryChem::timeAndInvoke(&MyClass::sumSquares, myClass);
62
63 ASSERT_TRUE(time >= 0);
64 ASSERT_EQ(result, 332'833'500ULL);
65}
66
67GTEST_TEST(testPerformanceTesting, timeAndInvokeWithAPlainFunctionReturnsResultAndTime)
68{
70
71 std::size_t iterations {1'000};
72
73 auto [result, time] = DryChem::timeAndInvoke(sumSquares, iterations);
74
75 ASSERT_TRUE(time >= 0);
76 ASSERT_EQ(result, 332'833'500ULL);
77}
78
79GTEST_TEST(testPerformanceTesting, timeAndInvokeWithALambdaFunctionReturnsResultAndTime)
80{
82
83 std::size_t iterations {1'000};
84
85 auto [result, time] = DryChem::timeAndInvoke([=]() { return sumSquares(iterations); });
86
87 ASSERT_TRUE(time >= 0);
88 ASSERT_EQ(result, 332'833'500ULL);
89}
90
91#endif
Definition testingDetails.hpp:30
unsigned long long sumSquares(unsigned long long iter)
Definition testingDetails.hpp:48
void voidSumSquares(unsigned long long iter)
Definition testingDetails.hpp:58
Definition performanceTesting.hpp:33
std::invoke_result_t< F, TArgs... > result
Definition performanceTesting.hpp:34
std::chrono::microseconds::rep time
Definition performanceTesting.hpp:35
Definition testingDetails.hpp:17
GTEST_TEST(testPerformanceTesting, timeAndInvokeReturnsAReturnTypeStruct)
Definition testPerformanceTesting.hpp:19