summaryrefslogtreecommitdiff
path: root/test/serialization/serialization_test.cpp
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-10-22 01:58:15 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-11-20 21:47:54 +0200
commitc0b437fd6cf7ca2e91eb749a25539f217722c66e (patch)
treeb1172fd8b79b329a0df2882053a2fa9ef39fbbba /test/serialization/serialization_test.cpp
parent2c5f0ad23aa40d7410b28e01405c730e75c6cf83 (diff)
test: Add control serialization test
Add a test that exercises the ControlSerializer to serialize and deserialize ControlInfoMap and ControlList. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'test/serialization/serialization_test.cpp')
-rw-r--r--test/serialization/serialization_test.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/serialization/serialization_test.cpp b/test/serialization/serialization_test.cpp
new file mode 100644
index 00000000..68e0512a
--- /dev/null
+++ b/test/serialization/serialization_test.cpp
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * serialization_test.cpp - Base class for serialization tests
+ */
+
+#include "serialization_test.h"
+
+#include <algorithm>
+#include <iostream>
+#include <map>
+
+#include <libcamera/camera.h>
+#include <libcamera/camera_manager.h>
+#include <libcamera/controls.h>
+
+#include "test.h"
+
+using namespace std;
+using namespace libcamera;
+
+bool SerializationTest::equals(const ControlInfoMap &lhs, const ControlInfoMap &rhs)
+{
+ std::map<unsigned int, ControlRange> rlhs;
+ std::transform(lhs.begin(), lhs.end(), std::inserter(rlhs, rlhs.end()),
+ [](const ControlInfoMap::value_type &v)
+ -> decltype(rlhs)::value_type
+ {
+ return { v.first->id(), v.second };
+ });
+
+ std::map<unsigned int, ControlRange> rrhs;
+ std::transform(rhs.begin(), rhs.end(), std::inserter(rrhs, rrhs.end()),
+ [](const ControlInfoMap::value_type &v)
+ -> decltype(rrhs)::value_type
+ {
+ return { v.first->id(), v.second };
+ });
+
+ if (rlhs == rrhs)
+ return true;
+
+ cerr << "lhs:" << endl;
+ for (const auto &value : rlhs)
+ cerr << "- " << value.first << ": "
+ << value.second.toString() << endl;
+
+ cerr << "rhs:" << endl;
+ for (const auto &value : rrhs)
+ cerr << "- " << value.first << ": "
+ << value.second.toString() << endl;
+
+ return false;
+}
+
+bool SerializationTest::equals(const ControlList &lhs, const ControlList &rhs)
+{
+ std::map<unsigned int, ControlValue> rlhs;
+ std::transform(lhs.begin(), lhs.end(), std::inserter(rlhs, rlhs.end()),
+ [](const std::pair<unsigned int, ControlValue> &v)
+ -> decltype(rlhs)::value_type
+ {
+ return { v.first, v.second };
+ });
+
+ std::map<unsigned int, ControlValue> rrhs;
+ std::transform(rhs.begin(), rhs.end(), std::inserter(rrhs, rrhs.end()),
+ [](const std::pair<unsigned int, ControlValue> &v)
+ -> decltype(rrhs)::value_type
+ {
+ return { v.first, v.second };
+ });
+
+ if (rlhs == rrhs)
+ return true;
+
+ cerr << "lhs:" << endl;
+ for (const auto &value : rlhs)
+ cerr << "- " << value.first << ": "
+ << value.second.toString() << endl;
+
+ cerr << "rhs:" << endl;
+ for (const auto &value : rrhs)
+ cerr << "- " << value.first << ": "
+ << value.second.toString() << endl;
+
+ return false;
+}