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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Apr 16 22:10:44 CEST 2019


Hi Jacopo,

On Tue, Apr 16, 2019 at 05:19:14PM +0200, Jacopo Mondi wrote:
> On Mon, Apr 15, 2019 at 07:56:56PM +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>
> > ---
> >  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;
> > +	}
> 
> Do you need this?

I don't, same for cleanup(). I'll fix that.

> > +
> > +	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()
> > +	{
> > +	}
> 
> this too?
> 
> Minors apart:
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> > +};
> > +
> > +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


More information about the libcamera-devel mailing list