[libcamera-devel] [PATCH] test: v4l2_device: Provide compile time assertions

Kieran Bingham kieran.bingham at ideasonboard.com
Mon Jan 21 11:28:26 CET 2019


The V4L2Capability structure is inherited from struct v4l2_capability only
to provide an interface. It must not extend the type or data.

Enforce this with a static assertion with sizeof() comparisons.

There is no need here for a specific test binary which will always return
TEST_PASS when compiled, as this test failure will be caught at compile time.
In light of this - the static compile time assertion is added to the
V4L2DeviceTest base class.

Should there be a large number of static assertions required, they could be
moved to their own unit for clarity.

Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 test/v4l2_device/v4l2_device_test.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/test/v4l2_device/v4l2_device_test.cpp b/test/v4l2_device/v4l2_device_test.cpp
index 362553712caa..97876f8d65db 100644
--- a/test/v4l2_device/v4l2_device_test.cpp
+++ b/test/v4l2_device/v4l2_device_test.cpp
@@ -5,6 +5,7 @@
  * libcamera V4L2 API tests
  */
 
+#include <assert.h>
 #include <iostream>
 #include <sys/stat.h>
 
@@ -41,3 +42,8 @@ void V4L2DeviceTest::cleanup()
 {
 	delete dev_;
 };
+
+/* Static compile time assertion tests */
+
+static_assert(sizeof(struct v4l2_capability) == sizeof(struct V4L2Capability),
+	      "V4L2Capability must match v4l2_capability size");
-- 
2.17.1



More information about the libcamera-devel mailing list