test: geometry: Add tests for Size class comparison operators

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

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart 2019-04-14 19:08:00 +03:00
parent 66337b96b1
commit 2059b857e1
2 changed files with 117 additions and 0 deletions

116
test/geometry.cpp Normal file
View file

@ -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)