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

Niklas Söderlund niklas.soderlund at ragnatech.se
Mon Apr 15 22:58:23 CEST 2019


Hi Laurent,

Thanks for your test code,

On 2019-04-15 19:56:56 +0300, Laurent Pinchart wrote:
> Add a test that exercises all the comparison operators for the Size
> class.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  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
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list