explodethosebits 0.3.0__cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. etb/__init__.py +351 -0
  2. etb/__init__.pyi +976 -0
  3. etb/_etb.cpython-39-x86_64-linux-gnu.so +0 -0
  4. etb/_version.py +34 -0
  5. etb/py.typed +2 -0
  6. explodethosebits-0.3.0.dist-info/METADATA +405 -0
  7. explodethosebits-0.3.0.dist-info/RECORD +88 -0
  8. explodethosebits-0.3.0.dist-info/WHEEL +6 -0
  9. explodethosebits-0.3.0.dist-info/licenses/LICENSE +21 -0
  10. explodethosebits-0.3.0.dist-info/sboms/auditwheel.cdx.json +1 -0
  11. explodethosebits.libs/libcudart-c3a75b33.so.12.8.90 +0 -0
  12. include/etb/bit_coordinate.hpp +45 -0
  13. include/etb/bit_extraction.hpp +79 -0
  14. include/etb/bit_pruning.hpp +122 -0
  15. include/etb/config.hpp +284 -0
  16. include/etb/cuda/arch_optimizations.cuh +358 -0
  17. include/etb/cuda/blackwell_optimizations.cuh +300 -0
  18. include/etb/cuda/cuda_common.cuh +265 -0
  19. include/etb/cuda/etb_cuda.cuh +200 -0
  20. include/etb/cuda/gpu_memory.cuh +406 -0
  21. include/etb/cuda/heuristics_kernel.cuh +315 -0
  22. include/etb/cuda/path_generator_kernel.cuh +272 -0
  23. include/etb/cuda/prefix_pruner_kernel.cuh +370 -0
  24. include/etb/cuda/signature_kernel.cuh +328 -0
  25. include/etb/early_stopping.hpp +246 -0
  26. include/etb/etb.hpp +20 -0
  27. include/etb/heuristics.hpp +165 -0
  28. include/etb/memoization.hpp +285 -0
  29. include/etb/path.hpp +86 -0
  30. include/etb/path_count.hpp +87 -0
  31. include/etb/path_generator.hpp +175 -0
  32. include/etb/prefix_trie.hpp +339 -0
  33. include/etb/reporting.hpp +437 -0
  34. include/etb/scoring.hpp +269 -0
  35. include/etb/signature.hpp +190 -0
  36. include/gmock/gmock-actions.h +2297 -0
  37. include/gmock/gmock-cardinalities.h +159 -0
  38. include/gmock/gmock-function-mocker.h +518 -0
  39. include/gmock/gmock-matchers.h +5623 -0
  40. include/gmock/gmock-more-actions.h +658 -0
  41. include/gmock/gmock-more-matchers.h +120 -0
  42. include/gmock/gmock-nice-strict.h +277 -0
  43. include/gmock/gmock-spec-builders.h +2148 -0
  44. include/gmock/gmock.h +96 -0
  45. include/gmock/internal/custom/README.md +18 -0
  46. include/gmock/internal/custom/gmock-generated-actions.h +7 -0
  47. include/gmock/internal/custom/gmock-matchers.h +37 -0
  48. include/gmock/internal/custom/gmock-port.h +40 -0
  49. include/gmock/internal/gmock-internal-utils.h +487 -0
  50. include/gmock/internal/gmock-port.h +139 -0
  51. include/gmock/internal/gmock-pp.h +279 -0
  52. include/gtest/gtest-assertion-result.h +237 -0
  53. include/gtest/gtest-death-test.h +345 -0
  54. include/gtest/gtest-matchers.h +923 -0
  55. include/gtest/gtest-message.h +252 -0
  56. include/gtest/gtest-param-test.h +546 -0
  57. include/gtest/gtest-printers.h +1161 -0
  58. include/gtest/gtest-spi.h +250 -0
  59. include/gtest/gtest-test-part.h +192 -0
  60. include/gtest/gtest-typed-test.h +331 -0
  61. include/gtest/gtest.h +2321 -0
  62. include/gtest/gtest_pred_impl.h +279 -0
  63. include/gtest/gtest_prod.h +60 -0
  64. include/gtest/internal/custom/README.md +44 -0
  65. include/gtest/internal/custom/gtest-port.h +37 -0
  66. include/gtest/internal/custom/gtest-printers.h +42 -0
  67. include/gtest/internal/custom/gtest.h +37 -0
  68. include/gtest/internal/gtest-death-test-internal.h +307 -0
  69. include/gtest/internal/gtest-filepath.h +227 -0
  70. include/gtest/internal/gtest-internal.h +1560 -0
  71. include/gtest/internal/gtest-param-util.h +1026 -0
  72. include/gtest/internal/gtest-port-arch.h +122 -0
  73. include/gtest/internal/gtest-port.h +2481 -0
  74. include/gtest/internal/gtest-string.h +178 -0
  75. include/gtest/internal/gtest-type-util.h +220 -0
  76. lib/libetb_core.a +0 -0
  77. lib64/cmake/GTest/GTestConfig.cmake +33 -0
  78. lib64/cmake/GTest/GTestConfigVersion.cmake +43 -0
  79. lib64/cmake/GTest/GTestTargets-release.cmake +49 -0
  80. lib64/cmake/GTest/GTestTargets.cmake +139 -0
  81. lib64/libgmock.a +0 -0
  82. lib64/libgmock_main.a +0 -0
  83. lib64/libgtest.a +0 -0
  84. lib64/libgtest_main.a +0 -0
  85. lib64/pkgconfig/gmock.pc +10 -0
  86. lib64/pkgconfig/gmock_main.pc +10 -0
  87. lib64/pkgconfig/gtest.pc +9 -0
  88. lib64/pkgconfig/gtest_main.pc +10 -0
