diff --git a/.clang-tidy b/.clang-tidy index f67f748b..c31544c0 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -14,6 +14,7 @@ Checks: > CheckOptions: - { key: readability-identifier-naming.ClassCase, value: CamelCase } - { key: readability-identifier-naming.FunctionCase, value: camelBack } + - { key: readability-identifier-naming.VariableCase, value: camelBack } - { key: readability-identifier-naming.ParameterCase, value: camelBack } HeaderFilterRegex: '.*' WarningsAsErrors: '*' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f18fcb67..62c39873 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -144,7 +144,7 @@ jobs: fail-fast: false matrix: platform: - - { name: Linux, os: ubuntu-latest } + - { name: Linux, os: ubuntu-22.04 } - { name: macOS, os: macos-12 } steps: diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fb2e6a1..d44561ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -537,7 +537,7 @@ add_custom_target(format COMMAND ${CMAKE_COMMAND} -DCLANG_FORMAT_EXECUTABLE=${CLANG_FORMAT_EXECUTABLE} -P ./cmake/Format.cmake WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} VERBATIM) -sfml_set_option(CLANG_TIDY_EXECUTABLE clang-tidy STRING "Override clang-tidy executable, requires minimum version 12") +sfml_set_option(CLANG_TIDY_EXECUTABLE clang-tidy STRING "Override clang-tidy executable, requires minimum version 14") add_custom_target(tidy COMMAND ${CMAKE_COMMAND} -DCLANG_TIDY_EXECUTABLE=${CLANG_TIDY_EXECUTABLE} -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} -P ./cmake/Tidy.cmake WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} VERBATIM) diff --git a/cmake/Tidy.cmake b/cmake/Tidy.cmake index 48b5a0a7..b65a82e6 100644 --- a/cmake/Tidy.cmake +++ b/cmake/Tidy.cmake @@ -13,7 +13,7 @@ endif() execute_process(COMMAND ${CLANG_TIDY_EXECUTABLE} --version OUTPUT_VARIABLE CLANG_TIDY_VERSION) string(REGEX MATCH "version ([0-9]+)" CLANG_TIDY_VERSION ${CLANG_TIDY_VERSION}) unset(CLANG_TIDY_VERSION) -if(CMAKE_MATCH_1 GREATER_EQUAL 12) +if(CMAKE_MATCH_1 GREATER_EQUAL 14) message(STATUS "Using clang-tidy version ${CMAKE_MATCH_1}") else() message(FATAL_ERROR "clang-tidy version ${CMAKE_MATCH_1} is too low") diff --git a/examples/shader/Effect.hpp b/examples/shader/Effect.hpp index 1f4c284a..6beee3f3 100644 --- a/examples/shader/Effect.hpp +++ b/examples/shader/Effect.hpp @@ -77,6 +77,7 @@ private: std::string m_name; bool m_isLoaded; + // NOLINTNEXTLINE(readability-identifier-naming) static const sf::Font* s_font; }; diff --git a/examples/shader/Shader.cpp b/examples/shader/Shader.cpp index f0b70597..49409007 100644 --- a/examples/shader/Shader.cpp +++ b/examples/shader/Shader.cpp @@ -135,19 +135,19 @@ public: bool onLoad() override { - std::uniform_real_distribution x_distribution(0, 800); - std::uniform_real_distribution y_distribution(0, 600); - std::uniform_int_distribution color_distribution(0, 255); + std::uniform_real_distribution xDistribution(0, 800); + std::uniform_real_distribution yDistribution(0, 600); + std::uniform_int_distribution colorDistribution(0, 255); // Create the points m_points.setPrimitiveType(sf::PrimitiveType::Points); for (int i = 0; i < 40000; ++i) { - auto x = x_distribution(rng); - auto y = y_distribution(rng); - auto r = static_cast(color_distribution(rng)); - auto g = static_cast(color_distribution(rng)); - auto b = static_cast(color_distribution(rng)); + auto x = xDistribution(rng); + auto y = yDistribution(rng); + auto r = static_cast(colorDistribution(rng)); + auto g = static_cast(colorDistribution(rng)); + auto b = static_cast(colorDistribution(rng)); m_points.append(sf::Vertex(sf::Vector2f(x, y), sf::Color(r, g, b))); } diff --git a/examples/tennis/Tennis.cpp b/examples/tennis/Tennis.cpp index 20939f5e..2bdb4852 100644 --- a/examples/tennis/Tennis.cpp +++ b/examples/tennis/Tennis.cpp @@ -100,8 +100,8 @@ int main() #endif // Define the paddles properties - sf::Clock AITimer; - const sf::Time AITime = sf::seconds(0.1f); + sf::Clock aiTimer; + const sf::Time aiTime = sf::seconds(0.1f); const float paddleSpeed = 400.f; float rightPaddleSpeed = 0.f; const float ballSpeed = 400.f; @@ -186,9 +186,9 @@ int main() } // Update the computer's paddle direction according to the ball position - if (AITimer.getElapsedTime() > AITime) + if (aiTimer.getElapsedTime() > aiTime) { - AITimer.restart(); + aiTimer.restart(); if (ball.getPosition().y + ballRadius > rightPaddle.getPosition().y + paddleSize.y / 2) rightPaddleSpeed = paddleSpeed; else if (ball.getPosition().y - ballRadius < rightPaddle.getPosition().y - paddleSize.y / 2) diff --git a/include/SFML/Audio/SoundFileFactory.hpp b/include/SFML/Audio/SoundFileFactory.hpp index 30993288..77521ff4 100644 --- a/include/SFML/Audio/SoundFileFactory.hpp +++ b/include/SFML/Audio/SoundFileFactory.hpp @@ -153,8 +153,10 @@ private: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTBEGIN(readability-identifier-naming) static ReaderFactoryArray s_readers; //!< List of all registered readers static WriterFactoryArray s_writers; //!< List of all registered writers + // NOLINTEND(readability-identifier-naming) }; } // namespace sf diff --git a/include/SFML/Graphics/BlendMode.hpp b/include/SFML/Graphics/BlendMode.hpp index da21efba..c979b785 100644 --- a/include/SFML/Graphics/BlendMode.hpp +++ b/include/SFML/Graphics/BlendMode.hpp @@ -152,12 +152,14 @@ SFML_GRAPHICS_API bool operator!=(const BlendMode& left, const BlendMode& right) //////////////////////////////////////////////////////////// // Commonly used blending modes //////////////////////////////////////////////////////////// +// NOLINTBEGIN(readability-identifier-naming) SFML_GRAPHICS_API extern const BlendMode BlendAlpha; //!< Blend source and dest according to dest alpha SFML_GRAPHICS_API extern const BlendMode BlendAdd; //!< Add source to dest SFML_GRAPHICS_API extern const BlendMode BlendMultiply; //!< Multiply source and dest SFML_GRAPHICS_API extern const BlendMode BlendMin; //!< Take minimum between source and dest SFML_GRAPHICS_API extern const BlendMode BlendMax; //!< Take maximum between source and dest SFML_GRAPHICS_API extern const BlendMode BlendNone; //!< Overwrite dest with source +// NOLINTEND(readability-identifier-naming) } // namespace sf diff --git a/include/SFML/Graphics/Color.hpp b/include/SFML/Graphics/Color.hpp index 46f8a0f2..214a577d 100644 --- a/include/SFML/Graphics/Color.hpp +++ b/include/SFML/Graphics/Color.hpp @@ -81,6 +81,7 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTBEGIN(readability-identifier-naming) static const Color Black; //!< Black predefined color static const Color White; //!< White predefined color static const Color Red; //!< Red predefined color @@ -90,6 +91,7 @@ public: static const Color Magenta; //!< Magenta predefined color static const Color Cyan; //!< Cyan predefined color static const Color Transparent; //!< Transparent (black) predefined color + // NOLINTEND(readability-identifier-naming) //////////////////////////////////////////////////////////// // Member data diff --git a/include/SFML/Graphics/RenderStates.hpp b/include/SFML/Graphics/RenderStates.hpp index ab8021c9..c4f194ac 100644 --- a/include/SFML/Graphics/RenderStates.hpp +++ b/include/SFML/Graphics/RenderStates.hpp @@ -106,6 +106,7 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTNEXTLINE(readability-identifier-naming) static const RenderStates Default; //!< Special instance holding the default render states //////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Shader.hpp b/include/SFML/Graphics/Shader.hpp index fbe628d4..2fafde78 100644 --- a/include/SFML/Graphics/Shader.hpp +++ b/include/SFML/Graphics/Shader.hpp @@ -82,6 +82,7 @@ public: /// \see setUniform(const std::string&, CurrentTextureType) /// //////////////////////////////////////////////////////////// + // NOLINTNEXTLINE(readability-identifier-naming) static CurrentTextureType CurrentTexture; public: diff --git a/include/SFML/Graphics/Transform.hpp b/include/SFML/Graphics/Transform.hpp index 150950a8..22719747 100644 --- a/include/SFML/Graphics/Transform.hpp +++ b/include/SFML/Graphics/Transform.hpp @@ -259,6 +259,7 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTNEXTLINE(readability-identifier-naming) static const Transform Identity; //!< The identity transform (does nothing) private: diff --git a/include/SFML/Network/IpAddress.hpp b/include/SFML/Network/IpAddress.hpp index a8a9203c..0449e456 100644 --- a/include/SFML/Network/IpAddress.hpp +++ b/include/SFML/Network/IpAddress.hpp @@ -161,9 +161,11 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTBEGIN(readability-identifier-naming) static const IpAddress Any; //!< Value representing any address (0.0.0.0) static const IpAddress LocalHost; //!< The "localhost" address (for connecting a computer to itself locally) static const IpAddress Broadcast; //!< The "broadcast" address (for sending UDP messages to everyone on a local network) + // NOLINTEND(readability-identifier-naming) private: friend SFML_NETWORK_API bool operator<(const IpAddress& left, const IpAddress& right); diff --git a/include/SFML/System/Angle.hpp b/include/SFML/System/Angle.hpp index affcc2b3..f46eec06 100644 --- a/include/SFML/System/Angle.hpp +++ b/include/SFML/System/Angle.hpp @@ -139,6 +139,7 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTNEXTLINE(readability-identifier-naming) static const Angle Zero; //!< Predefined 0 degree angle value private: diff --git a/include/SFML/System/String.hpp b/include/SFML/System/String.hpp index 06faf905..ee737529 100644 --- a/include/SFML/System/String.hpp +++ b/include/SFML/System/String.hpp @@ -56,8 +56,10 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTBEGIN(readability-identifier-naming) /// Represents an invalid position in the string static inline const std::size_t InvalidPos{std::basic_string::npos}; + // NOLINTEND(readability-identifier-naming) //////////////////////////////////////////////////////////// /// \brief Default constructor diff --git a/include/SFML/System/Time.hpp b/include/SFML/System/Time.hpp index bd4b5708..512adcf6 100644 --- a/include/SFML/System/Time.hpp +++ b/include/SFML/System/Time.hpp @@ -108,6 +108,7 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTNEXTLINE(readability-identifier-naming) static const Time Zero; //!< Predefined "zero" time value private: diff --git a/include/SFML/System/Vector2.hpp b/include/SFML/System/Vector2.hpp index 8ca34a63..c4ed07ea 100644 --- a/include/SFML/System/Vector2.hpp +++ b/include/SFML/System/Vector2.hpp @@ -217,8 +217,10 @@ public: //////////////////////////////////////////////////////////// // Static member data //////////////////////////////////////////////////////////// + // NOLINTBEGIN(readability-identifier-naming) static const Vector2 UnitX; //!< The X unit vector (1, 0), usually facing right static const Vector2 UnitY; //!< The Y unit vector (0, 1), usually facing down + // NOLINTEND(readability-identifier-naming) }; // Define the most common types diff --git a/src/SFML/Graphics/Image.cpp b/src/SFML/Graphics/Image.cpp index c5d3eab1..d3039527 100644 --- a/src/SFML/Graphics/Image.cpp +++ b/src/SFML/Graphics/Image.cpp @@ -225,16 +225,15 @@ void Image::createMaskFromColor(const Color& color, std::uint8_t alpha) std::uint8_t* dst = dstPixels + j * 4; // Interpolate RGBA components using the alpha values of the destination and source pixels - std::uint8_t src_alpha = src[3]; - std::uint8_t dst_alpha = dst[3]; - std::uint8_t out_alpha = static_cast(src_alpha + dst_alpha - src_alpha * dst_alpha / 255); + std::uint8_t srcAlpha = src[3]; + std::uint8_t dstAlpha = dst[3]; + std::uint8_t outAlpha = static_cast(srcAlpha + dstAlpha - srcAlpha * dstAlpha / 255); - dst[3] = out_alpha; + dst[3] = outAlpha; - if (out_alpha) + if (outAlpha) for (int k = 0; k < 3; k++) - dst[k] = static_cast( - (src[k] * src_alpha + dst[k] * (out_alpha - src_alpha)) / out_alpha); + dst[k] = static_cast((src[k] * srcAlpha + dst[k] * (outAlpha - srcAlpha)) / outAlpha); else for (int k = 0; k < 3; k++) dst[k] = src[k]; diff --git a/src/SFML/Graphics/ImageLoader.cpp b/src/SFML/Graphics/ImageLoader.cpp index 471ea62d..97027785 100644 --- a/src/SFML/Graphics/ImageLoader.cpp +++ b/src/SFML/Graphics/ImageLoader.cpp @@ -78,9 +78,9 @@ namespace priv //////////////////////////////////////////////////////////// ImageLoader& ImageLoader::getInstance() { - static ImageLoader Instance; + static ImageLoader instance; - return Instance; + return instance; } diff --git a/src/SFML/Window/OSX/HIDJoystickManager.cpp b/src/SFML/Window/OSX/HIDJoystickManager.cpp index 26a4b222..34b11cfd 100644 --- a/src/SFML/Window/OSX/HIDJoystickManager.cpp +++ b/src/SFML/Window/OSX/HIDJoystickManager.cpp @@ -36,7 +36,7 @@ namespace { // Using a custom run loop mode solve some issues that appears when SFML // is used with Cocoa. -const CFStringRef RunLoopMode = CFSTR("SFML_RUN_LOOP_MODE"); +const CFStringRef runLoopMode = CFSTR("SFML_RUN_LOOP_MODE"); } // namespace @@ -92,7 +92,7 @@ HIDJoystickManager::HIDJoystickManager() : m_manager(0), m_joystickCount(0) IOHIDManagerRegisterDeviceMatchingCallback(m_manager, pluggedIn, this); IOHIDManagerRegisterDeviceRemovalCallback(m_manager, pluggedOut, this); - IOHIDManagerScheduleWithRunLoop(m_manager, CFRunLoopGetCurrent(), RunLoopMode); + IOHIDManagerScheduleWithRunLoop(m_manager, CFRunLoopGetCurrent(), runLoopMode); IOHIDManagerOpen(m_manager, kIOHIDOptionsTypeNone); } @@ -101,7 +101,7 @@ HIDJoystickManager::HIDJoystickManager() : m_manager(0), m_joystickCount(0) //////////////////////////////////////////////////////////// HIDJoystickManager::~HIDJoystickManager() { - IOHIDManagerUnscheduleFromRunLoop(m_manager, CFRunLoopGetCurrent(), RunLoopMode); + IOHIDManagerUnscheduleFromRunLoop(m_manager, CFRunLoopGetCurrent(), runLoopMode); IOHIDManagerRegisterDeviceMatchingCallback(m_manager, nullptr, 0); IOHIDManagerRegisterDeviceRemovalCallback(m_manager, nullptr, 0); @@ -117,7 +117,7 @@ void HIDJoystickManager::update() while (status == kCFRunLoopRunHandledSource) { - status = CFRunLoopRunInMode(RunLoopMode, 0, true); + status = CFRunLoopRunInMode(runLoopMode, 0, true); } } diff --git a/src/SFML/Window/OSX/JoystickImpl.hpp b/src/SFML/Window/OSX/JoystickImpl.hpp index bd9d7b00..93087f77 100644 --- a/src/SFML/Window/OSX/JoystickImpl.hpp +++ b/src/SFML/Window/OSX/JoystickImpl.hpp @@ -124,6 +124,7 @@ private: unsigned int m_index; ///< SFML index Joystick::Identification m_identification; ///< Joystick identification + // NOLINTNEXTLINE(readability-identifier-naming) static Location m_locationIDs[sf::Joystick::Count]; ///< Global Joystick register /// For a corresponding SFML index, m_locationIDs is either some USB /// location or 0 if there isn't currently a connected joystick device diff --git a/src/SFML/Window/Unix/VulkanImplX11.cpp b/src/SFML/Window/Unix/VulkanImplX11.cpp index f01b7672..ccb45796 100644 --- a/src/SFML/Window/Unix/VulkanImplX11.cpp +++ b/src/SFML/Window/Unix/VulkanImplX11.cpp @@ -144,22 +144,22 @@ bool VulkanImplX11::isAvailable(bool requireGraphics) wrapper.vkEnumerateInstanceExtensionProperties(0, &extensionCount, extensionProperties.data()); // Check if the necessary extensions are available - bool has_VK_KHR_surface = false; - bool has_VK_KHR_platform_surface = false; + bool hasVkKhrSurface = false; + bool hasVkKhrPlatformSurface = false; for (const VkExtensionProperties& properties : extensionProperties) { if (!std::strcmp(properties.extensionName, VK_KHR_SURFACE_EXTENSION_NAME)) { - has_VK_KHR_surface = true; + hasVkKhrSurface = true; } else if (!std::strcmp(properties.extensionName, VK_KHR_XLIB_SURFACE_EXTENSION_NAME)) { - has_VK_KHR_platform_surface = true; + hasVkKhrPlatformSurface = true; } } - if (!has_VK_KHR_surface || !has_VK_KHR_platform_surface) + if (!hasVkKhrSurface || !hasVkKhrPlatformSurface) graphicsAvailable = false; } } diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 8a28ec43..7784ba44 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -632,9 +632,12 @@ m_lastInputTime(0) // change our window's decorations and functions according to the requested style) if (!m_fullscreen) { - Atom WMHintsAtom = getAtom("_MOTIF_WM_HINTS", false); - if (WMHintsAtom) + Atom wmHintsAtom = getAtom("_MOTIF_WM_HINTS", false); + if (wmHintsAtom) { + // NOLINTBEGIN(readability-identifier-naming) + // Disable naming check so these better match the contents of the Motif library + // https://sourceforge.net/p/motif/code/ci/master/tree/lib/Xm/MwmUtil.h constexpr unsigned long MWM_HINTS_FUNCTIONS = 1 << 0; constexpr unsigned long MWM_HINTS_DECORATIONS = 1 << 1; @@ -652,6 +655,7 @@ m_lastInputTime(0) constexpr unsigned long MWM_FUNC_MINIMIZE = 1 << 3; constexpr unsigned long MWM_FUNC_MAXIMIZE = 1 << 4; constexpr unsigned long MWM_FUNC_CLOSE = 1 << 5; + // NOLINTEND(readability-identifier-naming) struct WMHints { @@ -685,8 +689,8 @@ m_lastInputTime(0) XChangeProperty(m_display, m_window, - WMHintsAtom, - WMHintsAtom, + wmHintsAtom, + wmHintsAtom, 32, PropModeReplace, reinterpret_cast(&hints), diff --git a/test/Graphics/Transformable.test.cpp b/test/Graphics/Transformable.test.cpp index c2b727a0..562b7dbf 100644 --- a/test/Graphics/Transformable.test.cpp +++ b/test/Graphics/Transformable.test.cpp @@ -65,23 +65,23 @@ TEST_CASE("[Graphics] sf::Transformable") CHECK(transformable.getTransform().getMatrix()[14] == Approx(transform.getMatrix()[14])); CHECK(transformable.getTransform().getMatrix()[15] == Approx(transform.getMatrix()[15])); - const sf::Transform inverse_transform = transform.getInverse(); - CHECK(transformable.getInverseTransform().getMatrix()[0] == Approx(inverse_transform.getMatrix()[0])); - CHECK(transformable.getInverseTransform().getMatrix()[1] == Approx(inverse_transform.getMatrix()[1])); - CHECK(transformable.getInverseTransform().getMatrix()[2] == Approx(inverse_transform.getMatrix()[2])); - CHECK(transformable.getInverseTransform().getMatrix()[3] == Approx(inverse_transform.getMatrix()[3])); - CHECK(transformable.getInverseTransform().getMatrix()[4] == Approx(inverse_transform.getMatrix()[4])); - CHECK(transformable.getInverseTransform().getMatrix()[5] == Approx(inverse_transform.getMatrix()[5])); - CHECK(transformable.getInverseTransform().getMatrix()[6] == Approx(inverse_transform.getMatrix()[6])); - CHECK(transformable.getInverseTransform().getMatrix()[7] == Approx(inverse_transform.getMatrix()[7])); - CHECK(transformable.getInverseTransform().getMatrix()[8] == Approx(inverse_transform.getMatrix()[8])); - CHECK(transformable.getInverseTransform().getMatrix()[9] == Approx(inverse_transform.getMatrix()[9])); - CHECK(transformable.getInverseTransform().getMatrix()[10] == Approx(inverse_transform.getMatrix()[10])); - CHECK(transformable.getInverseTransform().getMatrix()[11] == Approx(inverse_transform.getMatrix()[11])); - CHECK(transformable.getInverseTransform().getMatrix()[12] == Approx(inverse_transform.getMatrix()[12])); - CHECK(transformable.getInverseTransform().getMatrix()[13] == Approx(inverse_transform.getMatrix()[13])); - CHECK(transformable.getInverseTransform().getMatrix()[14] == Approx(inverse_transform.getMatrix()[14])); - CHECK(transformable.getInverseTransform().getMatrix()[15] == Approx(inverse_transform.getMatrix()[15])); + const sf::Transform inverseTransform = transform.getInverse(); + CHECK(transformable.getInverseTransform().getMatrix()[0] == Approx(inverseTransform.getMatrix()[0])); + CHECK(transformable.getInverseTransform().getMatrix()[1] == Approx(inverseTransform.getMatrix()[1])); + CHECK(transformable.getInverseTransform().getMatrix()[2] == Approx(inverseTransform.getMatrix()[2])); + CHECK(transformable.getInverseTransform().getMatrix()[3] == Approx(inverseTransform.getMatrix()[3])); + CHECK(transformable.getInverseTransform().getMatrix()[4] == Approx(inverseTransform.getMatrix()[4])); + CHECK(transformable.getInverseTransform().getMatrix()[5] == Approx(inverseTransform.getMatrix()[5])); + CHECK(transformable.getInverseTransform().getMatrix()[6] == Approx(inverseTransform.getMatrix()[6])); + CHECK(transformable.getInverseTransform().getMatrix()[7] == Approx(inverseTransform.getMatrix()[7])); + CHECK(transformable.getInverseTransform().getMatrix()[8] == Approx(inverseTransform.getMatrix()[8])); + CHECK(transformable.getInverseTransform().getMatrix()[9] == Approx(inverseTransform.getMatrix()[9])); + CHECK(transformable.getInverseTransform().getMatrix()[10] == Approx(inverseTransform.getMatrix()[10])); + CHECK(transformable.getInverseTransform().getMatrix()[11] == Approx(inverseTransform.getMatrix()[11])); + CHECK(transformable.getInverseTransform().getMatrix()[12] == Approx(inverseTransform.getMatrix()[12])); + CHECK(transformable.getInverseTransform().getMatrix()[13] == Approx(inverseTransform.getMatrix()[13])); + CHECK(transformable.getInverseTransform().getMatrix()[14] == Approx(inverseTransform.getMatrix()[14])); + CHECK(transformable.getInverseTransform().getMatrix()[15] == Approx(inverseTransform.getMatrix()[15])); } SUBCASE("move()")