[{"id":18346,"web_url":"https://patchwork.libcamera.org/comment/18346/","msgid":"<20210726094644.pcqzuqvbtmkt4job@uno.localdomain>","date":"2021-07-26T09:46:44","subject":"Re: [libcamera-devel] [PATCH v2 2/5] test: Add tests for the Flags\n\tclass","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"On Sun, Jul 25, 2021 at 08:18:24PM +0300, Laurent Pinchart wrote:\n> Add tests that exercise the whole API of the Flags class.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> ---\n> Changes since v1:\n>\n> - Fix enumerator Beta\n> - Typo fix\n> ---\n>  test/flags.cpp   | 204 +++++++++++++++++++++++++++++++++++++++++++++++\n>  test/meson.build |   1 +\n>  2 files changed, 205 insertions(+)\n>  create mode 100644 test/flags.cpp\n>\n> diff --git a/test/flags.cpp b/test/flags.cpp\n> new file mode 100644\n> index 000000000000..5a684e6ee11f\n> --- /dev/null\n> +++ b/test/flags.cpp\n> @@ -0,0 +1,204 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Google Inc.\n> + *\n> + * flags.cpp - Flags tests\n> + */\n> +\n> +#include <iostream>\n> +\n> +#include <libcamera/base/flags.h>\n> +\n> +#include \"test.h\"\n> +\n> +using namespace libcamera;\n> +using namespace std;\n> +\n> +class FlagsTest : public Test\n> +{\n> +protected:\n> +\tenum class Option {\n> +\t\tFirst = (1 << 0),\n> +\t\tSecond = (1 << 1),\n> +\t\tThird = (1 << 2),\n> +\t};\n> +\n> +\tusing Options = Flags<Option>;\n> +\n> +\tenum class Mode {\n> +\t\tAlpha = (1 << 0),\n> +\t\tBeta = (1 << 1),\n> +\t\tGamma = (1 << 2),\n> +\t};\n> +\n> +\tusing Modes = Flags<Mode>;\n> +\n> +\tint run() override;\n> +};\n> +\n> +namespace libcamera {\n> +\n> +LIBCAMERA_FLAGS_ENABLE_OPERATORS(FlagsTest::Option)\n> +\n> +} /* namespace libcamera */\n> +\n> +int FlagsTest::run()\n> +{\n> +\t/* Commented-out constructs are expected not to compile. */\n> +\n> +\t/* Flags<int> f; */\n\nLeftovers then ?\n\n> +\n> +\t/*\n> +\t * Unary operators with enum argument.\n> +\t */\n> +\n> +\tOptions options;\n> +\n> +\tif (options) {\n> +\t\tcerr << \"Default-constructed Flags<> is not zero\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions |= Option::First;\n> +\n> +\tif (!options || options != Option::First) {\n> +\t\tcerr << \"Unary bitwise OR with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\t/* options &= Mode::Alpha; */\n> +\t/* options |= Mode::Beta;  */\n> +\t/* options ^= Mode::Gamma; */\n> +\n> +\toptions &= ~Option::First;\n> +\n\nDo you need these empy lines ?\n\n> +\tif (options) {\n> +\t\tcerr << \"Unary bitwise AND with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions ^= Option::Second;\n> +\n> +\tif (options != Option::Second) {\n> +\t\tcerr << \"Unary bitwise XOR with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = Options();\n> +\n> +\t/*\n> +\t * Unary operators with Flags argument.\n> +\t */\n> +\n> +\toptions |= Options(Option::First);\n> +\n> +\tif (options != Option::First) {\n> +\t\tcerr << \"Unary bitwise OR with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\t/* options &= Options(Mode::Alpha); */\n> +\t/* options |= Options(Mode::Beta);  */\n> +\t/* options ^= Options(Mode::Gamma); */\n> +\n> +\toptions &= ~Options(Option::First);\n> +\n> +\tif (options) {\n> +\t\tcerr << \"Unary bitwise AND with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions ^= Options(Option::Second);\n> +\n> +\tif (options != Option::Second) {\n> +\t\tcerr << \"Unary bitwise XOR with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = Options();\n> +\n> +\t/*\n> +\t * Binary operators with enum argument.\n> +\t */\n> +\n> +\toptions = options | Option::First;\n> +\n> +\tif (!(options & Option::First)) {\n> +\t\tcerr << \"Binary bitwise OR with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\t/* options = options & Mode::Alpha; */\n> +\t/* options = options | Mode::Beta;  */\n> +\t/* options = options ^ Mode::Gamma; */\n> +\n> +\toptions = options & ~Option::First;\n> +\n> +\tif (options != (Option::First & Option::Second)) {\n> +\t\tcerr << \"Binary bitwise AND with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = options ^ (Option::First ^ Option::Second);\n> +\n> +\tif (options != (Option::First | Option::Second)) {\n> +\t\tcerr << \"Binary bitwise XOR with enum failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = Options();\n> +\n> +\t/*\n> +\t * Binary operators with Flags argument.\n> +\t */\n> +\n> +\toptions |= Options(Option::First);\n> +\n> +\tif (!(options & Option::First)) {\n> +\t\tcerr << \"Binary bitwise OR with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\t/* options = options & Options(Mode::Alpha); */\n> +\t/* options = options | Options(Mode::Beta);  */\n> +\t/* options = options ^ Options(Mode::Gamma); */\n\nSo Mode is not actually used ?\n\n> +\n> +\toptions = options & ~Options(Option::First);\n> +\n> +\tif (options) {\n> +\t\tcerr << \"Binary bitwise AND with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = options ^ Options(Option::Second);\n> +\n> +\tif (options != Option::Second) {\n> +\t\tcerr << \"Binary bitwise XOR with Flags<> failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\toptions = Options();\n> +\n> +\t/*\n> +\t * Conversion operators.\n> +\t */\n\nDon't these comments fits on one line ?\n\n> +\toptions |= Option::First | Option::Second | Option::Third;\n> +\tif (static_cast<Options::Type>(options) != 7) {\n> +\t\tcerr << \"Cast to underlying type failed\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\t/*\n> +\t * Conversion of the result of ninary operators on the underlying enum.\n> +\t */\n> +\n> +\t/* unsigned int val1 = Option::First; */\n> +\t/* unsigned int val2 = ~Option::First; */\n> +\t/* unsigned int val3 = Option::First | Option::Second; */\n> +\t/* Option val4 = ~Option::First; */\n> +\t/* Option val5 = Option::First | Option::Second; */\n> +\n> +\treturn TestPass;\n> +}\n> +\n> +TEST_REGISTER(FlagsTest)\n> diff --git a/test/meson.build b/test/meson.build\n> index 2c3e76546fbc..3bceb5df586f 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -40,6 +40,7 @@ internal_tests = [\n>      ['event-thread',                    'event-thread.cpp'],\n>      ['file',                            'file.cpp'],\n>      ['file-descriptor',                 'file-descriptor.cpp'],\n> +    ['flags',                           'flags.cpp'],\n>      ['hotplug-cameras',                 'hotplug-cameras.cpp'],\n>      ['mapped-buffer',                   'mapped-buffer.cpp'],\n>      ['message',                         'message.cpp'],\n> --\n> Regards,\n>\n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id AF379C0109\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 26 Jul 2021 09:45:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1D981687BA;\n\tMon, 26 Jul 2021 11:45:58 +0200 (CEST)","from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1B34E60272\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 26 Jul 2021 11:45:57 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 8FCB22000C;\n\tMon, 26 Jul 2021 09:45:56 +0000 (UTC)"],"Date":"Mon, 26 Jul 2021 11:46:44 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210726094644.pcqzuqvbtmkt4job@uno.localdomain>","References":"<20210725171827.23643-1-laurent.pinchart@ideasonboard.com>\n\t<20210725171827.23643-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20210725171827.23643-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] test: Add tests for the Flags\n\tclass","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18371,"web_url":"https://patchwork.libcamera.org/comment/18371/","msgid":"<YP93Ku+J80CERKHR@pendragon.ideasonboard.com>","date":"2021-07-27T03:02:02","subject":"Re: [libcamera-devel] [PATCH v2 2/5] test: Add tests for the Flags\n\tclass","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Mon, Jul 26, 2021 at 11:46:44AM +0200, Jacopo Mondi wrote:\n> On Sun, Jul 25, 2021 at 08:18:24PM +0300, Laurent Pinchart wrote:\n> > Add tests that exercise the whole API of the Flags class.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > ---\n> > Changes since v1:\n> >\n> > - Fix enumerator Beta\n> > - Typo fix\n> > ---\n> >  test/flags.cpp   | 204 +++++++++++++++++++++++++++++++++++++++++++++++\n> >  test/meson.build |   1 +\n> >  2 files changed, 205 insertions(+)\n> >  create mode 100644 test/flags.cpp\n> >\n> > diff --git a/test/flags.cpp b/test/flags.cpp\n> > new file mode 100644\n> > index 000000000000..5a684e6ee11f\n> > --- /dev/null\n> > +++ b/test/flags.cpp\n> > @@ -0,0 +1,204 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Google Inc.\n> > + *\n> > + * flags.cpp - Flags tests\n> > + */\n> > +\n> > +#include <iostream>\n> > +\n> > +#include <libcamera/base/flags.h>\n> > +\n> > +#include \"test.h\"\n> > +\n> > +using namespace libcamera;\n> > +using namespace std;\n> > +\n> > +class FlagsTest : public Test\n> > +{\n> > +protected:\n> > +\tenum class Option {\n> > +\t\tFirst = (1 << 0),\n> > +\t\tSecond = (1 << 1),\n> > +\t\tThird = (1 << 2),\n> > +\t};\n> > +\n> > +\tusing Options = Flags<Option>;\n> > +\n> > +\tenum class Mode {\n> > +\t\tAlpha = (1 << 0),\n> > +\t\tBeta = (1 << 1),\n> > +\t\tGamma = (1 << 2),\n> > +\t};\n> > +\n> > +\tusing Modes = Flags<Mode>;\n> > +\n> > +\tint run() override;\n> > +};\n> > +\n> > +namespace libcamera {\n> > +\n> > +LIBCAMERA_FLAGS_ENABLE_OPERATORS(FlagsTest::Option)\n> > +\n> > +} /* namespace libcamera */\n> > +\n> > +int FlagsTest::run()\n> > +{\n> > +\t/* Commented-out constructs are expected not to compile. */\n> > +\n> > +\t/* Flags<int> f; */\n> \n> Leftovers then ?\n\nNot really, they're meant to show invalid usage, we have similar\nconstructs in the Span tests. I have yet to find a way to create tests\nwhere compilation failures are considered a success :-)\n\n> > +\n> > +\t/*\n> > +\t * Unary operators with enum argument.\n> > +\t */\n> > +\n> > +\tOptions options;\n> > +\n> > +\tif (options) {\n> > +\t\tcerr << \"Default-constructed Flags<> is not zero\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions |= Option::First;\n> > +\n> > +\tif (!options || options != Option::First) {\n> > +\t\tcerr << \"Unary bitwise OR with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\t/* options &= Mode::Alpha; */\n> > +\t/* options |= Mode::Beta;  */\n> > +\t/* options ^= Mode::Gamma; */\n> > +\n> > +\toptions &= ~Option::First;\n> > +\n> \n> Do you need these empy lines ?\n\nI'll drop them.\n\n> > +\tif (options) {\n> > +\t\tcerr << \"Unary bitwise AND with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions ^= Option::Second;\n> > +\n> > +\tif (options != Option::Second) {\n> > +\t\tcerr << \"Unary bitwise XOR with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = Options();\n> > +\n> > +\t/*\n> > +\t * Unary operators with Flags argument.\n> > +\t */\n> > +\n> > +\toptions |= Options(Option::First);\n> > +\n> > +\tif (options != Option::First) {\n> > +\t\tcerr << \"Unary bitwise OR with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\t/* options &= Options(Mode::Alpha); */\n> > +\t/* options |= Options(Mode::Beta);  */\n> > +\t/* options ^= Options(Mode::Gamma); */\n> > +\n> > +\toptions &= ~Options(Option::First);\n> > +\n> > +\tif (options) {\n> > +\t\tcerr << \"Unary bitwise AND with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions ^= Options(Option::Second);\n> > +\n> > +\tif (options != Option::Second) {\n> > +\t\tcerr << \"Unary bitwise XOR with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = Options();\n> > +\n> > +\t/*\n> > +\t * Binary operators with enum argument.\n> > +\t */\n> > +\n> > +\toptions = options | Option::First;\n> > +\n> > +\tif (!(options & Option::First)) {\n> > +\t\tcerr << \"Binary bitwise OR with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\t/* options = options & Mode::Alpha; */\n> > +\t/* options = options | Mode::Beta;  */\n> > +\t/* options = options ^ Mode::Gamma; */\n> > +\n> > +\toptions = options & ~Option::First;\n> > +\n> > +\tif (options != (Option::First & Option::Second)) {\n> > +\t\tcerr << \"Binary bitwise AND with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = options ^ (Option::First ^ Option::Second);\n> > +\n> > +\tif (options != (Option::First | Option::Second)) {\n> > +\t\tcerr << \"Binary bitwise XOR with enum failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = Options();\n> > +\n> > +\t/*\n> > +\t * Binary operators with Flags argument.\n> > +\t */\n> > +\n> > +\toptions |= Options(Option::First);\n> > +\n> > +\tif (!(options & Option::First)) {\n> > +\t\tcerr << \"Binary bitwise OR with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\t/* options = options & Options(Mode::Alpha); */\n> > +\t/* options = options | Options(Mode::Beta);  */\n> > +\t/* options = options ^ Options(Mode::Gamma); */\n> \n> So Mode is not actually used ?\n\nCorrect.\n\n> > +\n> > +\toptions = options & ~Options(Option::First);\n> > +\n> > +\tif (options) {\n> > +\t\tcerr << \"Binary bitwise AND with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = options ^ Options(Option::Second);\n> > +\n> > +\tif (options != Option::Second) {\n> > +\t\tcerr << \"Binary bitwise XOR with Flags<> failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\toptions = Options();\n> > +\n> > +\t/*\n> > +\t * Conversion operators.\n> > +\t */\n> \n> Don't these comments fits on one line ?\n\nI thought they were more effective at creating sections to improve\nreadability when using multiple lines, but if it bothers you I can\nchange that.\n\n> > +\toptions |= Option::First | Option::Second | Option::Third;\n> > +\tif (static_cast<Options::Type>(options) != 7) {\n> > +\t\tcerr << \"Cast to underlying type failed\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\t/*\n> > +\t * Conversion of the result of ninary operators on the underlying enum.\n> > +\t */\n> > +\n> > +\t/* unsigned int val1 = Option::First; */\n> > +\t/* unsigned int val2 = ~Option::First; */\n> > +\t/* unsigned int val3 = Option::First | Option::Second; */\n> > +\t/* Option val4 = ~Option::First; */\n> > +\t/* Option val5 = Option::First | Option::Second; */\n> > +\n> > +\treturn TestPass;\n> > +}\n> > +\n> > +TEST_REGISTER(FlagsTest)\n> > diff --git a/test/meson.build b/test/meson.build\n> > index 2c3e76546fbc..3bceb5df586f 100644\n> > --- a/test/meson.build\n> > +++ b/test/meson.build\n> > @@ -40,6 +40,7 @@ internal_tests = [\n> >      ['event-thread',                    'event-thread.cpp'],\n> >      ['file',                            'file.cpp'],\n> >      ['file-descriptor',                 'file-descriptor.cpp'],\n> > +    ['flags',                           'flags.cpp'],\n> >      ['hotplug-cameras',                 'hotplug-cameras.cpp'],\n> >      ['mapped-buffer',                   'mapped-buffer.cpp'],\n> >      ['message',                         'message.cpp'],","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id B2237C322C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Jul 2021 03:02:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 23FE3687C1;\n\tTue, 27 Jul 2021 05:02:09 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 89C3360273\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Jul 2021 05:02:08 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 02F2EEE;\n\tTue, 27 Jul 2021 05:02:07 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"QO+PuMAD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627354928;\n\tbh=4aaVz1gMMgBcLdYMXHrQRJ6581ndDDe/4oVa0XRYUnw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QO+PuMADA/YvY91LHnCac67P97lePXei9yW0lW80CZmMu87O1PrhcnySMoBNykqxs\n\tjUvm1c9FXRcF/N4KSspz+rtiNg0VLbahY9wPNcoXm/mmQPnsNeVHi0ETJ3Ava1ielL\n\tzKk545/P3rzM3mL4zHczq6isjqIOu0hfIj4jTAQA=","Date":"Tue, 27 Jul 2021 06:02:02 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YP93Ku+J80CERKHR@pendragon.ideasonboard.com>","References":"<20210725171827.23643-1-laurent.pinchart@ideasonboard.com>\n\t<20210725171827.23643-3-laurent.pinchart@ideasonboard.com>\n\t<20210726094644.pcqzuqvbtmkt4job@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20210726094644.pcqzuqvbtmkt4job@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v2 2/5] test: Add tests for the Flags\n\tclass","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]