diff options
Diffstat (limited to 'sources/shiboken6')
5 files changed, 56 insertions, 1 deletions
diff --git a/sources/shiboken6/tests/libsample/spaceship.cpp b/sources/shiboken6/tests/libsample/spaceship.cpp index b30f2f30f..c883f7c2f 100644 --- a/sources/shiboken6/tests/libsample/spaceship.cpp +++ b/sources/shiboken6/tests/libsample/spaceship.cpp @@ -8,6 +8,13 @@ SpaceshipComparisonTester::SpaceshipComparisonTester(int v) noexcept { } +#if __cplusplus >= 202002 || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002) +std::strong_ordering SpaceshipComparisonTester::operator<=>(int rhs) const +{ + return m_value <=> rhs; +} +#endif // C++ 20 + FreeSpaceshipComparisonTester::FreeSpaceshipComparisonTester(int v) noexcept : m_value(v) { @@ -25,3 +32,18 @@ std::strong_ordering operator<=>(FreeSpaceshipComparisonTester lhs, return lhs.value() <=> rhs.value(); } #endif // C++ 20 + +NonEqualityComparisonTester::NonEqualityComparisonTester(int v) noexcept + : m_value(v) +{ +} + +int NonEqualityComparisonTester::value() const +{ + return m_value; +} + +bool NonEqualityComparisonTester::operator==(NonEqualityComparisonTester rhs) const +{ + return m_value == rhs.m_value; +} diff --git a/sources/shiboken6/tests/libsample/spaceship.h b/sources/shiboken6/tests/libsample/spaceship.h index 0d0854fe6..26f636009 100644 --- a/sources/shiboken6/tests/libsample/spaceship.h +++ b/sources/shiboken6/tests/libsample/spaceship.h @@ -17,6 +17,7 @@ public: #if __cplusplus >= 202002 || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002) auto operator<=>(const SpaceshipComparisonTester &rhs) const = default; + std::strong_ordering operator<=>(int rhs) const; enum Enabled { HasSpaceshipOperator = 1 }; #else @@ -44,4 +45,18 @@ LIBSAMPLE_API std::strong_ordering operator<=>(FreeSpaceshipComparisonTester lhs FreeSpaceshipComparisonTester rhs); #endif // C++ 20 + +class LIBSAMPLE_API NonEqualityComparisonTester +{ +public: + explicit NonEqualityComparisonTester(int v) noexcept; + + int value() const; + + bool operator==(NonEqualityComparisonTester rhs) const; + +private: + int m_value; +}; + #endif // SPACESHIP_H diff --git a/sources/shiboken6/tests/samplebinding/CMakeLists.txt b/sources/shiboken6/tests/samplebinding/CMakeLists.txt index c9e4f601f..01f51fc2d 100644 --- a/sources/shiboken6/tests/samplebinding/CMakeLists.txt +++ b/sources/shiboken6/tests/samplebinding/CMakeLists.txt @@ -64,6 +64,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/sample/moveonly_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/moveonlyhandler_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/noimplicitconversion_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/nondefaultctor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/nonequalitycomparisontester_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/objectmodel_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/objecttype_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypebyvalue_wrapper.cpp diff --git a/sources/shiboken6/tests/samplebinding/spaceship_test.py b/sources/shiboken6/tests/samplebinding/spaceship_test.py index 92d65d4ee..95d2506ce 100644 --- a/sources/shiboken6/tests/samplebinding/spaceship_test.py +++ b/sources/shiboken6/tests/samplebinding/spaceship_test.py @@ -14,7 +14,8 @@ sys.path.append(os.fspath(Path(__file__).resolve().parents[1])) from shiboken_paths import init_paths init_paths() -from sample import FreeSpaceshipComparisonTester, SpaceshipComparisonTester +from sample import (FreeSpaceshipComparisonTester, SpaceshipComparisonTester, + NonEqualityComparisonTester) class SpaceshipTest(unittest.TestCase): @@ -31,6 +32,12 @@ class SpaceshipTest(unittest.TestCase): self.assertFalse(t1 > t2) @unittest.skipUnless(SpaceshipComparisonTester.Enabled.HasSpaceshipOperator, "< C++ 20") + def testNonHomogeneousSpaceshipOperator(self): + t = SpaceshipComparisonTester(42) + self.assertTrue(t < 43) + self.assertTrue(t > 41) + + @unittest.skipUnless(SpaceshipComparisonTester.Enabled.HasSpaceshipOperator, "< C++ 20") def testFreeSpaceshipOperator(self): """Test a free operator<=>(). It does not provide equality as it is not defaulted.""" @@ -39,6 +46,15 @@ class SpaceshipTest(unittest.TestCase): self.assertTrue(t1 < t2) self.assertFalse(t1 > t2) + @unittest.skipUnless(SpaceshipComparisonTester.Enabled.HasSpaceshipOperator, "< C++ 20") + def testNonEqualSynthetization(self): + ne_a = NonEqualityComparisonTester(1) + ne_b = NonEqualityComparisonTester(1) + self.assertTrue(ne_a == ne_b) + # Verify that different instances with same value are not reported as "not equal", + # (fooling the FallbackRichCompare() function which is generated for missing operators). + self.assertFalse(ne_a != ne_b) + if __name__ == '__main__': unittest.main() diff --git a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml index fed84ba0d..05798a6ce 100644 --- a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml +++ b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml @@ -160,6 +160,7 @@ <enum-type name="Enabled"/> </value-type> <value-type name="FreeSpaceshipComparisonTester"/> + <value-type name="NonEqualityComparisonTester"/> <primitive-type name="PStr"> <include file-name="str.h" location="global"/> |
