[{"id":24630,"web_url":"https://patchwork.libcamera.org/comment/24630/","msgid":"<20220818120740.GE2412817@pyrite.rasen.tech>","date":"2022-08-18T12:07:40","subject":"Re: [libcamera-devel] [PATCH v4 2/9] test: yaml-parser: Centralize\n\tinteger parse checks","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"On Tue, Aug 16, 2022 at 04:54:07AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Centralize the signed and unsigned integer parse checks to avoid code\n> duplication. The diffstat isn't very impressive at this point, but this\n> will help more when adding 8-bit and 16-bit integer tests.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  test/yaml-parser.cpp | 86 ++++++++++++++++++++++++--------------------\n>  1 file changed, 48 insertions(+), 38 deletions(-)\n> \n> diff --git a/test/yaml-parser.cpp b/test/yaml-parser.cpp\n> index 6729e1bd430e..803e70beb782 100644\n> --- a/test/yaml-parser.cpp\n> +++ b/test/yaml-parser.cpp\n> @@ -149,6 +149,52 @@ protected:\n>  \t\treturn TestPass;\n>  \t}\n>  \n> +\tint testIntegerObject(const YamlObject &obj, const char *name, Type type,\n> +\t\t\t      int64_t value)\n> +\t{\n> +\t\tuint64_t unsignedValue = static_cast<uint64_t>(value);\n> +\t\tstd::string strValue = std::to_string(value);\n> +\t\tbool isSigned = type == Type::Int32;\n> +\n> +\t\t/* All integers can be parsed as strings or double. */\n> +\n> +\t\tif (obj.get<string>().value_or(\"\") != strValue ||\n> +\t\t    obj.get<string>(\"\") != strValue) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"string\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (obj.get<double>().value_or(0.0) != value ||\n> +\t\t    obj.get<double>(0.0) != value) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"double\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (obj.get<int32_t>().value_or(0) != value ||\n> +\t\t    obj.get<int32_t>(0) != value) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"int32_t\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (!isSigned) {\n> +\t\t\tif (obj.get<uint32_t>().value_or(0) != unsignedValue ||\n> +\t\t\t    obj.get<uint32_t>(0) != unsignedValue) {\n> +\t\t\t\tstd::cerr\n> +\t\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t\t<< \"uint32_t\" << std::endl;\n> +\t\t\t\treturn TestFail;\n> +\t\t\t}\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n>  \tint run()\n>  \t{\n>  \t\t/* Test invalid YAML file */\n> @@ -215,23 +261,8 @@ protected:\n>  \t\tif (testObjectType(int32Obj, \"int32_t\", Type::Int32) != TestPass)\n>  \t\t\treturn TestFail;\n>  \n> -\t\tif (int32Obj.get<int32_t>().value_or(0) != -100 ||\n> -\t\t    int32Obj.get<int32_t>(0) != -100) {\n> -\t\t\tcerr << \"Integer object parse as wrong value\" << std::endl;\n> +\t\tif (testIntegerObject(int32Obj, \"int32_t\", Type::Int32, -100) != TestPass)\n>  \t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (int32Obj.get<string>().value_or(\"\") != \"-100\" ||\n> -\t\t    int32Obj.get<string>(\"\") != \"-100\") {\n> -\t\t\tcerr << \"Integer object fail to parse as string\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (int32Obj.get<double>().value_or(0.0) != -100.0 ||\n> -\t\t    int32Obj.get<double>(0.0) != -100.0) {\n> -\t\t\tcerr << \"Integer object fail to parse as double\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n>  \n>  \t\t/* Test uint32_t object */\n>  \t\tauto &uint32Obj = (*root)[\"uint32_t\"];\n> @@ -239,29 +270,8 @@ protected:\n>  \t\tif (testObjectType(uint32Obj, \"uint32_t\", Type::UInt32) != TestPass)\n>  \t\t\treturn TestFail;\n>  \n> -\t\tif (uint32Obj.get<int32_t>().value_or(0) != 100 ||\n> -\t\t    uint32Obj.get<int32_t>(0) != 100) {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as integer\" << std::endl;\n> +\t\tif (testIntegerObject(uint32Obj, \"uint32_t\", Type::UInt32, 100) != TestPass)\n>  \t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<string>().value_or(\"\") != \"100\" ||\n> -\t\t    uint32Obj.get<string>(\"\") != \"100\") {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as string\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<double>().value_or(0.0) != 100.0 ||\n> -\t\t    uint32Obj.get<double>(0.0) != 100.0) {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as double\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<uint32_t>().value_or(0) != 100 ||\n> -\t\t    uint32Obj.get<uint32_t>(0) != 100) {\n> -\t\t\tcerr << \"Unsigned integer object parsed as wrong value\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n>  \n>  \t\t/* Test double value */\n>  \t\tauto &doubleObj = (*root)[\"double\"];\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 4924FC3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Aug 2022 12:07:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0015961FC0;\n\tThu, 18 Aug 2022 14:07:48 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 87D0F61FA7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Aug 2022 14:07:47 +0200 (CEST)","from pyrite.rasen.tech (KD027085204050.au-net.ne.jp [27.85.204.50])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3CE6B8B;\n\tThu, 18 Aug 2022 14:07:45 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660824469;\n\tbh=KMRqz65vCN+MDP77pN/4/9iAuSoTj4oG7AVG7TDOkXA=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=d2DNmNUQtKbLxRcdzyPJKYM5myY2YgeF+FDHjQS/OXCxtbos/ZaoYMk8uwt0V/Ndf\n\tGKLteRk/TE5mN6CoUhgQv7jTUUCbl06rkR/gmHPUP2HMH5whd1Di1YqUQAdQSIJJCW\n\tdkpjrCAmWNzamAvlTziLmoka7j61lmXQFki6sOReX1hhrYCxGQav+c/vvkPcDS6RxW\n\t3x0P1mFbxnnxQbXBnyFO6W82r1P67Ag3TLDP7AFIRvB2FUr40AH73D7lEjFOboo03l\n\th70s5B9616DJ/WFKdWkUasVcstrCEOKZzDCT5FcOihEs8nmvs1KzarW0u6CT0vDbPe\n\tG0d0AyglN83zA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1660824467;\n\tbh=KMRqz65vCN+MDP77pN/4/9iAuSoTj4oG7AVG7TDOkXA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qLFT5VQRuorPYPYoE+FeCL7TO+6Ykc+6qqffzxHjgpieS2/9sRicmmJW4OSIF9zGV\n\tXmgnP5SW4u48W3sbS63HL9EAhI/B+WiC0N6CezfgwuskJjZj54OBr/pYlmu+GkUbTn\n\thwshH/nBQL4OfTDGLW5zRMqSA5u6drTVnO43tkNc="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"qLFT5VQR\"; dkim-atps=neutral","Date":"Thu, 18 Aug 2022 21:07:40 +0900","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220818120740.GE2412817@pyrite.rasen.tech>","References":"<20220816015414.7462-1-laurent.pinchart@ideasonboard.com>\n\t<20220816015414.7462-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20220816015414.7462-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 2/9] test: yaml-parser: Centralize\n\tinteger parse checks","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>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":24635,"web_url":"https://patchwork.libcamera.org/comment/24635/","msgid":"<20220818125002.tqzh5gtqnpa523to@uno.localdomain>","date":"2022-08-18T12:50:02","subject":"Re: [libcamera-devel] [PATCH v4 2/9] test: yaml-parser: Centralize\n\tinteger parse checks","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\n Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\n\nOn Tue, Aug 16, 2022 at 04:54:07AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Centralize the signed and unsigned integer parse checks to avoid code\n> duplication. The diffstat isn't very impressive at this point, but this\n> will help more when adding 8-bit and 16-bit integer tests.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  test/yaml-parser.cpp | 86 ++++++++++++++++++++++++--------------------\n>  1 file changed, 48 insertions(+), 38 deletions(-)\n>\n> diff --git a/test/yaml-parser.cpp b/test/yaml-parser.cpp\n> index 6729e1bd430e..803e70beb782 100644\n> --- a/test/yaml-parser.cpp\n> +++ b/test/yaml-parser.cpp\n> @@ -149,6 +149,52 @@ protected:\n>  \t\treturn TestPass;\n>  \t}\n>\n> +\tint testIntegerObject(const YamlObject &obj, const char *name, Type type,\n> +\t\t\t      int64_t value)\n> +\t{\n> +\t\tuint64_t unsignedValue = static_cast<uint64_t>(value);\n> +\t\tstd::string strValue = std::to_string(value);\n> +\t\tbool isSigned = type == Type::Int32;\n> +\n> +\t\t/* All integers can be parsed as strings or double. */\n> +\n> +\t\tif (obj.get<string>().value_or(\"\") != strValue ||\n> +\t\t    obj.get<string>(\"\") != strValue) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"string\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (obj.get<double>().value_or(0.0) != value ||\n> +\t\t    obj.get<double>(0.0) != value) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"double\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (obj.get<int32_t>().value_or(0) != value ||\n> +\t\t    obj.get<int32_t>(0) != value) {\n> +\t\t\tstd::cerr\n> +\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t<< \"int32_t\" << std::endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (!isSigned) {\n> +\t\t\tif (obj.get<uint32_t>().value_or(0) != unsignedValue ||\n> +\t\t\t    obj.get<uint32_t>(0) != unsignedValue) {\n> +\t\t\t\tstd::cerr\n> +\t\t\t\t\t<< \"Object \" << name << \" failed to parse as \"\n> +\t\t\t\t\t<< \"uint32_t\" << std::endl;\n> +\t\t\t\treturn TestFail;\n> +\t\t\t}\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n>  \tint run()\n>  \t{\n>  \t\t/* Test invalid YAML file */\n> @@ -215,23 +261,8 @@ protected:\n>  \t\tif (testObjectType(int32Obj, \"int32_t\", Type::Int32) != TestPass)\n>  \t\t\treturn TestFail;\n>\n> -\t\tif (int32Obj.get<int32_t>().value_or(0) != -100 ||\n> -\t\t    int32Obj.get<int32_t>(0) != -100) {\n> -\t\t\tcerr << \"Integer object parse as wrong value\" << std::endl;\n> +\t\tif (testIntegerObject(int32Obj, \"int32_t\", Type::Int32, -100) != TestPass)\n>  \t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (int32Obj.get<string>().value_or(\"\") != \"-100\" ||\n> -\t\t    int32Obj.get<string>(\"\") != \"-100\") {\n> -\t\t\tcerr << \"Integer object fail to parse as string\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (int32Obj.get<double>().value_or(0.0) != -100.0 ||\n> -\t\t    int32Obj.get<double>(0.0) != -100.0) {\n> -\t\t\tcerr << \"Integer object fail to parse as double\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n>\n>  \t\t/* Test uint32_t object */\n>  \t\tauto &uint32Obj = (*root)[\"uint32_t\"];\n> @@ -239,29 +270,8 @@ protected:\n>  \t\tif (testObjectType(uint32Obj, \"uint32_t\", Type::UInt32) != TestPass)\n>  \t\t\treturn TestFail;\n>\n> -\t\tif (uint32Obj.get<int32_t>().value_or(0) != 100 ||\n> -\t\t    uint32Obj.get<int32_t>(0) != 100) {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as integer\" << std::endl;\n> +\t\tif (testIntegerObject(uint32Obj, \"uint32_t\", Type::UInt32, 100) != TestPass)\n>  \t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<string>().value_or(\"\") != \"100\" ||\n> -\t\t    uint32Obj.get<string>(\"\") != \"100\") {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as string\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<double>().value_or(0.0) != 100.0 ||\n> -\t\t    uint32Obj.get<double>(0.0) != 100.0) {\n> -\t\t\tcerr << \"Unsigned integer object fail to parse as double\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n> -\n> -\t\tif (uint32Obj.get<uint32_t>().value_or(0) != 100 ||\n> -\t\t    uint32Obj.get<uint32_t>(0) != 100) {\n> -\t\t\tcerr << \"Unsigned integer object parsed as wrong value\" << std::endl;\n> -\t\t\treturn TestFail;\n> -\t\t}\n>\n>  \t\t/* Test double value */\n>  \t\tauto &doubleObj = (*root)[\"double\"];\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 3DFB7C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Aug 2022 12:50:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7F34361FC0;\n\tThu, 18 Aug 2022 14:50:06 +0200 (CEST)","from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::224])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7F83C61FA7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Aug 2022 14:50:05 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id BD36DE000B;\n\tThu, 18 Aug 2022 12:50:04 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660827006;\n\tbh=KAnHt8qA3wir9YV5E7Yd+Lgnn03KUxxYgkaUvJG/6qQ=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=tXA9fVuZvJ09CsLEkwQD/JbE7jtzMGqxXxexuLBDnXEfwp9lRDb3dbNS2PiHvJEQu\n\tcs26YwCZt3XPmRBoSCDF3uq4oHaVoUW9H98abU62JDw0P6+Rq3f2SozKlbgqi8cOlP\n\tQfcWBfOG5A5KgE9m1OttV8v/MN+XP8+Cb45wpRJctKua71rEyMuj44S2p1TDDH8jco\n\tUjStQuRce3bn/DhI3eU26W/5DJkz1nAR0Yea4w3vKejEwubxCVAyIdqrJCMr2+B8hv\n\t/GDcBElRrKlnjgz/8U6SFsw+qNLT433jzeC3AaSjSsxZbI8fQmwoyYPW63nSINrUXx\n\ty/RyYEX8wk/yw==","Date":"Thu, 18 Aug 2022 14:50:02 +0200","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220818125002.tqzh5gtqnpa523to@uno.localdomain>","References":"<20220816015414.7462-1-laurent.pinchart@ideasonboard.com>\n\t<20220816015414.7462-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220816015414.7462-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 2/9] test: yaml-parser: Centralize\n\tinteger parse checks","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>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]