summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/geometry.cpp116
-rw-r--r--test/meson.build1
2 files changed, 117 insertions, 0 deletions
diff --git a/test/geometry.cpp b/test/geometry.cpp
new file mode 100644
index 00000000..27e65565
--- /dev/null
+++ b/test/geometry.cpp
@@ -0,0 +1,116 @@
+/* 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:
+ 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;
+ }
+};
+
+TEST_REGISTER(GeometryTest)
diff --git a/test/meson.build b/test/meson.build
index 71a96921..d501f2be 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'],