@@ -0,0 +1,120 @@
1
+ // Copyright 2013, Google Inc.
2
+ // All rights reserved.
3
+ //
4
+ // Redistribution and use in source and binary forms, with or without
5
+ // modification, are permitted provided that the following conditions are
6
+ // met:
7
+ //
8
+ // * Redistributions of source code must retain the above copyright
9
+ // notice, this list of conditions and the following disclaimer.
10
+ // * Redistributions in binary form must reproduce the above
11
+ // copyright notice, this list of conditions and the following disclaimer
12
+ // in the documentation and/or other materials provided with the
13
+ // distribution.
14
+ // * Neither the name of Google Inc. nor the names of its
15
+ // contributors may be used to endorse or promote products derived from
16
+ // this software without specific prior written permission.
17
+ //
18
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ // Google Mock - a framework for writing C++ mock classes.
31
+ //
32
+ // This file implements some matchers that depend on gmock-matchers.h.
33
+ //
34
+ // Note that tests are implemented in gmock-matchers_test.cc rather than
35
+ // gmock-more-matchers-test.cc.
36
+
37
+ // IWYU pragma: private, include "gmock/gmock.h"
38
+ // IWYU pragma: friend gmock/.*
39
+
40
+ #ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
41
+ #define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
42
+
43
+ #include <ostream>
44
+ #include <string>
45
+
46
+ #include "gmock/gmock-matchers.h"
47
+
48
+ namespace testing {
49
+
50
+ // Silence C4100 (unreferenced formal
51
+ // parameter) for MSVC
52
+ GTEST_DISABLE_MSC_WARNINGS_PUSH_(4100)
53
+ #if defined(_MSC_VER) && (_MSC_VER == 1900)
54
+ // and silence C4800 (C4800: 'int *const ': forcing value
55
+ // to bool 'true' or 'false') for MSVC 14
56
+ GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800)
57
+ #endif
58
+
59
+ namespace internal {
60
+
61
+ // Implements the polymorphic IsEmpty matcher, which
62
+ // can be used as a Matcher<T> as long as T is either a container that defines
63
+ // empty() and size() (e.g. std::vector or std::string), or a C-style string.
64
+ class IsEmptyMatcher {
65
+ public:
66
+ // Matches anything that defines empty() and size().
67
+ template <typename MatcheeContainerType>
68
+ bool MatchAndExplain(const MatcheeContainerType& c,
69
+ MatchResultListener* listener) const {
70
+ if (c.empty()) {
71
+ return true;
72
+ }
73
+ *listener << "whose size is " << c.size();
74
+ return false;
75
+ }
76
+
77
+ // Matches C-style strings.
78
+ bool MatchAndExplain(const char* s, MatchResultListener* listener) const {
79
+ return MatchAndExplain(std::string(s), listener);
80
+ }
81
+
82
+ // Describes what this matcher matches.
83
+ void DescribeTo(std::ostream* os) const { *os << "is empty"; }
84
+
85
+ void DescribeNegationTo(std::ostream* os) const { *os << "isn't empty"; }
86
+ };
87
+
88
+ } // namespace internal
89
+
90
+ // Creates a polymorphic matcher that matches an empty container or C-style
91
+ // string. The container must support both size() and empty(), which all
92
+ // STL-like containers provide.
93
+ inline PolymorphicMatcher<internal::IsEmptyMatcher> IsEmpty() {
94
+ return MakePolymorphicMatcher(internal::IsEmptyMatcher());
95
+ }
96
+
97
+ // Define a matcher that matches a value that evaluates in boolean
98
+ // context to true. Useful for types that define "explicit operator
99
+ // bool" operators and so can't be compared for equality with true
100
+ // and false.
101
+ MATCHER(IsTrue, negation ? "is false" : "is true") {
102
+ return static_cast<bool>(arg);
103
+ }
104
+
105
+ // Define a matcher that matches a value that evaluates in boolean
106
+ // context to false. Useful for types that define "explicit operator
107
+ // bool" operators and so can't be compared for equality with true
108
+ // and false.
109
+ MATCHER(IsFalse, negation ? "is true" : "is false") {
110
+ return !static_cast<bool>(arg);
111
+ }
112
+
113
+ #if defined(_MSC_VER) && (_MSC_VER == 1900)
114
+ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4800
115
+ #endif
116
+ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4100
117
+
118
+ } // namespace testing
119
+
120
+ #endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
@@ -0,0 +1,277 @@
1
+ // Copyright 2008, Google Inc.
2
+ // All rights reserved.
3
+ //
4
+ // Redistribution and use in source and binary forms, with or without
5
+ // modification, are permitted provided that the following conditions are
6
+ // met:
7
+ //
8
+ // * Redistributions of source code must retain the above copyright
9
+ // notice, this list of conditions and the following disclaimer.
10
+ // * Redistributions in binary form must reproduce the above
11
+ // copyright notice, this list of conditions and the following disclaimer
12
+ // in the documentation and/or other materials provided with the
13
+ // distribution.
14
+ // * Neither the name of Google Inc. nor the names of its
15
+ // contributors may be used to endorse or promote products derived from
16
+ // this software without specific prior written permission.
17
+ //
18
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ // Implements class templates NiceMock, NaggyMock, and StrictMock.
31
+ //
32
+ // Given a mock class MockFoo that is created using Google Mock,
33
+ // NiceMock<MockFoo> is a subclass of MockFoo that allows
34
+ // uninteresting calls (i.e. calls to mock methods that have no
35
+ // EXPECT_CALL specs), NaggyMock<MockFoo> is a subclass of MockFoo
36
+ // that prints a warning when an uninteresting call occurs, and
37
+ // StrictMock<MockFoo> is a subclass of MockFoo that treats all
38
+ // uninteresting calls as errors.
39
+ //
40
+ // Currently a mock is naggy by default, so MockFoo and
41
+ // NaggyMock<MockFoo> behave like the same. However, we will soon
42
+ // switch the default behavior of mocks to be nice, as that in general
43
+ // leads to more maintainable tests. When that happens, MockFoo will
44
+ // stop behaving like NaggyMock<MockFoo> and start behaving like
45
+ // NiceMock<MockFoo>.
46
+ //
47
+ // NiceMock, NaggyMock, and StrictMock "inherit" the constructors of
48
+ // their respective base class. Therefore you can write
49
+ // NiceMock<MockFoo>(5, "a") to construct a nice mock where MockFoo
50
+ // has a constructor that accepts (int, const char*), for example.
51
+ //
52
+ // A known limitation is that NiceMock<MockFoo>, NaggyMock<MockFoo>,
53
+ // and StrictMock<MockFoo> only works for mock methods defined using
54
+ // the MOCK_METHOD* family of macros DIRECTLY in the MockFoo class.
55
+ // If a mock method is defined in a base class of MockFoo, the "nice"
56
+ // or "strict" modifier may not affect it, depending on the compiler.
57
+ // In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT
58
+ // supported.
59
+
60
+ // IWYU pragma: private, include "gmock/gmock.h"
61
+ // IWYU pragma: friend gmock/.*
62
+
63
+ #ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_NICE_STRICT_H_
64
+ #define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_NICE_STRICT_H_
65
+
66
+ #include <cstdint>
67
+ #include <type_traits>
68
+
69
+ #include "gmock/gmock-spec-builders.h"
70
+ #include "gmock/internal/gmock-port.h"
71
+
72
+ namespace testing {
73
+ template <class MockClass>
74
+ class NiceMock;
75
+ template <class MockClass>
76
+ class NaggyMock;
77
+ template <class MockClass>
78
+ class StrictMock;
79
+
80
+ namespace internal {
81
+ template <typename T>
82
+ std::true_type StrictnessModifierProbe(const NiceMock<T>&);
83
+ template <typename T>
84
+ std::true_type StrictnessModifierProbe(const NaggyMock<T>&);
85
+ template <typename T>
86
+ std::true_type StrictnessModifierProbe(const StrictMock<T>&);
87
+ std::false_type StrictnessModifierProbe(...);
88
+
89
+ template <typename T>
90
+ constexpr bool HasStrictnessModifier() {
91
+ return decltype(StrictnessModifierProbe(std::declval<const T&>()))::value;
92
+ }
93
+
94
+ // Base classes that register and deregister with testing::Mock to alter the
95
+ // default behavior around uninteresting calls. Inheriting from one of these
96
+ // classes first and then MockClass ensures the MockClass constructor is run
97
+ // after registration, and that the MockClass destructor runs before
98
+ // deregistration. This guarantees that MockClass's constructor and destructor
99
+ // run with the same level of strictness as its instance methods.
100
+
101
+ #if defined(GTEST_OS_WINDOWS) && !defined(GTEST_OS_WINDOWS_MINGW) && \
102
+ (defined(_MSC_VER) || defined(__clang__))
103
+ // We need to mark these classes with this declspec to ensure that
104
+ // the empty base class optimization is performed.
105
+ #define GTEST_INTERNAL_EMPTY_BASE_CLASS __declspec(empty_bases)
106
+ #else
107
+ #define GTEST_INTERNAL_EMPTY_BASE_CLASS
108
+ #endif
109
+
110
+ template <typename Base>
111
+ class NiceMockImpl {
112
+ public:
113
+ NiceMockImpl() {
114
+ ::testing::Mock::AllowUninterestingCalls(reinterpret_cast<uintptr_t>(this));
115
+ }
116
+
117
+ ~NiceMockImpl() {
118
+ ::testing::Mock::UnregisterCallReaction(reinterpret_cast<uintptr_t>(this));
119
+ }
120
+ };
121
+
122
+ template <typename Base>
123
+ class NaggyMockImpl {
124
+ public:
125
+ NaggyMockImpl() {
126
+ ::testing::Mock::WarnUninterestingCalls(reinterpret_cast<uintptr_t>(this));
127
+ }
128
+
129
+ ~NaggyMockImpl() {
130
+ ::testing::Mock::UnregisterCallReaction(reinterpret_cast<uintptr_t>(this));
131
+ }
132
+ };
133
+
134
+ template <typename Base>
135
+ class StrictMockImpl {
136
+ public:
137
+ StrictMockImpl() {
138
+ ::testing::Mock::FailUninterestingCalls(reinterpret_cast<uintptr_t>(this));
139
+ }
140
+
141
+ ~StrictMockImpl() {
142
+ ::testing::Mock::UnregisterCallReaction(reinterpret_cast<uintptr_t>(this));
143
+ }
144
+ };
145
+
146
+ } // namespace internal
147
+
148
+ template <class MockClass>
149
+ class GTEST_INTERNAL_EMPTY_BASE_CLASS NiceMock
150
+ : private internal::NiceMockImpl<MockClass>,
151
+ public MockClass {
152
+ public:
153
+ static_assert(!internal::HasStrictnessModifier<MockClass>(),
154
+ "Can't apply NiceMock to a class hierarchy that already has a "
155
+ "strictness modifier. See "
156
+ "https://google.github.io/googletest/"
157
+ "gmock_cook_book.html#NiceStrictNaggy");
158
+ NiceMock() : MockClass() {
159
+ static_assert(sizeof(*this) == sizeof(MockClass),
160
+ "The impl subclass shouldn't introduce any padding");
161
+ }
162
+
163
+ // Ideally, we would inherit base class's constructors through a using
164
+ // declaration, which would preserve their visibility. However, many existing
165
+ // tests rely on the fact that current implementation reexports protected
166
+ // constructors as public. These tests would need to be cleaned up first.
167
+
168
+ // Single argument constructor is special-cased so that it can be
169
+ // made explicit.
170
+ template <typename A>
171
+ explicit NiceMock(A&& arg) : MockClass(std::forward<A>(arg)) {
172
+ static_assert(sizeof(*this) == sizeof(MockClass),
173
+ "The impl subclass shouldn't introduce any padding");
174
+ }
175
+
176
+ template <typename TArg1, typename TArg2, typename... An>
177
+ NiceMock(TArg1&& arg1, TArg2&& arg2, An&&... args)
178
+ : MockClass(std::forward<TArg1>(arg1), std::forward<TArg2>(arg2),
179
+ std::forward<An>(args)...) {
180
+ static_assert(sizeof(*this) == sizeof(MockClass),
181
+ "The impl subclass shouldn't introduce any padding");
182
+ }
183
+
184
+ private:
185
+ NiceMock(const NiceMock&) = delete;
186
+ NiceMock& operator=(const NiceMock&) = delete;
187
+ };
188
+
189
+ template <class MockClass>
190
+ class GTEST_INTERNAL_EMPTY_BASE_CLASS NaggyMock
191
+ : private internal::NaggyMockImpl<MockClass>,
192
+ public MockClass {
193
+ static_assert(!internal::HasStrictnessModifier<MockClass>(),
194
+ "Can't apply NaggyMock to a class hierarchy that already has a "
195
+ "strictness modifier. See "
196
+ "https://google.github.io/googletest/"
197
+ "gmock_cook_book.html#NiceStrictNaggy");
198
+
199
+ public:
200
+ NaggyMock() : MockClass() {
201
+ static_assert(sizeof(*this) == sizeof(MockClass),
202
+ "The impl subclass shouldn't introduce any padding");
203
+ }
204
+
205
+ // Ideally, we would inherit base class's constructors through a using
206
+ // declaration, which would preserve their visibility. However, many existing
207
+ // tests rely on the fact that current implementation reexports protected
208
+ // constructors as public. These tests would need to be cleaned up first.
209
+
210
+ // Single argument constructor is special-cased so that it can be
211
+ // made explicit.
212
+ template <typename A>
213
+ explicit NaggyMock(A&& arg) : MockClass(std::forward<A>(arg)) {
214
+ static_assert(sizeof(*this) == sizeof(MockClass),
215
+ "The impl subclass shouldn't introduce any padding");
216
+ }
217
+
218
+ template <typename TArg1, typename TArg2, typename... An>
219
+ NaggyMock(TArg1&& arg1, TArg2&& arg2, An&&... args)
220
+ : MockClass(std::forward<TArg1>(arg1), std::forward<TArg2>(arg2),
221
+ std::forward<An>(args)...) {
222
+ static_assert(sizeof(*this) == sizeof(MockClass),
223
+ "The impl subclass shouldn't introduce any padding");
224
+ }
225
+
226
+ private:
227
+ NaggyMock(const NaggyMock&) = delete;
228
+ NaggyMock& operator=(const NaggyMock&) = delete;
229
+ };
230
+
231
+ template <class MockClass>
232
+ class GTEST_INTERNAL_EMPTY_BASE_CLASS StrictMock
233
+ : private internal::StrictMockImpl<MockClass>,
234
+ public MockClass {
235
+ public:
236
+ static_assert(
237
+ !internal::HasStrictnessModifier<MockClass>(),
238
+ "Can't apply StrictMock to a class hierarchy that already has a "
239
+ "strictness modifier. See "
240
+ "https://google.github.io/googletest/"
241
+ "gmock_cook_book.html#NiceStrictNaggy");
242
+ StrictMock() : MockClass() {
243
+ static_assert(sizeof(*this) == sizeof(MockClass),
244
+ "The impl subclass shouldn't introduce any padding");
245
+ }
246
+
247
+ // Ideally, we would inherit base class's constructors through a using
248
+ // declaration, which would preserve their visibility. However, many existing
249
+ // tests rely on the fact that current implementation reexports protected
250
+ // constructors as public. These tests would need to be cleaned up first.
251
+
252
+ // Single argument constructor is special-cased so that it can be
253
+ // made explicit.
254
+ template <typename A>
255
+ explicit StrictMock(A&& arg) : MockClass(std::forward<A>(arg)) {
256
+ static_assert(sizeof(*this) == sizeof(MockClass),
257
+ "The impl subclass shouldn't introduce any padding");
258
+ }
259
+
260
+ template <typename TArg1, typename TArg2, typename... An>
261
+ StrictMock(TArg1&& arg1, TArg2&& arg2, An&&... args)
262
+ : MockClass(std::forward<TArg1>(arg1), std::forward<TArg2>(arg2),
263
+ std::forward<An>(args)...) {
264
+ static_assert(sizeof(*this) == sizeof(MockClass),
265
+ "The impl subclass shouldn't introduce any padding");
266
+ }
267
+
268
+ private:
269
+ StrictMock(const StrictMock&) = delete;
270
+ StrictMock& operator=(const StrictMock&) = delete;
271
+ };
272
+
273
+ #undef GTEST_INTERNAL_EMPTY_BASE_CLASS
274
+
275
+ } // namespace testing
276
+
277
+ #endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_NICE_STRICT_H_