[{"id":3894,"web_url":"https://patchwork.libcamera.org/comment/3894/","msgid":"<5b85e015-eecb-7842-c10c-24ad4d522dfb@ideasonboard.com>","date":"2020-03-02T15:57:08","subject":"Re: [libcamera-devel] [PATCH 02/31] test: Add Span test","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 29/02/2020 16:42, Laurent Pinchart wrote:\n> Add a compile-only test that exercises the whole Span API, as template\n> functions are not fully compile-tested when the file is parsed.\n\nDo we not want any run-time testing ?\n\nIf this 'does nothing' I presume the compiler will just optimise it out\nin the end? (Not a problem for compile time testing of course, and\nspeeds up run-time testing as a perk )\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nI think such a core feature might warrant some actual run-time testing\nat some point to make sure it does the right thing, but perhaps that\nwill become implicit with usage too, and does not detract from the\ncurrent testing here..\n\nso\n\nWith a small comment below:\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n> ---\n>  test/meson.build |   1 +\n>  test/span.cpp    | 177 +++++++++++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 178 insertions(+)\n>  create mode 100644 test/span.cpp\n> \n> diff --git a/test/meson.build b/test/meson.build\n> index daaa1aac926d..92be382bfe41 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -30,6 +30,7 @@ internal_tests = [\n>      ['object',                          'object.cpp'],\n>      ['object-invoke',                   'object-invoke.cpp'],\n>      ['signal-threads',                  'signal-threads.cpp'],\n> +    ['span',                            'span.cpp'],\n\nShouldn't this go into public_tests ?\n\nIsn't span going to be part of the public API because of it's role in\ncontrols?\n\n\n\n>      ['threads',                         'threads.cpp'],\n>      ['timer',                           'timer.cpp'],\n>      ['timer-thread',                    'timer-thread.cpp'],\n> diff --git a/test/span.cpp b/test/span.cpp\n> new file mode 100644\n> index 000000000000..609749f51b86\n> --- /dev/null\n> +++ b/test/span.cpp\n> @@ -0,0 +1,177 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Google Inc.\n> + *\n> + * span.cpp - Span tests\n> + */\n> +\n> +#include <array>\n> +#include <iostream>\n> +#include <vector>\n> +\n> +#include <libcamera/span.h>\n> +\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +using namespace libcamera;\n> +\n> +class SpanTest : public Test\n> +{\n> +protected:\n> +\tint run()\n> +\t{\n> +\t\tint i[4]{ 1, 2, 3, 4 };\n> +\t\tstd::array<int, 4> a{ 1, 2, 3, 4 };\n> +\t\tconst std::array<int, 4> ca{ 1, 2, 3, 4 };\n> +\t\tstd::vector<int> v{ 1, 2, 3, 4 };\n> +\t\tconst std::vector<int> cv{ 1, 2, 3, 4 };\n> +\n> +\t\t/*\n> +\t\t * Compile-test construction and usage of spans with static\n> +\t\t * extent. Commented-out tests are expected not to compile, or\n> +\t\t * to generate undefined behaviour.\n> +\t\t */\n> +\n> +\t\tSpan<int, 0>{};\n> +\t\t/* Span<int, 4>{}; */\n> +\n> +\t\tSpan<int, 4>{ &i[0], 4 };\n> +\t\tSpan<int, 4>{ &i[0], &i[3] };\n> +\n> +\t\tSpan<int, 4>{ i };\n> +\t\t/* Span<float, 4>{ i }; */\n> +\t\t/* Span<int, 2>{ i }; */\n> +\n> +\t\tSpan<int, 4>{ a };\n> +\t\tSpan<const int, 4>{ a };\n> +\t\t/* Span<float, 4>{ a }; */\n> +\t\t/* Span<int, 2>{ a }; */\n> +\n> +\t\tSpan<const int, 4>{ ca };\n> +\t\t/* Span<const int, 2>{ ca }; */\n> +\t\t/* Span<const float, 4>{ ca }; */\n> +\t\t/* Span<int, 4>{ ca }; */\n> +\n> +\t\tSpan<int, 4>{ v };\n> +\t\tSpan<const int, 4>{ v };\n> +\t\t/* Span<float, 4>{ v }; */\n> +\n> +\t\tSpan<const int, 4>{ v };\n> +\t\t/* Span<int, 4>{ v }; */\n> +\t\t/* Span<const float, 4>{ v }; */\n> +\n> +\t\tSpan<int, 4> staticSpan{ i };\n> +\t\tSpan<int, 4>{ staticSpan };\n> +\t\tSpan<const int, 4>{ staticSpan };\n> +\t\t/* Span<const int, 2>{ staticSpan }; */\n> +\n> +\t\tstaticSpan = Span<int, 4>{ v };\n> +\n> +\t\tstaticSpan.begin();\n> +\t\tstaticSpan.cbegin();\n> +\t\tstaticSpan.end();\n> +\t\tstaticSpan.cend();\n> +\t\tstaticSpan.rbegin();\n> +\t\tstaticSpan.crbegin();\n> +\t\tstaticSpan.rend();\n> +\t\tstaticSpan.crend();\n> +\n> +\t\tstaticSpan.front();\n> +\t\tstaticSpan.back();\n> +\t\tstaticSpan[0];\n> +\t\tstaticSpan.data();\n> +\n> +\t\tstaticSpan.size();\n> +\t\tstaticSpan.size_bytes();\n> +\n> +\t\tstaticSpan.empty();\n> +\n> +\t\tstaticSpan.first<2>();\n> +\t\tstaticSpan.first(2);\n> +\t\t/* staticSpan.first<6>(); */\n> +\t\t/* staticSpan.first(6); */\n> +\t\tstaticSpan.last<2>();\n> +\t\tstaticSpan.last(2);\n> +\t\t/* staticSpan.last<6>(); */\n> +\t\t/* staticSpan.last(6); */\n> +\t\tstaticSpan.subspan<1>();\n> +\t\tstaticSpan.subspan<1, 2>();\n> +\t\tstaticSpan.subspan(1);\n> +\t\tstaticSpan.subspan(1, 2);\n> +\t\t/* staticSpan.subspan(2, 4); */\n> +\n> +\t\t/*\n> +\t\t * Compile-test construction and usage of spans with static\n> +\t\t * extent. Commented-out tests are expected not to compile, or\n> +\t\t * to generate undefined behaviour.\n> +\t\t */\n> +\n> +\t\tSpan<int>{};\n> +\n> +\t\tSpan<int>{ &i[0], 4 };\n> +\t\tSpan<int>{ &i[0], &i[3] };\n> +\n> +\t\tSpan<int>{ i };\n> +\t\t/* Span<float>{ i }; */\n> +\n> +\t\tSpan<int>{ a };\n> +\t\tSpan<const int>{ a };\n> +\t\t/* Span<float>{ a }; */\n> +\n> +\t\tSpan<const int>{ ca };\n> +\t\t/* Span<const float>{ca}; */\n> +\t\t/* Span<int>{ca}; */\n> +\n> +\t\tSpan<int>{ v };\n> +\t\tSpan<const int>{ v };\n> +\t\t/* Span<float>{ v }; */\n> +\n> +\t\tSpan<const int>{ v };\n> +\t\t/* Span<int>{ v }; */\n> +\t\t/* Span<const float>{ v }; */\n> +\n> +\t\tSpan<int> dynamicSpan{ i };\n> +\t\tSpan<int>{ dynamicSpan };\n> +\t\tSpan<const int>{ dynamicSpan };\n> +\n> +\t\tdynamicSpan = Span<int>{ a };\n> +\n> +\t\tdynamicSpan.begin();\n> +\t\tdynamicSpan.cbegin();\n> +\t\tdynamicSpan.end();\n> +\t\tdynamicSpan.cend();\n> +\t\tdynamicSpan.rbegin();\n> +\t\tdynamicSpan.crbegin();\n> +\t\tdynamicSpan.rend();\n> +\t\tdynamicSpan.crend();\n> +\n> +\t\tdynamicSpan.front();\n> +\t\tdynamicSpan.back();\n> +\t\tdynamicSpan[0];\n> +\t\tdynamicSpan.data();\n> +\n> +\t\tdynamicSpan.size();\n> +\t\tdynamicSpan.size_bytes();\n> +\n> +\t\tdynamicSpan.empty();\n> +\n> +\t\tdynamicSpan.first<2>();\n> +\t\tdynamicSpan.first(2);\n> +\t\t/* dynamicSpan.first<6>(); */\n> +\t\t/* dynamicSpan.first(6); */\n> +\t\tdynamicSpan.last<2>();\n> +\t\tdynamicSpan.last(2);\n> +\t\t/* dynamicSpan.last<6>(); */\n> +\t\t/* dynamicSpan.last(6); */\n> +\t\tdynamicSpan.subspan<1>();\n> +\t\tdynamicSpan.subspan<1, 2>();\n> +\t\tdynamicSpan.subspan(1);\n> +\t\tdynamicSpan.subspan(1, 2);\n> +\t\t/* dynamicSpan.subspan(2, 4); */\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +};\n> +\n> +TEST_REGISTER(SpanTest)\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 78CB062710\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  2 Mar 2020 16:57:12 +0100 (CET)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D7EFD9D0;\n\tMon,  2 Mar 2020 16:57:11 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1583164632;\n\tbh=uVvb//S/D56YC5Ey/H2t9FTdMZpAyryhGo7ruBqm9jw=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=VGe9NtwlPAlJKyBRvVTKIPINk/CQ/s2h6FYTB1XN+4pGJRR3fORsaQn0tHfkUOaVW\n\tPNYVrRFk7gVNN5NnObnfFTeWRAOqUhv1FfP/mgGOwzGqPEZw8Jf8wfQmYBUGFx1Aot\n\tLHlABMf9k6yVZZBRnFTdnUwSRBuVQ2CPryCRlfjI=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20200229164254.23604-1-laurent.pinchart@ideasonboard.com>\n\t<20200229164254.23604-3-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<5b85e015-eecb-7842-c10c-24ad4d522dfb@ideasonboard.com>","Date":"Mon, 2 Mar 2020 15:57:08 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.9.1","MIME-Version":"1.0","In-Reply-To":"<20200229164254.23604-3-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH 02/31] test: Add Span test","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>","X-List-Received-Date":"Mon, 02 Mar 2020 15:57:12 -0000"}},{"id":3897,"web_url":"https://patchwork.libcamera.org/comment/3897/","msgid":"<20200302164349.GU11960@pendragon.ideasonboard.com>","date":"2020-03-02T16:43:49","subject":"Re: [libcamera-devel] [PATCH 02/31] test: Add Span test","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Mon, Mar 02, 2020 at 03:57:08PM +0000, Kieran Bingham wrote:\n> On 29/02/2020 16:42, Laurent Pinchart wrote:\n> > Add a compile-only test that exercises the whole Span API, as template\n> > functions are not fully compile-tested when the file is parsed.\n> \n> Do we not want any run-time testing ?\n\nIdeally yes, but feel free to submit a patch :-) I think we're fine with\ntesting the span implementation through its users for now.\n\n> If this 'does nothing' I presume the compiler will just optimise it out\n> in the end? (Not a problem for compile time testing of course, and\n> speeds up run-time testing as a perk )\n\nUp to the compiler :-)\n\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> I think such a core feature might warrant some actual run-time testing\n> at some point to make sure it does the right thing, but perhaps that\n> will become implicit with usage too, and does not detract from the\n> current testing here..\n\nAs the implementation is supposed to be C++20-compliant, if we want to\ntest it, I think we should use test cases from libstdc++ or libc++.\n\n> so\n> \n> With a small comment below:\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > ---\n> >  test/meson.build |   1 +\n> >  test/span.cpp    | 177 +++++++++++++++++++++++++++++++++++++++++++++++\n> >  2 files changed, 178 insertions(+)\n> >  create mode 100644 test/span.cpp\n> > \n> > diff --git a/test/meson.build b/test/meson.build\n> > index daaa1aac926d..92be382bfe41 100644\n> > --- a/test/meson.build\n> > +++ b/test/meson.build\n> > @@ -30,6 +30,7 @@ internal_tests = [\n> >      ['object',                          'object.cpp'],\n> >      ['object-invoke',                   'object-invoke.cpp'],\n> >      ['signal-threads',                  'signal-threads.cpp'],\n> > +    ['span',                            'span.cpp'],\n> \n> Shouldn't this go into public_tests ?\n> \n> Isn't span going to be part of the public API because of it's role in\n> controls?\n\nYou're right, I'll fix that.\n\n> >      ['threads',                         'threads.cpp'],\n> >      ['timer',                           'timer.cpp'],\n> >      ['timer-thread',                    'timer-thread.cpp'],\n> > diff --git a/test/span.cpp b/test/span.cpp\n> > new file mode 100644\n> > index 000000000000..609749f51b86\n> > --- /dev/null\n> > +++ b/test/span.cpp\n> > @@ -0,0 +1,177 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Google Inc.\n> > + *\n> > + * span.cpp - Span tests\n> > + */\n> > +\n> > +#include <array>\n> > +#include <iostream>\n> > +#include <vector>\n> > +\n> > +#include <libcamera/span.h>\n> > +\n> > +#include \"test.h\"\n> > +\n> > +using namespace std;\n> > +using namespace libcamera;\n> > +\n> > +class SpanTest : public Test\n> > +{\n> > +protected:\n> > +\tint run()\n> > +\t{\n> > +\t\tint i[4]{ 1, 2, 3, 4 };\n> > +\t\tstd::array<int, 4> a{ 1, 2, 3, 4 };\n> > +\t\tconst std::array<int, 4> ca{ 1, 2, 3, 4 };\n> > +\t\tstd::vector<int> v{ 1, 2, 3, 4 };\n> > +\t\tconst std::vector<int> cv{ 1, 2, 3, 4 };\n> > +\n> > +\t\t/*\n> > +\t\t * Compile-test construction and usage of spans with static\n> > +\t\t * extent. Commented-out tests are expected not to compile, or\n> > +\t\t * to generate undefined behaviour.\n> > +\t\t */\n> > +\n> > +\t\tSpan<int, 0>{};\n> > +\t\t/* Span<int, 4>{}; */\n> > +\n> > +\t\tSpan<int, 4>{ &i[0], 4 };\n> > +\t\tSpan<int, 4>{ &i[0], &i[3] };\n> > +\n> > +\t\tSpan<int, 4>{ i };\n> > +\t\t/* Span<float, 4>{ i }; */\n> > +\t\t/* Span<int, 2>{ i }; */\n> > +\n> > +\t\tSpan<int, 4>{ a };\n> > +\t\tSpan<const int, 4>{ a };\n> > +\t\t/* Span<float, 4>{ a }; */\n> > +\t\t/* Span<int, 2>{ a }; */\n> > +\n> > +\t\tSpan<const int, 4>{ ca };\n> > +\t\t/* Span<const int, 2>{ ca }; */\n> > +\t\t/* Span<const float, 4>{ ca }; */\n> > +\t\t/* Span<int, 4>{ ca }; */\n> > +\n> > +\t\tSpan<int, 4>{ v };\n> > +\t\tSpan<const int, 4>{ v };\n> > +\t\t/* Span<float, 4>{ v }; */\n> > +\n> > +\t\tSpan<const int, 4>{ v };\n> > +\t\t/* Span<int, 4>{ v }; */\n> > +\t\t/* Span<const float, 4>{ v }; */\n> > +\n> > +\t\tSpan<int, 4> staticSpan{ i };\n> > +\t\tSpan<int, 4>{ staticSpan };\n> > +\t\tSpan<const int, 4>{ staticSpan };\n> > +\t\t/* Span<const int, 2>{ staticSpan }; */\n> > +\n> > +\t\tstaticSpan = Span<int, 4>{ v };\n> > +\n> > +\t\tstaticSpan.begin();\n> > +\t\tstaticSpan.cbegin();\n> > +\t\tstaticSpan.end();\n> > +\t\tstaticSpan.cend();\n> > +\t\tstaticSpan.rbegin();\n> > +\t\tstaticSpan.crbegin();\n> > +\t\tstaticSpan.rend();\n> > +\t\tstaticSpan.crend();\n> > +\n> > +\t\tstaticSpan.front();\n> > +\t\tstaticSpan.back();\n> > +\t\tstaticSpan[0];\n> > +\t\tstaticSpan.data();\n> > +\n> > +\t\tstaticSpan.size();\n> > +\t\tstaticSpan.size_bytes();\n> > +\n> > +\t\tstaticSpan.empty();\n> > +\n> > +\t\tstaticSpan.first<2>();\n> > +\t\tstaticSpan.first(2);\n> > +\t\t/* staticSpan.first<6>(); */\n> > +\t\t/* staticSpan.first(6); */\n> > +\t\tstaticSpan.last<2>();\n> > +\t\tstaticSpan.last(2);\n> > +\t\t/* staticSpan.last<6>(); */\n> > +\t\t/* staticSpan.last(6); */\n> > +\t\tstaticSpan.subspan<1>();\n> > +\t\tstaticSpan.subspan<1, 2>();\n> > +\t\tstaticSpan.subspan(1);\n> > +\t\tstaticSpan.subspan(1, 2);\n> > +\t\t/* staticSpan.subspan(2, 4); */\n> > +\n> > +\t\t/*\n> > +\t\t * Compile-test construction and usage of spans with static\n> > +\t\t * extent. Commented-out tests are expected not to compile, or\n> > +\t\t * to generate undefined behaviour.\n> > +\t\t */\n> > +\n> > +\t\tSpan<int>{};\n> > +\n> > +\t\tSpan<int>{ &i[0], 4 };\n> > +\t\tSpan<int>{ &i[0], &i[3] };\n> > +\n> > +\t\tSpan<int>{ i };\n> > +\t\t/* Span<float>{ i }; */\n> > +\n> > +\t\tSpan<int>{ a };\n> > +\t\tSpan<const int>{ a };\n> > +\t\t/* Span<float>{ a }; */\n> > +\n> > +\t\tSpan<const int>{ ca };\n> > +\t\t/* Span<const float>{ca}; */\n> > +\t\t/* Span<int>{ca}; */\n> > +\n> > +\t\tSpan<int>{ v };\n> > +\t\tSpan<const int>{ v };\n> > +\t\t/* Span<float>{ v }; */\n> > +\n> > +\t\tSpan<const int>{ v };\n> > +\t\t/* Span<int>{ v }; */\n> > +\t\t/* Span<const float>{ v }; */\n> > +\n> > +\t\tSpan<int> dynamicSpan{ i };\n> > +\t\tSpan<int>{ dynamicSpan };\n> > +\t\tSpan<const int>{ dynamicSpan };\n> > +\n> > +\t\tdynamicSpan = Span<int>{ a };\n> > +\n> > +\t\tdynamicSpan.begin();\n> > +\t\tdynamicSpan.cbegin();\n> > +\t\tdynamicSpan.end();\n> > +\t\tdynamicSpan.cend();\n> > +\t\tdynamicSpan.rbegin();\n> > +\t\tdynamicSpan.crbegin();\n> > +\t\tdynamicSpan.rend();\n> > +\t\tdynamicSpan.crend();\n> > +\n> > +\t\tdynamicSpan.front();\n> > +\t\tdynamicSpan.back();\n> > +\t\tdynamicSpan[0];\n> > +\t\tdynamicSpan.data();\n> > +\n> > +\t\tdynamicSpan.size();\n> > +\t\tdynamicSpan.size_bytes();\n> > +\n> > +\t\tdynamicSpan.empty();\n> > +\n> > +\t\tdynamicSpan.first<2>();\n> > +\t\tdynamicSpan.first(2);\n> > +\t\t/* dynamicSpan.first<6>(); */\n> > +\t\t/* dynamicSpan.first(6); */\n> > +\t\tdynamicSpan.last<2>();\n> > +\t\tdynamicSpan.last(2);\n> > +\t\t/* dynamicSpan.last<6>(); */\n> > +\t\t/* dynamicSpan.last(6); */\n> > +\t\tdynamicSpan.subspan<1>();\n> > +\t\tdynamicSpan.subspan<1, 2>();\n> > +\t\tdynamicSpan.subspan(1);\n> > +\t\tdynamicSpan.subspan(1, 2);\n> > +\t\t/* dynamicSpan.subspan(2, 4); */\n> > +\n> > +\t\treturn TestPass;\n> > +\t}\n> > +};\n> > +\n> > +TEST_REGISTER(SpanTest)","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0347B62710\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  2 Mar 2020 17:44:13 +0100 (CET)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5F5629D0;\n\tMon,  2 Mar 2020 17:44:13 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1583167453;\n\tbh=V6aU5tJwpLVCP2AmPZyligFT/58eOS4LrYyAn0FEi6k=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=nOII+ckKo1KBnETcnRGIk1YQy6/GG4n3FwudWDMAzSBhZsPt4y6L7rwEsFLBIuer3\n\tTT8pJwXVeoKC0/EZbNfChoy3yP/GLtS8pB6u7nrAoyp2J2KIezNnemcTqh4NzGgpGZ\n\tn1QHBHvm7ZzgThgJifqFSYb1Y9b9m3FAwYbvKYik=","Date":"Mon, 2 Mar 2020 18:43:49 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200302164349.GU11960@pendragon.ideasonboard.com>","References":"<20200229164254.23604-1-laurent.pinchart@ideasonboard.com>\n\t<20200229164254.23604-3-laurent.pinchart@ideasonboard.com>\n\t<5b85e015-eecb-7842-c10c-24ad4d522dfb@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<5b85e015-eecb-7842-c10c-24ad4d522dfb@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 02/31] test: Add Span test","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>","X-List-Received-Date":"Mon, 02 Mar 2020 16:44:14 -0000"}}]