| 
									
										
										
										
											2021-03-29 17:14:01 +02:00
										 |  |  | // ArduinoJson - https://arduinojson.org
 | 
					
						
							| 
									
										
										
										
											2025-02-24 15:18:26 +01:00
										 |  |  | // Copyright © 2014-2025, Benoit BLANCHON
 | 
					
						
							| 
									
										
										
										
											2015-08-10 17:22:22 +02:00
										 |  |  | // MIT License
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <ArduinoJson.h>
 | 
					
						
							| 
									
										
										
										
											2016-02-14 16:18:13 +01:00
										 |  |  | #include <stdint.h>
 | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | #include <catch.hpp>
 | 
					
						
							| 
									
										
										
										
											2016-02-14 16:18:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  | #include "Literals.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  | namespace my { | 
					
						
							| 
									
										
										
										
											2023-02-14 10:04:48 +01:00
										 |  |  | using ArduinoJson::detail::isinf; | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  | }  // namespace my
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-04 09:09:57 +02:00
										 |  |  | enum MY_ENUM { ONE = 1, TWO = 2 }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | TEST_CASE("JsonVariant::as()") { | 
					
						
							| 
									
										
										
										
											2019-12-24 16:41:00 +01:00
										 |  |  |   static const char* null = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-17 18:15:13 +02:00
										 |  |  |   JsonDocument doc; | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |   JsonVariant variant = doc.to<JsonVariant>(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("not set") { | 
					
						
							|  |  |  |     REQUIRE(false == variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(0 == variant.as<int>()); | 
					
						
							|  |  |  |     REQUIRE(0.0f == variant.as<float>()); | 
					
						
							| 
									
										
										
										
											2021-03-08 09:58:09 +01:00
										 |  |  |     REQUIRE(0 == variant.as<const char*>()); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE("null" == variant.as<std::string>()); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |   SECTION("set(float)") { | 
					
						
							|  |  |  |     variant.set(4.2f); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(0 == variant.as<const char*>()); | 
					
						
							| 
									
										
										
										
											2024-09-03 11:44:35 +02:00
										 |  |  |     REQUIRE(variant.as<std::string>() == "4.2"); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<long>() == 4L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() == 4.2f); | 
					
						
							|  |  |  |     REQUIRE(variant.as<unsigned>() == 4U); | 
					
						
							|  |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(double)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(4.2); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(0 == variant.as<const char*>()); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4.2"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 4L); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == 4.2); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<unsigned>() == 4U); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(0.0)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(0.0); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(false)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(false); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(false == variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "false"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(true)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(true); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>()); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == 1.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 1L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "true"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |   SECTION("set(uint32_t)") { | 
					
						
							|  |  |  |     variant.set(4294967295U); | 
					
						
							| 
									
										
										
										
											2021-06-30 09:17:28 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == 4294967295.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint32_t>() == 4294967295U); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint64_t>() == 4294967295U); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4294967295"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2021-06-30 09:17:28 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |   SECTION("set(int32_t)") { | 
					
						
							|  |  |  |     variant.set(-2147483648LL); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == -2147483648LL); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int32_t>() == -2147483648LL); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int64_t>() == -2147483648LL); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint64_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "-2147483648"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |   SECTION("set(uint64_t)") { | 
					
						
							|  |  |  |     variant.set(4294967296U); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 4294967296.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint64_t>() == 4294967296U); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4294967296"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |   SECTION("set(int64_t)") { | 
					
						
							|  |  |  |     variant.set(-2147483649LL); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == -2147483649LL); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int64_t>() == -2147483649LL); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint32_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<uint64_t>() == 0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "-2147483649"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-08-27 16:06:38 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(0L)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(0L); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |     REQUIRE(variant.as<std::string>() == "0"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(0UL)") { | 
					
						
							|  |  |  |     variant.set(0UL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "0"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(null)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(null); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "null"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"42\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("42"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<long>() == 42L); | 
					
						
							| 
									
										
										
										
											2025-02-27 11:01:51 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == 42); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "42"); | 
					
						
							| 
									
										
										
										
											2024-11-26 14:32:21 +01:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isStatic() == true); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"hello\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("hello"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     REQUIRE(variant.as<const char*>() == "hello"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<const char*>() == "hello"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "hello"_s); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "hello"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |   SECTION("set(std::string(\"4.2\"))") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     variant.set("4.2"_s); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |     REQUIRE(variant.as<long>() == 4L); | 
					
						
							| 
									
										
										
										
											2024-09-04 14:33:14 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == Approx(4.2)); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     REQUIRE(variant.as<const char*>() == "4.2"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4.2"_s); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "4.2"); | 
					
						
							| 
									
										
										
										
											2024-11-26 14:32:21 +01:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isStatic() == false); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"true\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("true"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int>() == 0); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "true"); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(-1e300)") { | 
					
						
							|  |  |  |     variant.set(-1e300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == -1e300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() < 0); | 
					
						
							|  |  |  |     REQUIRE(my::isinf(variant.as<float>())); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(1e300)") { | 
					
						
							|  |  |  |     variant.set(1e300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == 1e300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() > 0); | 
					
						
							|  |  |  |     REQUIRE(my::isinf(variant.as<float>())); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |   SECTION("set(1e-300)") { | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     variant.set(1e-300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == 1e-300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() == 0); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |   SECTION("set(serialized(\"hello\"))") { | 
					
						
							|  |  |  |     variant.set(serialized("hello")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("to<JsonObject>()") { | 
					
						
							|  |  |  |     JsonObject obj = variant.to<JsonObject>(); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |     obj["key"] = "value"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     SECTION("as<bool>()") { | 
					
						
							|  |  |  |       REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<std::string>()") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(variant.as<std::string>() == "{\"key\":\"value\"}"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SECTION("ObjectAsJsonObject") { | 
					
						
							|  |  |  |       JsonObject o = variant.as<JsonObject>(); | 
					
						
							|  |  |  |       REQUIRE(o.size() == 1); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(o["key"] == "value"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("to<JsonArray>()") { | 
					
						
							|  |  |  |     JsonArray arr = variant.to<JsonArray>(); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |     arr.add(4); | 
					
						
							|  |  |  |     arr.add(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     SECTION("as<bool>()") { | 
					
						
							|  |  |  |       REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<std::string>()") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(variant.as<std::string>() == "[4,2]"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<JsonArray>()") { | 
					
						
							|  |  |  |       JsonArray a = variant.as<JsonArray>(); | 
					
						
							|  |  |  |       REQUIRE(a.size() == 2); | 
					
						
							|  |  |  |       REQUIRE(a[0] == 4); | 
					
						
							|  |  |  |       REQUIRE(a[1] == 2); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 16:54:05 +02:00
										 |  |  | #if ARDUINOJSON_USE_LONG_LONG
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("Smallest int64 negative") { | 
					
						
							|  |  |  |     variant.set("-9223372036854775808"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long long>() == -9223372036854775807 - 1); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |   SECTION("Biggest int64 positive") { | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     variant.set("9223372036854775807"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long long>() == 9223372036854775807); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2018-10-12 12:00:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-04 09:09:57 +02:00
										 |  |  |   SECTION("as<enum>()") { | 
					
						
							|  |  |  |     variant.set(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<MY_ENUM>() == ONE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-07-17 17:22:58 +02:00
										 |  |  | } |