From 50478550e5e23426db7a8e2d63f45ddfccbf80da Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sun, 1 Mar 2020 18:30:20 +0200 Subject: 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 Reviewed-by: Kieran Bingham --- test/controls/control_value.cpp | 107 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'test/controls/control_value.cpp') 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 #include #include @@ -48,6 +49,26 @@ protected: return TestFail; } + std::array bools{ true, false }; + value.set(Span(bools)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeBool) { + cerr << "Control type mismatch after setting to bool array" << endl; + return TestFail; + } + + Span boolsResult = value.get>(); + 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 bytes{ 3, 14, 15, 9 }; + value.set(Span(bytes)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeByte) { + cerr << "Control type mismatch after setting to uint8_t array" << endl; + return TestFail; + } + + Span int8sResult = value.get>(); + 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 int32s{ 3, 14, 15, 9 }; + value.set(Span(int32s)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeInteger32) { + cerr << "Control type mismatch after setting to int32_t array" << endl; + return TestFail; + } + + Span int32sResult = value.get>(); + 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 int64s{ 3, 14, 15, 9 }; + value.set(Span(int64s)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeInteger64) { + cerr << "Control type mismatch after setting to int64_t array" << endl; + return TestFail; + } + + Span int64sResult = value.get>(); + 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 floats{ 3.141593, 2.718282, 299792458.0 }; + value.set(Span(floats)); + if (value.isNone() || !value.isArray() || + value.type() != ControlTypeFloat) { + cerr << "Control type mismatch after setting to float array" << endl; + return TestFail; + } + + Span floatsResult = value.get>(); + 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; } }; -- cgit v1.2.1