From 0c06e8d32c8be0e5eb67869f7b10ab561e636c8d Mon Sep 17 00:00:00 2001 From: Kristian McGurran Date: Thu, 26 Jun 2025 18:44:18 +0100 Subject: [PATCH 1/5] Moving the trig functions --- .../Accelerate/AccelerateArithmetic.h | 37 ---------------- .../Accelerate/AccelerateTrigonometry.h | 42 +++++++++++++++++++ .../AccelerateArithmeticUnitTests.cpp | 18 -------- 3 files changed, 42 insertions(+), 55 deletions(-) create mode 100644 VectorisationWrappers/Accelerate/AccelerateTrigonometry.h diff --git a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h index 4f5572c..7609ef7 100644 --- a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h +++ b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h @@ -49,41 +49,4 @@ namespace Vectorised else if constexpr (std::is_same_v) vvdiv (OutputBuffer, BufferA, BufferB, &BufferSize); } - - - // Vectorised tanh function for VDSP - template - static void tanhVectorised (const T* InputBuffer, T* OutputBuffer, const int BufferSize) - { - if constexpr (std::is_same_v) - vvtanhf (OutputBuffer, InputBuffer, &BufferSize); - else if constexpr (std::is_same_v) - vvtanh (OutputBuffer, InputBuffer, &BufferSize); - else - static_assert (sizeof(T) == 0, "Unsupported type for tanh"); - } - - // Vectorised tanh function for hard clipping - template - static void hardClipVectorised(const T* InputBuffer, T* OutputBuffer, const int BufferSize, const T* ClipLowerLimit, const T* ClipUpperLimit) - { - if constexpr (std::is_same_v) - vDSP_vclip(InputBuffer, 1, ClipLowerLimit, ClipUpperLimit, OutputBuffer, 1, BufferSize); - else if constexpr (std::is_same_v) - vDSP_vclipD(InputBuffer, 1, ClipLowerLimit, ClipUpperLimit, OutputBuffer, 1, BufferSize); - else - static_assert (sizeof(T) == 0, "Unsupported type for hard clipping"); - } - - // Vectorised tanh function for sine - template - static void sineVectorised (T* InputBuffer, const int BufferSize) - { - if constexpr (std::is_same_v) - vvsinf (InputBuffer, InputBuffer, &BufferSize); - else if constexpr (std::is_same_v) - vvsin (InputBuffer, InputBuffer, &BufferSize); - else - static_assert (sizeof(T) == 0, "Unsupported type for sine"); - } }; \ No newline at end of file diff --git a/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h new file mode 100644 index 0000000..f3dc4dc --- /dev/null +++ b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +namespace Vectorised::Trigonometry +{ + template + static void tanhVectorised (const T* WorkBuffer, T* OutputBuffer, const int BufferSize) + { + if constexpr (std::is_same_v) + vvtanhf (OutputBuffer, WorkBuffer, &BufferSize); + else if constexpr (std::is_same_v) + vvtanh (OutputBuffer, WorkBuffer, &BufferSize); + else + static_assert (sizeof(T) == 0, "Unsupported type for tanh"); + } + + // Vectorised tanh function for hard clipping + template + static void hardClipVectorised(const T* InputBuffer, T* OutputBuffer, const int BufferSize, const T* ClipLowerLimit, const T* ClipUpperLimit) + { + if constexpr (std::is_same_v) + vDSP_vclip(InputBuffer, 1, ClipLowerLimit, ClipUpperLimit, OutputBuffer, 1, BufferSize); + else if constexpr (std::is_same_v) + vDSP_vclipD(InputBuffer, 1, ClipLowerLimit, ClipUpperLimit, OutputBuffer, 1, BufferSize); + else + static_assert (sizeof(T) == 0, "Unsupported type for hard clipping"); + } + + // Vectorised tanh function for sine + template + static void sineVectorised (T* InputBuffer, const int BufferSize) + { + if constexpr (std::is_same_v) + vvsinf (InputBuffer, InputBuffer, &BufferSize); + else if constexpr (std::is_same_v) + vvsin (InputBuffer, InputBuffer, &BufferSize); + else + static_assert (sizeof(T) == 0, "Unsupported type for sine"); + } +} \ No newline at end of file diff --git a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp b/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp index d948e61..d28787f 100644 --- a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp +++ b/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp @@ -64,22 +64,4 @@ TEMPLATE_TEST_CASE ("VDSP wrapper testing", "[VDSP Wrapper]", float, double) REQUIRE (value == static_cast(1)); } } - - // SECTION ("Division Test") - // { - // Vectorised::tanhVectorised (input.data(), output.data(), 256); - // } - // - // SECTION ("Division Test") - // { - // Vectorised::sineVectorised (input.data(), 256); - // } - // - // SECTION ("Division Test") - // { - // const auto lowerLimit = -1.f; - // const auto upperLimit = -1.f; - // - // Vectorised::hardClipVectorised (input.data(), output.data(), 256, &lowerLimit, &upperLimit); - // } } \ No newline at end of file From 14e449a87f9af4d0af9ff1fb107ce01a80383260 Mon Sep 17 00:00:00 2001 From: Kristian McGurran Date: Thu, 26 Jun 2025 19:02:42 +0100 Subject: [PATCH 2/5] Moving everything into cpp --- CMakeLists.txt | 14 ++++++-------- .../Accelerate/AccelerateArithmetic.h | 1 - VectorisationWrappers/Accelerate/AccelerateRange.h | 2 +- .../Accelerate/AccelerateTrigonometry.h | 1 - .../Accelerate/AccelerateUtilities.h | 2 +- .../Accelerate/AccelerateWrapper.cpp | 9 ++++++++- 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78f4cec..e296c27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,18 +1,16 @@ cmake_minimum_required (VERSION 3.25) -project (WRAPPER DESCRIPTION "Vectoisation Wrapper with Unit tested" LANGUAGES CXX) +project (WRAPPER DESCRIPTION "Vectorisation Wrapper with Unit tested" LANGUAGES CXX) set (CMAKE_CXX_STANDARD 23) add_subdirectory (Catch2) if (APPLE) - add_executable (accelerate_DSP VectorisationWrappers/Accelerate/AccelerateArithmetic.h - VectorisationWrappers/Accelerate/AccelerateRange.h - VectorisationWrappers/Accelerate/AccelerateUtilities.h - VectorisationWrappers/AccelerateArithmeticUnitTests.cpp - VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp - VectorisationWrappers/AccelerateRangeUnitTests.cpp) + add_executable (accelerate_DSP VectorisationWrappers/Accelerate/AccelerateWrapper.cpp + VectorisationWrappers/AccelerateArithmeticUnitTests.cpp + VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp + VectorisationWrappers/AccelerateRangeUnitTests.cpp) - target_link_libraries (accelerate_DSP PRIVATE Catch2::Catch2WithMain "$") + target_link_libraries (accelerate_DSP PRIVATE Catch2::Catch2WithMain "$") ELSEIF (MSVC) message ("No Wrapper is availble") ENDIF() \ No newline at end of file diff --git a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h index 7609ef7..9652c32 100644 --- a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h +++ b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h @@ -2,7 +2,6 @@ #include -// VDSP wrapper namespace in a vectorised way namespace Vectorised { // Vectorised Addition function for VDSP diff --git a/VectorisationWrappers/Accelerate/AccelerateRange.h b/VectorisationWrappers/Accelerate/AccelerateRange.h index 9b5f9ce..bba57d7 100644 --- a/VectorisationWrappers/Accelerate/AccelerateRange.h +++ b/VectorisationWrappers/Accelerate/AccelerateRange.h @@ -1,6 +1,6 @@ #pragma once + #include -#include namespace Vectorised::Range { diff --git a/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h index f3dc4dc..11af76a 100644 --- a/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h +++ b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h @@ -1,7 +1,6 @@ #pragma once #include -#include namespace Vectorised::Trigonometry { diff --git a/VectorisationWrappers/Accelerate/AccelerateUtilities.h b/VectorisationWrappers/Accelerate/AccelerateUtilities.h index 422f238..470a8c4 100644 --- a/VectorisationWrappers/Accelerate/AccelerateUtilities.h +++ b/VectorisationWrappers/Accelerate/AccelerateUtilities.h @@ -1,7 +1,7 @@ #pragma once + #include -// VDSP wrapper namespace in a vectorised way namespace Vectorised::Utilities { template diff --git a/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp b/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp index 5d0e7b4..d471977 100644 --- a/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp +++ b/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp @@ -1,3 +1,10 @@ // -// Created by Kristian Mc Gurran on 12/06/2025. +// Including all the header files // + +#include +#include +#include "AccelerateArithmetic.h" +#include "AccelerateRange.h" +#include "AccelerateTrigonometry.h" +#include "AccelerateUtilities.h" From a8850c005e262a43d4199c3a47ba3244ffaa36c7 Mon Sep 17 00:00:00 2001 From: Kristian McGurran Date: Thu, 26 Jun 2025 19:44:04 +0100 Subject: [PATCH 3/5] Cleaning up project --- CMakeLists.txt | 18 ++++++++++-------- .../Accelerate/AccelerateArithmetic.h | 2 -- .../Accelerate/AccelerateRange.h | 2 -- .../Accelerate/AccelerateTrigonometry.h | 2 -- .../Accelerate/AccelerateUtilities.h | 2 -- .../Accelerate/AccelerateWrapper.cpp | 7 +------ .../Accelerate/AccelerateWrapper.h | 12 ++++++++++++ .../AccelerateArithmeticUnitTests.cpp | 2 +- .../AccelerateRangeUnitTests.cpp | 4 +--- .../AccelerateUtilitiesUnitTests.cpp | 3 +-- 10 files changed, 26 insertions(+), 28 deletions(-) create mode 100644 VectorisationWrappers/Accelerate/AccelerateWrapper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e296c27..ed2e6a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,12 +5,14 @@ set (CMAKE_CXX_STANDARD 23) add_subdirectory (Catch2) if (APPLE) - add_executable (accelerate_DSP VectorisationWrappers/Accelerate/AccelerateWrapper.cpp - VectorisationWrappers/AccelerateArithmeticUnitTests.cpp - VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp - VectorisationWrappers/AccelerateRangeUnitTests.cpp) + set (ACCELERATE_SOURCES VectorisationWrappers/Accelerate/AccelerateWrapper.cpp + VectorisationWrappers/AccelerateArithmeticUnitTests.cpp + VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp + VectorisationWrappers/AccelerateRangeUnitTests.cpp) - target_link_libraries (accelerate_DSP PRIVATE Catch2::Catch2WithMain "$") -ELSEIF (MSVC) - message ("No Wrapper is availble") -ENDIF() \ No newline at end of file + add_executable(accelerate_DSP ${ACCELERATE_SOURCES}) + + target_link_libraries (accelerate_DSP PRIVATE Catch2::Catch2WithMain "$") +elseif (MSVC) + message ("No Wrapper") +endif() \ No newline at end of file diff --git a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h index 9652c32..1e8a206 100644 --- a/VectorisationWrappers/Accelerate/AccelerateArithmetic.h +++ b/VectorisationWrappers/Accelerate/AccelerateArithmetic.h @@ -1,7 +1,5 @@ #pragma once -#include - namespace Vectorised { // Vectorised Addition function for VDSP diff --git a/VectorisationWrappers/Accelerate/AccelerateRange.h b/VectorisationWrappers/Accelerate/AccelerateRange.h index bba57d7..323cd90 100644 --- a/VectorisationWrappers/Accelerate/AccelerateRange.h +++ b/VectorisationWrappers/Accelerate/AccelerateRange.h @@ -1,7 +1,5 @@ #pragma once -#include - namespace Vectorised::Range { template diff --git a/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h index 11af76a..752698c 100644 --- a/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h +++ b/VectorisationWrappers/Accelerate/AccelerateTrigonometry.h @@ -1,7 +1,5 @@ #pragma once -#include - namespace Vectorised::Trigonometry { template diff --git a/VectorisationWrappers/Accelerate/AccelerateUtilities.h b/VectorisationWrappers/Accelerate/AccelerateUtilities.h index 470a8c4..af4562b 100644 --- a/VectorisationWrappers/Accelerate/AccelerateUtilities.h +++ b/VectorisationWrappers/Accelerate/AccelerateUtilities.h @@ -1,7 +1,5 @@ #pragma once -#include - namespace Vectorised::Utilities { template diff --git a/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp b/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp index d471977..d5fc61e 100644 --- a/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp +++ b/VectorisationWrappers/Accelerate/AccelerateWrapper.cpp @@ -2,9 +2,4 @@ // Including all the header files // -#include -#include -#include "AccelerateArithmetic.h" -#include "AccelerateRange.h" -#include "AccelerateTrigonometry.h" -#include "AccelerateUtilities.h" +#include "AccelerateWrapper.h" \ No newline at end of file diff --git a/VectorisationWrappers/Accelerate/AccelerateWrapper.h b/VectorisationWrappers/Accelerate/AccelerateWrapper.h new file mode 100644 index 0000000..39ed8be --- /dev/null +++ b/VectorisationWrappers/Accelerate/AccelerateWrapper.h @@ -0,0 +1,12 @@ +// +// Including all the header files +// + +#pragma once + +#include +#include +#include "AccelerateArithmetic.h" +#include "AccelerateRange.h" +#include "AccelerateTrigonometry.h" +#include "AccelerateUtilities.h" diff --git a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp b/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp index d28787f..bd5bbf4 100644 --- a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp +++ b/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp @@ -1,6 +1,6 @@ // Unit tests for VDSP WRAPPER -#include "Accelerate/AccelerateArithmetic.h" +#include "Accelerate/AccelerateWrapper.h" #include #include diff --git a/VectorisationWrappers/AccelerateRangeUnitTests.cpp b/VectorisationWrappers/AccelerateRangeUnitTests.cpp index f8845c9..ae617aa 100644 --- a/VectorisationWrappers/AccelerateRangeUnitTests.cpp +++ b/VectorisationWrappers/AccelerateRangeUnitTests.cpp @@ -1,6 +1,4 @@ -#include -#include "Accelerate/AccelerateRange.h" -#include "Accelerate/AccelerateUtilities.h" +#include "Accelerate/AccelerateWrapper.h" #include #include diff --git a/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp b/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp index 0994c08..9e79960 100644 --- a/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp +++ b/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp @@ -1,5 +1,4 @@ -#include -#include "Accelerate/AccelerateUtilities.h" +#include "Accelerate/AccelerateWrapper.h" #include #include From ed4f7190222e158f7a54c3b838a255485d098407 Mon Sep 17 00:00:00 2001 From: Kristian McGurran Date: Thu, 26 Jun 2025 20:04:19 +0100 Subject: [PATCH 4/5] Trig functions added with tests --- CMakeLists.txt | 7 +-- .../Tests}/AccelerateArithmeticUnitTests.cpp | 2 +- .../Tests}/AccelerateRangeUnitTests.cpp | 2 +- .../Tests/AccelerateTrigonometryUnitTests.cpp | 44 +++++++++++++++++++ .../Tests}/AccelerateUtilitiesUnitTests.cpp | 2 +- 5 files changed, 51 insertions(+), 6 deletions(-) rename VectorisationWrappers/{ => Accelerate/Tests}/AccelerateArithmeticUnitTests.cpp (97%) rename VectorisationWrappers/{ => Accelerate/Tests}/AccelerateRangeUnitTests.cpp (97%) create mode 100644 VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp rename VectorisationWrappers/{ => Accelerate/Tests}/AccelerateUtilitiesUnitTests.cpp (97%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed2e6a5..882dcab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,9 +6,10 @@ add_subdirectory (Catch2) if (APPLE) set (ACCELERATE_SOURCES VectorisationWrappers/Accelerate/AccelerateWrapper.cpp - VectorisationWrappers/AccelerateArithmeticUnitTests.cpp - VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp - VectorisationWrappers/AccelerateRangeUnitTests.cpp) + VectorisationWrappers/Accelerate/Tests/AccelerateArithmeticUnitTests.cpp + VectorisationWrappers/Accelerate/Tests/AccelerateUtilitiesUnitTests.cpp + VectorisationWrappers/Accelerate/Tests/AccelerateRangeUnitTests.cpp + VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp) add_executable(accelerate_DSP ${ACCELERATE_SOURCES}) diff --git a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp b/VectorisationWrappers/Accelerate/Tests/AccelerateArithmeticUnitTests.cpp similarity index 97% rename from VectorisationWrappers/AccelerateArithmeticUnitTests.cpp rename to VectorisationWrappers/Accelerate/Tests/AccelerateArithmeticUnitTests.cpp index bd5bbf4..e2ad059 100644 --- a/VectorisationWrappers/AccelerateArithmeticUnitTests.cpp +++ b/VectorisationWrappers/Accelerate/Tests/AccelerateArithmeticUnitTests.cpp @@ -1,6 +1,6 @@ // Unit tests for VDSP WRAPPER -#include "Accelerate/AccelerateWrapper.h" +#include "../AccelerateWrapper.h" #include #include diff --git a/VectorisationWrappers/AccelerateRangeUnitTests.cpp b/VectorisationWrappers/Accelerate/Tests/AccelerateRangeUnitTests.cpp similarity index 97% rename from VectorisationWrappers/AccelerateRangeUnitTests.cpp rename to VectorisationWrappers/Accelerate/Tests/AccelerateRangeUnitTests.cpp index ae617aa..ff3afe0 100644 --- a/VectorisationWrappers/AccelerateRangeUnitTests.cpp +++ b/VectorisationWrappers/Accelerate/Tests/AccelerateRangeUnitTests.cpp @@ -1,4 +1,4 @@ -#include "Accelerate/AccelerateWrapper.h" +#include "../AccelerateWrapper.h" #include #include diff --git a/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp b/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp new file mode 100644 index 0000000..3533d1a --- /dev/null +++ b/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp @@ -0,0 +1,44 @@ +#include "../AccelerateWrapper.h" +#include +#include +#include +#include + +TEMPLATE_TEST_CASE("Accelerate Trigonometry Unit Testing", "[Accelerate Trigonometry]", float, double) +{ + using T = TestType; + + constexpr auto bufferSize = 1024; + + std::vector workingBuffer (bufferSize); + workingBuffer.assign (bufferSize, static_cast(1)); + + SECTION ("Sine Function Tests") + { + auto sinValue = static_cast (std::sin (1.f)); + + Vectorised::Trigonometry::sineVectorised (workingBuffer.data(), bufferSize); + + for (const auto& value : workingBuffer) + { + REQUIRE (value == Catch::Approx (sinValue)); + } + } + + SECTION ("Tanh Function Tests") + { + workingBuffer.assign (bufferSize, static_cast (10)); + const auto tanhValue = static_cast (std::tanh (10.f)); + + Vectorised::Trigonometry::tanhVectorised (workingBuffer.data(), workingBuffer.data(), bufferSize); + + for (const auto& value : workingBuffer) + { + REQUIRE (value == Catch::Approx (tanhValue)); + } + } + + SECTION ("Sigmud Function Tests") + { + } +} \ No newline at end of file diff --git a/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp b/VectorisationWrappers/Accelerate/Tests/AccelerateUtilitiesUnitTests.cpp similarity index 97% rename from VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp rename to VectorisationWrappers/Accelerate/Tests/AccelerateUtilitiesUnitTests.cpp index 9e79960..ec826de 100644 --- a/VectorisationWrappers/AccelerateUtilitiesUnitTests.cpp +++ b/VectorisationWrappers/Accelerate/Tests/AccelerateUtilitiesUnitTests.cpp @@ -1,4 +1,4 @@ -#include "Accelerate/AccelerateWrapper.h" +#include "../AccelerateWrapper.h" #include #include From bc4bcd44a3a83eccb5373402a76ad1c443a21009 Mon Sep 17 00:00:00 2001 From: Kristian McGurran Date: Fri, 27 Jun 2025 08:28:22 +0100 Subject: [PATCH 5/5] Rough test implementation --- .../Tests/AccelerateTrigonometryUnitTests.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp b/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp index 3533d1a..a22fa08 100644 --- a/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp +++ b/VectorisationWrappers/Accelerate/Tests/AccelerateTrigonometryUnitTests.cpp @@ -40,5 +40,23 @@ TEMPLATE_TEST_CASE("Accelerate Trigonometry Unit Testing", "[Accelerate Trigonom SECTION ("Sigmud Function Tests") { + const auto minValue = static_cast(-1); + const auto maxValue = static_cast(1); + + workingBuffer.assign (bufferSize, static_cast (-10)); + Vectorised::Trigonometry::hardClipVectorised (workingBuffer.data(), workingBuffer.data(), bufferSize, &minValue, &maxValue); + + for (const auto& value : workingBuffer) + { + REQUIRE (value == Catch::Approx (minValue)); + } + + workingBuffer.assign (bufferSize, static_cast (10)); + Vectorised::Trigonometry::hardClipVectorised (workingBuffer.data(), workingBuffer.data(), bufferSize, &minValue, &maxValue); + + for (const auto& value : workingBuffer) + { + REQUIRE (value == Catch::Approx (maxValue)); + } } } \ No newline at end of file