[libcamera-devel] [PATCH 07/11] test: geometry: Add tests for Size class comparison operators

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Apr 15 18:56:56 CEST 2019


Add a test that exercises all the comparison operators for the Size
class.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 test/geometry.cpp | 125 ++++++++++++++++++++++++++++++++++++++++++++++
 test/meson.build  |   1 +
 2 files changed, 126 insertions(+)
 create mode 100644 test/geometry.cpp

diff --git a/test/geometry.cpp b/test/geometry.cpp
new file mode 100644
index 000000000000..7ba3f72ed71d
--- /dev/null
+++ b/test/geometry.cpp
@@ -0,0 +1,125 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * geometry.cpp - Geometry classes tests
+ */
+
+#include <iostream>
+
+#include <libcamera/geometry.h>
+
+#include "test.h"
+
+using namespace std;
+using namespace libcamera;
+
+class GeometryTest : public Test
+{
+protected:
+	int init()
+	{
+		return 0;
+	}
+
+	bool compare(const Size &lhs, const Size &rhs,
+		     bool (*op)(const Size &lhs, const Size &rhs),
+		     const char *opName, bool expect)
+	{
+		bool result = op(lhs, rhs);
+
+		if (result != expect) {
+			cout << "Size(" << lhs.width << ", " << lhs.height << ") "
+			     << opName << " "
+			     << "Size(" << rhs.width << ", " << rhs.height << ") "
+			     << "test failed" << std::endl;
+			return false;
+		}
+
+		return true;
+	}
+
+	int run()
+	{
+		/* Test Size equality and inequality. */
+		if (!compare(Size(100, 100), Size(100, 100), &operator==, "==", true))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(100, 100), &operator!=, "!=", false))
+			return TestFail;
+
+		if (!compare(Size(100, 100), Size(200, 100), &operator==, "==", false))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(200, 100), &operator!=, "!=", true))
+			return TestFail;
+
+		if (!compare(Size(100, 100), Size(100, 200), &operator==, "==", false))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(100, 200), &operator!=, "!=", true))
+			return TestFail;
+
+		/* Test Size ordering based on combined with and height. */
+		if (!compare(Size(100, 100), Size(200, 200), &operator<, "<", true))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(200, 200), &operator<=, "<=", true))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(200, 200), &operator>, ">", false))
+			return TestFail;
+		if (!compare(Size(100, 100), Size(200, 200), &operator>=, ">=", false))
+			return TestFail;
+
+		if (!compare(Size(200, 200), Size(100, 100), &operator<, "<", false))
+			return TestFail;
+		if (!compare(Size(200, 200), Size(100, 100), &operator<=, "<=", false))
+			return TestFail;
+		if (!compare(Size(200, 200), Size(100, 100), &operator>, ">", true))
+			return TestFail;
+		if (!compare(Size(200, 200), Size(100, 100), &operator>=, ">=", true))
+			return TestFail;
+
+		/* Test Size ordering based on area (with overlapping sizes). */
+		if (!compare(Size(200, 100), Size(100, 400), &operator<, "<", true))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 400), &operator<=, "<=", true))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 400), &operator>, ">", false))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 400), &operator>=, ">=", false))
+			return TestFail;
+
+		if (!compare(Size(100, 400), Size(200, 100), &operator<, "<", false))
+			return TestFail;
+		if (!compare(Size(100, 400), Size(200, 100), &operator<=, "<=", false))
+			return TestFail;
+		if (!compare(Size(100, 400), Size(200, 100), &operator>, ">", true))
+			return TestFail;
+		if (!compare(Size(100, 400), Size(200, 100), &operator>=, ">=", true))
+			return TestFail;
+
+		/* Test Size ordering based on width (with identical areas). */
+		if (!compare(Size(100, 200), Size(200, 100), &operator<, "<", true))
+			return TestFail;
+		if (!compare(Size(100, 200), Size(200, 100), &operator<=, "<=", true))
+			return TestFail;
+		if (!compare(Size(100, 200), Size(200, 100), &operator>, ">", false))
+			return TestFail;
+		if (!compare(Size(100, 200), Size(200, 100), &operator>=, ">=", false))
+			return TestFail;
+
+		if (!compare(Size(200, 100), Size(100, 200), &operator<, "<", false))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 200), &operator<=, "<=", false))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 200), &operator>, ">", true))
+			return TestFail;
+		if (!compare(Size(200, 100), Size(100, 200), &operator>=, ">=", true))
+			return TestFail;
+
+		return TestPass;
+	}
+
+	void cleanup()
+	{
+	}
+};
+
+TEST_REGISTER(GeometryTest)
diff --git a/test/meson.build b/test/meson.build
index 71a96921697c..d501f2beaf96 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -9,6 +9,7 @@ subdir('v4l2_subdevice')
 public_tests = [
     ['event',                           'event.cpp'],
     ['event-dispatcher',                'event-dispatcher.cpp'],
+    ['geometry',                        'geometry.cpp'],
     ['list-cameras',                    'list-cameras.cpp'],
     ['signal',                          'signal.cpp'],
     ['timer',                           'timer.cpp'],
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list