diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-03-01 18:30:20 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-03-06 18:35:34 +0200 |
commit | 50478550e5e23426db7a8e2d63f45ddfccbf80da (patch) | |
tree | fd584cb406afa0f3196f0635d8b9547d0d517739 /test | |
parent | 38d6e5b9ca73dd7851ea8997cfe749529bb9f967 (diff) |
test: controls: control_value: Expand test to cover array controls
Add tests to ControlValueTest to cover array controls of all supported
types.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/controls/control_value.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/test/controls/control_value.cpp b/test/controls/control_value.cpp index 37f41530..a7ebf60f 100644 --- a/test/controls/control_value.cpp +++ b/test/controls/control_value.cpp @@ -5,6 +5,7 @@ * control_value.cpp - ControlValue tests */ +#include <algorithm> #include <iostream> #include <libcamera/controls.h> @@ -48,6 +49,26 @@ protected: return TestFail; } + std::array<bool, 2> bools{ true, false }; + value.set(Span<bool>(bools)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeBool) { + cerr << "Control type mismatch after setting to bool array" << endl; + return TestFail; + } + + Span<const bool> boolsResult = value.get<Span<const bool>>(); + if (bools.size() != boolsResult.size() || + !std::equal(bools.begin(), bools.end(), boolsResult.begin())) { + cerr << "Control value mismatch after setting to bool" << endl; + return TestFail; + } + + if (value.toString() != "[ true, false ]") { + cerr << "Control string mismatch after setting to bool array" << endl; + return TestFail; + } + /* * Integer8 type. */ @@ -68,6 +89,26 @@ protected: return TestFail; } + std::array<uint8_t, 4> bytes{ 3, 14, 15, 9 }; + value.set(Span<uint8_t>(bytes)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeByte) { + cerr << "Control type mismatch after setting to uint8_t array" << endl; + return TestFail; + } + + Span<const uint8_t> int8sResult = value.get<Span<const uint8_t>>(); + if (bytes.size() != int8sResult.size() || + !std::equal(bytes.begin(), bytes.end(), int8sResult.begin())) { + cerr << "Control value mismatch after setting to uint8_t array" << endl; + return TestFail; + } + + if (value.toString() != "[ 3, 14, 15, 9 ]") { + cerr << "Control string mismatch after setting to uint8_t array" << endl; + return TestFail; + } + /* * Integer32 type. */ @@ -88,6 +129,26 @@ protected: return TestFail; } + std::array<int32_t, 4> int32s{ 3, 14, 15, 9 }; + value.set(Span<int32_t>(int32s)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeInteger32) { + cerr << "Control type mismatch after setting to int32_t array" << endl; + return TestFail; + } + + Span<const int32_t> int32sResult = value.get<Span<const int32_t>>(); + if (int32s.size() != int32sResult.size() || + !std::equal(int32s.begin(), int32s.end(), int32sResult.begin())) { + cerr << "Control value mismatch after setting to int32_t array" << endl; + return TestFail; + } + + if (value.toString() != "[ 3, 14, 15, 9 ]") { + cerr << "Control string mismatch after setting to int32_t array" << endl; + return TestFail; + } + /* * Integer64 type. */ @@ -108,6 +169,26 @@ protected: return TestFail; } + std::array<int64_t, 4> int64s{ 3, 14, 15, 9 }; + value.set(Span<int64_t>(int64s)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeInteger64) { + cerr << "Control type mismatch after setting to int64_t array" << endl; + return TestFail; + } + + Span<const int64_t> int64sResult = value.get<Span<const int64_t>>(); + if (int64s.size() != int64sResult.size() || + !std::equal(int64s.begin(), int64s.end(), int64sResult.begin())) { + cerr << "Control value mismatch after setting to int64_t array" << endl; + return TestFail; + } + + if (value.toString() != "[ 3, 14, 15, 9 ]") { + cerr << "Control string mismatch after setting to int64_t array" << endl; + return TestFail; + } + /* * Float type. */ @@ -128,6 +209,32 @@ protected: return TestFail; } + std::array<float, 3> floats{ 3.141593, 2.718282, 299792458.0 }; + value.set(Span<float>(floats)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeFloat) { + cerr << "Control type mismatch after setting to float array" << endl; + return TestFail; + } + + Span<const float> floatsResult = value.get<Span<const float>>(); + if (floats.size() != floatsResult.size() || + !std::equal(floats.begin(), floats.end(), floatsResult.begin())) { + cerr << "Control value mismatch after setting to float array" << endl; + return TestFail; + } + + /* + * The string representation for the third value doesn't match + * the value in the floats array above, due to limited precision + * of the float type that can't properly represent the speed of + * light. + */ + if (value.toString() != "[ 3.141593, 2.718282, 299792448.000000 ]") { + cerr << "Control string mismatch after setting to float array" << endl; + return TestFail; + } + return TestPass; } }; |