summaryrefslogtreecommitdiff
path: root/meson.build
AgeCommit message (Expand)Author
2019-04-27libcamera: Make libudev optionalLaurent Pinchart
2019-04-26meson: check if secure_getenv() is presentGiulio Benetti
2019-04-03meson: Re-order the optional componentsKieran Bingham
2019-03-20meson: Provide options to disable test/docsKieran Bingham
2019-01-15meson: Utilise default compiler optionsKieran Bingham
2019-01-01meson: Shorten project descriptionKieran Bingham
2018-12-13build: Add 'std=c++11' cpp compiler flagJacopo Mondi
2018-12-12Documentation: Generate source code documentation using DoxygenLaurent Pinchart
2018-12-06Overhaul the directory structureLaurent Pinchart
2018-11-30meson: Describe minimum meson version requirementsKieran Bingham
2018-11-28Documentation: Introduce sphinx documentationKieran Bingham
2018-11-27build: Add project argumentsKieran Bingham
2018-11-27include: Install include filesKieran Bingham
2018-11-20utils: ipu3: Add IPU3 raw capture unpack utilityLaurent Pinchart
2018-10-24build: Provide initial meson infrastructureKieran Bingham
class="hl ppc">#include "test_ipa_serializer.h" using namespace std; using namespace libcamera; class IPAGeneratedSerializerTest : public Test { protected: int init() override { return TestPass; } int run() override { #define TEST_FIELD_EQUALITY(struct1, struct2, field) \ if (struct1.field != struct2.field) { \ cerr << #field << " field incorrect: expected \"" \ << t.field << "\", got \"" << u.field << "\"" << endl;\ return TestFail; \ } ipa::test::TestStruct t, u; t.m = { { "a", "z" }, { "b", "z" }, { "c", "z" }, { "d", "z" }, { "e", "z" }, }; t.a = { "a", "b", "c", "d", "e" }; t.s1 = "hello world"; t.s2 = "goodbye"; t.s3 = "lorem ipsum"; t.i = 58527; std::vector<uint8_t> serialized; std::tie(serialized, ignore) = IPADataSerializer<ipa::test::TestStruct>::serialize(t); u = IPADataSerializer<ipa::test::TestStruct>::deserialize(serialized); if (!equals(t.m, u.m)) return TestFail; if (!equals(t.a, u.a)) return TestFail; TEST_FIELD_EQUALITY(t, u, s1); TEST_FIELD_EQUALITY(t, u, s2); TEST_FIELD_EQUALITY(t, u, s3); TEST_FIELD_EQUALITY(t, u, i); /* Test vector of generated structs */ std::vector<ipa::test::TestStruct> v = { t, u }; std::vector<ipa::test::TestStruct> w; std::tie(serialized, ignore) = IPADataSerializer<vector<ipa::test::TestStruct>>::serialize(v); w = IPADataSerializer<vector<ipa::test::TestStruct>>::deserialize(serialized); if (!equals(v[0].m, w[0].m) || !equals(v[1].m, w[1].m)) return TestFail; if (!equals(v[0].a, w[0].a) || !equals(v[1].a, w[1].a)) return TestFail; TEST_FIELD_EQUALITY(v[0], w[0], s1); TEST_FIELD_EQUALITY(v[0], w[0], s2); TEST_FIELD_EQUALITY(v[0], w[0], s3); TEST_FIELD_EQUALITY(v[0], w[0], i); TEST_FIELD_EQUALITY(v[1], w[1], s1); TEST_FIELD_EQUALITY(v[1], w[1], s2); TEST_FIELD_EQUALITY(v[1], w[1], s3); TEST_FIELD_EQUALITY(v[1], w[1], i); return TestPass; } private: bool equals(const map<string, string> &lhs, const map<string, string> &rhs) { bool eq = lhs.size() == rhs.size() && equal(lhs.begin(), lhs.end(), rhs.begin(), [](auto &a, auto &b) { return a.first == b.first && a.second == b.second; }); if (eq) return true; cerr << "lhs:" << endl; for (const auto &pair : lhs) cerr << "- " << pair.first << ": " << pair.second << endl; cerr << "rhs:" << endl; for (const auto &pair : rhs) cerr << "- " << pair.first << ": " << pair.second << endl; return false; } bool equals(const vector<string> &lhs, const vector<string> &rhs) { bool eq = lhs.size() == rhs.size(); if (!eq) { cerr << "sizes not equal" << endl; return false; } for (unsigned int i = 0; i < lhs.size(); i++) if (lhs[i] != rhs[i]) eq = false; if (eq) return true; cerr << "lhs:" << endl; for (const auto &str : lhs) cerr << "- " << str << endl; cerr << "rhs:" << endl; for (const auto &str : rhs) cerr << "- " << str << endl; return false; } }; TEST_REGISTER(IPAGeneratedSerializerTest)