// This file is a part of toml++ and is subject to the the terms of the MIT license. // Copyright (c) Mark Gillard // See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. // SPDX-License-Identifier: MIT //----- // this file was generated by generate_conformance_tests.py - do not modify it directly #include "tests.h" namespace { static constexpr auto spec_array_1 = "integers = [ 1, 2, 3 ]"sv; static constexpr auto spec_array_2 = "colors = [ \"red\", \"yellow\", \"green\" ]"sv; static constexpr auto spec_array_3 = "nested_array_of_int = [ [ 1, 2 ], [3, 4, 5] ]"sv; static constexpr auto spec_array_4 = "string_array = [ \"all\", 'strings', \"\"\"are the same\"\"\", '''type''']"sv; static constexpr auto spec_array_5 = "nested_mixed_array = [ [ 1, 2 ], [\"a\", \"b\", \"c\"] ]"sv; static constexpr auto spec_array_7 = "integers2 = [\r\n" " 1, 2, 3\r\n" "]"sv; static constexpr auto spec_array_8 = "integers3 = [\r\n" " 1,\r\n" " 2, # this is ok\r\n" "]"sv; static constexpr auto spec_array_mixed_number_types = "numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]"sv; static constexpr auto spec_array_more_mixed_types = "contributors = [\r\n" " \"Foo Bar \",\r\n" " { name = \"Baz Qux\", email = \"bazqux@example.com\", url = \"https://example.com/bazqux\" }\r\n" "]"sv; static constexpr auto spec_array_of_tables_1 = "[[products]]\r\n" "name = \"Hammer\"\r\n" "sku = 738594937\r\n" "\r\n" "[[products]]\r\n" "\r\n" "[[products]]\r\n" "name = \"Nail\"\r\n" "sku = 284758393\r\n" "color = \"gray\""sv; static constexpr auto spec_array_of_tables_2 = "[[fruit]]\r\n" " name = \"apple\"\r\n" "\r\n" " [fruit.physical]\r\n" " color = \"red\"\r\n" " shape = \"round\"\r\n" "\r\n" " [[fruit.variety]]\r\n" " name = \"red delicious\"\r\n" "\r\n" " [[fruit.variety]]\r\n" " name = \"granny smith\"\r\n" "\r\n" "[[fruit]]\r\n" " name = \"banana\"\r\n" "\r\n" " [[fruit.variety]]\r\n" " name = \"plantain\""sv; static constexpr auto spec_array_of_tables_3 = "points = [ { x = 1, y = 2, z = 3 },\r\n" " { x = 7, y = 8, z = 9 },\r\n" " { x = 2, y = 4, z = 8 } ]"sv; static constexpr auto spec_boolean_1 = "bool1 = true"sv; static constexpr auto spec_boolean_2 = "bool1 = false"sv; static constexpr auto spec_case_sensitive = "# TOML is case sensitive.\r\n" "abc = 123\r\n" "ABC = 456"sv; static constexpr auto spec_comment_mid_array = "# eol commetns can go anywhere\r\n" "abc = [ # this is valid\r\n" " 123,#as is this\r\n" " 456 #so is this\r\n" " ]# and this\r\n" "# here too"sv; static constexpr auto spec_comment_mid_string = "another = \"# This is not a comment\""sv; static constexpr auto spec_comment_tab = "# This is a full-line comment with a tab in the middle\r\n" "key = \"value\" # This is a commen with a tab in the middle at the end of a line"sv; static constexpr auto spec_comment = "# This is a full-line comment\r\n" "key = \"value\" # This is a comment at the end of a line"sv; static constexpr auto spec_date_local_1 = "ld1 = 1979-05-27"sv; static constexpr auto spec_date_time_1 = "odt1 = 1979-05-27T07:32:00Z"sv; static constexpr auto spec_date_time_2 = "odt2 = 1979-05-27T00:32:00-07:00"sv; static constexpr auto spec_date_time_3 = "odt3 = 1979-05-27T00:32:00.999999-07:00"sv; static constexpr auto spec_date_time_4 = "odt4 = 1979-05-27 07:32:00Z"sv; static constexpr auto spec_date_time_5 = "odt5 = 1979-05-27T07:32:00.123Z"sv; static constexpr auto spec_date_time_local_1 = "ldt1 = 1979-05-27T07:32:00"sv; static constexpr auto spec_dotted_keys_1 = "name = \"Orange\"\r\n" "physical.color = \"orange\"\r\n" "physical.shape = \"round\"\r\n" "site.\"google.com\" = true"sv; static constexpr auto spec_dotted_keys_2 = "a . b = 23"sv; static constexpr auto spec_dotted_keys_3 = "a . b = 23"sv; static constexpr auto spec_empty_key_name_1 = "\"\" = \"blank\" # VALID but discouraged"sv; static constexpr auto spec_empty_key_name_2 = "'' = \"blank\" # VALID but discouraged"sv; static constexpr auto spec_extend_dotted_object_1 = "# This makes the key \"fruit\" into a table.\r\n" "fruit.apple.smooth = true\r\n" "\r\n" "# So then you can add to the table \"fruit\" like so:\r\n" "fruit.orange = 2"sv; static constexpr auto spec_extend_dotted_object_2 = "# VALID BUT DISCOURAGED\r\n" "\r\n" "apple.type = \"fruit\"\r\n" "orange.type = \"fruit\"\r\n" "\r\n" "apple.skin = \"thin\"\r\n" "orange.skin = \"thick\"\r\n" "\r\n" "apple.color = \"red\"\r\n" "orange.color = \"orange\""sv; static constexpr auto spec_extend_dotted_object_3 = "# RECOMMENDED\r\n" "\r\n" "apple.type = \"fruit\"\r\n" "apple.skin = \"thin\"\r\n" "apple.color = \"red\"\r\n" "\r\n" "orange.type = \"fruit\"\r\n" "orange.skin = \"thick\"\r\n" "orange.color = \"orange\""sv; static constexpr auto spec_float_1 = "flt1 = +1.0"sv; static constexpr auto spec_float_10 = "sf1 = inf # positive infinity"sv; static constexpr auto spec_float_11 = "sf2 = +inf # positive infinity"sv; static constexpr auto spec_float_12 = "sf2 = -inf # negative infinity"sv; static constexpr auto spec_float_13 = "sf4 = nan # actual sNaN/qNaN encoding is implementation specific"sv; static constexpr auto spec_float_14 = "sf5 = +nan # same as `nan`"sv; static constexpr auto spec_float_15 = "sf6 = -nan # valid, actual encoding is implementation specific"sv; static constexpr auto spec_float_2 = "flt2 = 3.1415"sv; static constexpr auto spec_float_3 = "flt3 = -0.01"sv; static constexpr auto spec_float_4 = "flt4 = 5e+22"sv; static constexpr auto spec_float_5 = "flt5 = 1e06"sv; static constexpr auto spec_float_6 = "flt6 = -2E-2"sv; static constexpr auto spec_float_7 = "flt7 = 6.626e-34"sv; static constexpr auto spec_float_8 = "flt8 = 224_617.445_991_228"sv; static constexpr auto spec_float_9 = "flt9 = -0e0"sv; static constexpr auto spec_int_1 = "int1 = +99"sv; static constexpr auto spec_int_2 = "int2 = 42"sv; static constexpr auto spec_int_3 = "int3 = 0"sv; static constexpr auto spec_int_3a = "int3 = +0"sv; static constexpr auto spec_int_3b = "int3 = -0"sv; static constexpr auto spec_int_4 = "int4 = -17"sv; static constexpr auto spec_int_5 = "int5 = 1_000"sv; static constexpr auto spec_int_6 = "int6 = 5_349_221"sv; static constexpr auto spec_int_7 = "int7 = 1_2_3_4_5 # VALID but discouraged"sv; static constexpr auto spec_int_bin1 = "bin1 = 0b11010110"sv; static constexpr auto spec_int_hex1 = "hex1 = 0xDEADBEEF"sv; static constexpr auto spec_int_hex2 = "hex2 = 0xdeadbeef"sv; static constexpr auto spec_int_hex3 = "hex3 = 0xdead_beef"sv; static constexpr auto spec_int_max = "max=9_223_372_036_854_775_807"sv; static constexpr auto spec_int_min = "min=-9_223_372_036_854_775_808"sv; static constexpr auto spec_int_oct1 = "oct1 = 0o01234567"sv; static constexpr auto spec_int_oct2 = "oct2 = 0o755 # useful for Unix file permissions"sv; static constexpr auto spec_key_value_pair_1 = "key = \"value\""sv; static constexpr auto spec_key_value_pair_2 = "bare_key = \"value\""sv; static constexpr auto spec_key_value_pair_3 = "bare-key = \"value\""sv; static constexpr auto spec_key_value_pair_4 = "1234 = \"value\""sv; static constexpr auto spec_key_value_pair_5 = "1234=\"value\""sv; static constexpr auto spec_key_value_pair_6 = "-=1"sv; static constexpr auto spec_key_value_pair_7 = "_=1"sv; static constexpr auto spec_key_value_pair_8 = "-_-_-_-_-=1"sv; static constexpr auto spec_key_value_pair_9 = "3.14159 = \"pi\""sv; static constexpr auto spec_newline_1 = R"(abc = 123 def = 456)"sv; static constexpr auto spec_newline_2 = "abc = 123\r\n" "def = 456"sv; static constexpr auto spec_newline_3 = "abc = 123\r\n" "def = 456\n" "ghi = 789"sv; static constexpr auto spec_quoted_literal_keys_1 = "'quoted \"value\"' = \"value\""sv; static constexpr auto spec_readme_example = "# This is a TOML document.\r\n" "\r\n" "title = \"TOML Example\"\r\n" "\r\n" "[owner]\r\n" "name = \"Tom Preston-Werner\"\r\n" "dob = 1979-05-27T07:32:00-08:00 # First class dates\r\n" "\r\n" "[database]\r\n" "server = \"192.168.1.1\"\r\n" "ports = [ 8001, 8001, 8002 ]\r\n" "connection_max = 5000\r\n" "enabled = true\r\n" "\r\n" "[servers]\r\n" "\r\n" " # Indentation (tabs and/or spaces) is allowed but not required\r\n" " [servers.alpha]\r\n" " ip = \"10.0.0.1\"\r\n" " dc = \"eqdc10\"\r\n" "\r\n" " [servers.beta]\r\n" " ip = \"10.0.0.2\"\r\n" " dc = \"eqdc10\"\r\n" "\r\n" "[clients]\r\n" "data = [ [\"gamma\", \"delta\"], [1, 2] ]\r\n" "\r\n" "# Line breaks are OK when inside arrays\r\n" "hosts = [\r\n" " \"alpha\",\r\n" " \"omega\"\r\n" "]"sv; static constexpr auto spec_string_basic_multiline_1 = "str1 = \"\"\"\r\n" "Roses are red\r\n" "Violets are blue\"\"\""sv; static constexpr auto spec_string_basic_multiline_2 = "str = \"\"\"\r\n" "The quick brown \\\r\n" "\r\n" "\r\n" " fox jumps over \\\r\n" " the lazy dog.\"\"\""sv; static constexpr auto spec_string_basic_multiline_3 = "str = \"\"\"\\\r\n" " The quick brown \\\r\n" " fox jumps over \\\r\n" " the lazy dog.\\\r\n" " \"\"\""sv; static constexpr auto spec_string_basic_multiline_4 = "a = \"\"\"abc\\ \r\n" "def\"\"\""sv; static constexpr auto spec_string_basic_multiline_5 = "ml-escaped-nl = \"\"\"\r\n" " foo \\\r\n" " bar \\\\\r\n" " baz \\\\\\\r\n" " quux\"\"\""sv; static constexpr auto spec_string_basic_multiline_6 = "str4 = \"\"\"Here are two quotation marks: \"\". Simple enough.\"\"\""sv; static constexpr auto spec_string_basic_multiline_7 = "str5 = \"\"\"Here are three quotation marks: \"\"\\\".\"\"\""sv; static constexpr auto spec_string_basic_multiline_8 = "str6 = \"\"\"Here are fifteen quotation marks: \"\"\\\"\"\"\\\"\"\"\\\"\"\"\\\"\"\"\\\".\"\"\""sv; static constexpr auto spec_string_basic_multiline_9 = "str7 = \"\"\"\"This,\" she said, \"is just a pointless statement.\"\"\"\""sv; static constexpr auto spec_string_basic_tab_multiline = "str = \"\"\"This is a tab\"\"\""sv; static constexpr auto spec_string_basic_tab = "str = \"This is a tab\""sv; static constexpr auto spec_string_escape_1 = "a = \"\\b\""sv; static constexpr auto spec_string_escape_2 = "a = \"\\t\""sv; static constexpr auto spec_string_escape_3 = "a = \"\\n\""sv; static constexpr auto spec_string_escape_4 = "a = \"\\f\""sv; static constexpr auto spec_string_escape_5 = "a = \"\\r\""sv; static constexpr auto spec_string_escape_6 = "a = \"\\\"\""sv; static constexpr auto spec_string_escape_7 = "a = \"\\\\\""sv; static constexpr auto spec_string_escape_8 = "a = \"\\u0000\""sv; static constexpr auto spec_string_escape_9 = "a = \"\\U00000000\""sv; static constexpr auto spec_string_literal_1 = "winpath = 'C:\\Users\\nodejs\\templates'"sv; static constexpr auto spec_string_literal_2 = "winpath2 = '\\\\ServerX\\admin$\\system32\\'"sv; static constexpr auto spec_string_literal_3 = "quoted = 'Tom \"Dubs\" Preston-Werner'"sv; static constexpr auto spec_string_literal_4 = "regex = '<\\i\\c*\\s*>'"sv; static constexpr auto spec_string_literal_multiline_1 = "regex2 = '''I [dw]on't need \\d{2} apples'''"sv; static constexpr auto spec_string_literal_multiline_2 = "lines = '''\r\n" "The first newline is\r\n" "trimmed in raw strings.\r\n" " All other whitespace\r\n" " is preserved.\r\n" "'''"sv; static constexpr auto spec_string_literal_multiline_3 = "quot15 = '''Here are fifteen quotation marks: \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"'''"sv; static constexpr auto spec_string_literal_multiline_4 = "str = ''''That,' she said, 'is still pointless.''''"sv; static constexpr auto spec_table_1 = "[table-1]\r\n" "key1 = \"some string\"\r\n" "key2 = 123\r\n" "\r\n" "[table-2]\r\n" "key1 = \"another string\"\r\n" "key2 = 456"sv; static constexpr auto spec_table_2 = "[dog.\"tater.man\"]\r\n" "type.name = \"pug\""sv; static constexpr auto spec_table_3 = "[a.b.c]"sv; static constexpr auto spec_table_4 = "[ d.e.f ] # same as [d.e.f]"sv; static constexpr auto spec_table_5 = "[ g . h . i ] # same as [g.h.i]"sv; static constexpr auto spec_table_7 = "# [x] you\r\n" "# [x.y] don't\r\n" "# [x.y.z] need these\r\n" "[x.y.z.w] # for this to work\r\n" "[x] # defining a super-table afterwards is ok"sv; static constexpr auto spec_table_8 = "[fruit]\r\n" "apple.color = \"red\"\r\n" "apple.taste.sweet = true\r\n" "\r\n" "[fruit.apple.texture] # you can add sub-tables\r\n" "smooth = true"sv; static constexpr auto spec_table_inline_1 = "name = { first = \"Tom\", last = \"Preston-Werner\" }"sv; static constexpr auto spec_table_inline_2 = "point = { x = 1, y = 2 }"sv; static constexpr auto spec_table_inline_3 = "animal = { type.name = \"pug\" } "sv; static constexpr auto spec_table = "[table]"sv; static constexpr auto spec_time_1 = "lt1 = 07:32:00"sv; #if UNICODE_LITERALS_OK static constexpr auto spec_quoted_basic_keys_1 = "\"ʎǝʞ\" = \"value\""sv; static constexpr auto spec_string_basic = "str = \"I'm a string. \\\"You can quote me\\\". Name\\tJos\\u00E9\\nLocation\\tSF.\""sv; static constexpr auto spec_table_6 = "[ j . \"ʞ\" . 'l' ] # same as [j.\"ʞ\".'l']"sv; #endif // UNICODE_LITERALS_OK } TEST_CASE("conformance - iarna/valid") { parsing_should_succeed(FILE_LINE_ARGS, spec_array_1, [](toml::table&& tbl) // spec-array-1 { const auto expected = toml::table{ { R"(integers)"sv, toml::array{ 1, 2, 3, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_2, [](toml::table&& tbl) // spec-array-2 { const auto expected = toml::table{ { R"(colors)"sv, toml::array{ R"(red)"sv, R"(yellow)"sv, R"(green)"sv, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_3, [](toml::table&& tbl) // spec-array-3 { const auto expected = toml::table{ { R"(nested_array_of_int)"sv, toml::array{ toml::array{ 1, 2, }, toml::array{ 3, 4, 5, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_4, [](toml::table&& tbl) // spec-array-4 { const auto expected = toml::table{ { R"(string_array)"sv, toml::array{ R"(all)"sv, R"(strings)"sv, R"(are the same)"sv, R"(type)"sv, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_5, [](toml::table&& tbl) // spec-array-5 { const auto expected = toml::table{ { R"(nested_mixed_array)"sv, toml::array{ toml::array{ 1, 2, }, toml::array{ R"(a)"sv, R"(b)"sv, R"(c)"sv, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_7, [](toml::table&& tbl) // spec-array-7 { const auto expected = toml::table{ { R"(integers2)"sv, toml::array{ 1, 2, 3, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_8, [](toml::table&& tbl) // spec-array-8 { const auto expected = toml::table{ { R"(integers3)"sv, toml::array{ 1, 2, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_mixed_number_types, [](toml::table&& tbl) // spec-array-mixed-number-types { const auto expected = toml::table{ { R"(numbers)"sv, toml::array{ 0.1, 0.2, 0.5, 1, 2, 5, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_more_mixed_types, [](toml::table&& tbl) // spec-array-more-mixed-types { const auto expected = toml::table{ { R"(contributors)"sv, toml::array{ R"(Foo Bar )"sv, toml::table{ { R"(name)"sv, R"(Baz Qux)"sv }, { R"(email)"sv, R"(bazqux@example.com)"sv }, { R"(url)"sv, R"(https://example.com/bazqux)"sv }, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_of_tables_1, [](toml::table&& tbl) // spec-array-of-tables-1 { const auto expected = toml::table{ { R"(products)"sv, toml::array{ toml::table{ { R"(name)"sv, R"(Hammer)"sv }, { R"(sku)"sv, 738594937 }, }, toml::table{}, toml::table{ { R"(name)"sv, R"(Nail)"sv }, { R"(sku)"sv, 284758393 }, { R"(color)"sv, R"(gray)"sv }, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_of_tables_2, [](toml::table&& tbl) // spec-array-of-tables-2 { const auto expected = toml::table{ { R"(fruit)"sv, toml::array{ toml::table{ { R"(name)"sv, R"(apple)"sv }, { R"(physical)"sv, toml::table{ { R"(color)"sv, R"(red)"sv }, { R"(shape)"sv, R"(round)"sv }, } }, { R"(variety)"sv, toml::array{ toml::table{ { R"(name)"sv, R"(red delicious)"sv }, }, toml::table{ { R"(name)"sv, R"(granny smith)"sv }, }, } }, }, toml::table{ { R"(name)"sv, R"(banana)"sv }, { R"(variety)"sv, toml::array{ toml::table{ { R"(name)"sv, R"(plantain)"sv }, }, } }, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_array_of_tables_3, [](toml::table&& tbl) // spec-array-of-tables-3 { const auto expected = toml::table{ { R"(points)"sv, toml::array{ toml::table{ { R"(x)"sv, 1 }, { R"(y)"sv, 2 }, { R"(z)"sv, 3 }, }, toml::table{ { R"(x)"sv, 7 }, { R"(y)"sv, 8 }, { R"(z)"sv, 9 }, }, toml::table{ { R"(x)"sv, 2 }, { R"(y)"sv, 4 }, { R"(z)"sv, 8 }, }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_boolean_1, [](toml::table&& tbl) // spec-boolean-1 { const auto expected = toml::table{ { R"(bool1)"sv, true }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_boolean_2, [](toml::table&& tbl) // spec-boolean-2 { const auto expected = toml::table{ { R"(bool1)"sv, false }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_case_sensitive, [](toml::table&& tbl) // spec-case-sensitive { const auto expected = toml::table{ { R"(abc)"sv, 123 }, { R"(ABC)"sv, 456 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_comment_mid_array, [](toml::table&& tbl) // spec-comment-mid-array { const auto expected = toml::table{ { R"(abc)"sv, toml::array{ 123, 456, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_comment_mid_string, [](toml::table&& tbl) // spec-comment-mid-string { const auto expected = toml::table{ { R"(another)"sv, R"(# This is not a comment)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_comment_tab, [](toml::table&& tbl) // spec-comment-tab { const auto expected = toml::table{ { R"(key)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_comment, [](toml::table&& tbl) // spec-comment { const auto expected = toml::table{ { R"(key)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_date_local_1, [](toml::table&& tbl) // spec-date-local-1 { const auto expected = toml::table{ { R"(ld1)"sv, toml::date{ 1979, 5, 27 } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_date_time_1, [](toml::table&& tbl) // spec-date-time-1 { const auto expected = toml::table{ { R"(odt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_date_time_2, [](toml::table&& tbl) // spec-date-time-2 { const auto expected = toml::table{ { R"(odt2)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32 }, { -7, 0 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed( FILE_LINE_ARGS, spec_date_time_3, [](toml::table&& tbl) // spec-date-time-3 { const auto expected = toml::table{ { R"(odt3)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32, 0, 999999000 }, { -7, 0 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_date_time_4, [](toml::table&& tbl) // spec-date-time-4 { const auto expected = toml::table{ { R"(odt4)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed( FILE_LINE_ARGS, spec_date_time_5, [](toml::table&& tbl) // spec-date-time-5 { const auto expected = toml::table{ { R"(odt5)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32, 0, 123000000 }, { 0, 0 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_date_time_local_1, [](toml::table&& tbl) // spec-date-time-local-1 { const auto expected = toml::table{ { R"(ldt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 } } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_dotted_keys_1, [](toml::table&& tbl) // spec-dotted-keys-1 { const auto expected = toml::table{ { R"(name)"sv, R"(Orange)"sv }, { R"(physical)"sv, toml::table{ { R"(color)"sv, R"(orange)"sv }, { R"(shape)"sv, R"(round)"sv }, } }, { R"(site)"sv, toml::table{ { R"(google.com)"sv, true }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_dotted_keys_2, [](toml::table&& tbl) // spec-dotted-keys-2 { const auto expected = toml::table{ { R"(a)"sv, toml::table{ { R"(b)"sv, 23 }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_dotted_keys_3, [](toml::table&& tbl) // spec-dotted-keys-3 { const auto expected = toml::table{ { R"(a)"sv, toml::table{ { R"(b)"sv, 23 }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_empty_key_name_1, [](toml::table&& tbl) // spec-empty-key-name-1 { const auto expected = toml::table{ { ""sv, R"(blank)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_empty_key_name_2, [](toml::table&& tbl) // spec-empty-key-name-2 { const auto expected = toml::table{ { ""sv, R"(blank)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_extend_dotted_object_1, [](toml::table&& tbl) // spec-extend-dotted-object-1 { const auto expected = toml::table{ { R"(fruit)"sv, toml::table{ { R"(apple)"sv, toml::table{ { R"(smooth)"sv, true }, } }, { R"(orange)"sv, 2 }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_extend_dotted_object_2, [](toml::table&& tbl) // spec-extend-dotted-object-2 { const auto expected = toml::table{ { R"(apple)"sv, toml::table{ { R"(type)"sv, R"(fruit)"sv }, { R"(skin)"sv, R"(thin)"sv }, { R"(color)"sv, R"(red)"sv }, } }, { R"(orange)"sv, toml::table{ { R"(type)"sv, R"(fruit)"sv }, { R"(skin)"sv, R"(thick)"sv }, { R"(color)"sv, R"(orange)"sv }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_extend_dotted_object_3, [](toml::table&& tbl) // spec-extend-dotted-object-3 { const auto expected = toml::table{ { R"(apple)"sv, toml::table{ { R"(type)"sv, R"(fruit)"sv }, { R"(skin)"sv, R"(thin)"sv }, { R"(color)"sv, R"(red)"sv }, } }, { R"(orange)"sv, toml::table{ { R"(type)"sv, R"(fruit)"sv }, { R"(skin)"sv, R"(thick)"sv }, { R"(color)"sv, R"(orange)"sv }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_1, [](toml::table&& tbl) // spec-float-1 { const auto expected = toml::table{ { R"(flt1)"sv, 1.0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_10, [](toml::table&& tbl) // spec-float-10 { const auto expected = toml::table{ { R"(sf1)"sv, std::numeric_limits::infinity() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_11, [](toml::table&& tbl) // spec-float-11 { const auto expected = toml::table{ { R"(sf2)"sv, std::numeric_limits::infinity() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_12, [](toml::table&& tbl) // spec-float-12 { const auto expected = toml::table{ { R"(sf2)"sv, -std::numeric_limits::infinity() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_13, [](toml::table&& tbl) // spec-float-13 { const auto expected = toml::table{ { R"(sf4)"sv, std::numeric_limits::quiet_NaN() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_14, [](toml::table&& tbl) // spec-float-14 { const auto expected = toml::table{ { R"(sf5)"sv, std::numeric_limits::quiet_NaN() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_15, [](toml::table&& tbl) // spec-float-15 { const auto expected = toml::table{ { R"(sf6)"sv, std::numeric_limits::quiet_NaN() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_2, [](toml::table&& tbl) // spec-float-2 { const auto expected = toml::table{ { R"(flt2)"sv, 3.1415 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_3, [](toml::table&& tbl) // spec-float-3 { const auto expected = toml::table{ { R"(flt3)"sv, -0.01 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_4, [](toml::table&& tbl) // spec-float-4 { const auto expected = toml::table{ { R"(flt4)"sv, 5e+22 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_5, [](toml::table&& tbl) // spec-float-5 { const auto expected = toml::table{ { R"(flt5)"sv, 1000000.0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_6, [](toml::table&& tbl) // spec-float-6 { const auto expected = toml::table{ { R"(flt6)"sv, -0.02 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_7, [](toml::table&& tbl) // spec-float-7 { const auto expected = toml::table{ { R"(flt7)"sv, 6.626e-34 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_8, [](toml::table&& tbl) // spec-float-8 { const auto expected = toml::table{ { R"(flt8)"sv, 224617.445991228 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_float_9, [](toml::table&& tbl) // spec-float-9 { const auto expected = toml::table{ { R"(flt9)"sv, -0.0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_1, [](toml::table&& tbl) // spec-int-1 { const auto expected = toml::table{ { R"(int1)"sv, 99 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_2, [](toml::table&& tbl) // spec-int-2 { const auto expected = toml::table{ { R"(int2)"sv, 42 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_3, [](toml::table&& tbl) // spec-int-3 { const auto expected = toml::table{ { R"(int3)"sv, 0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_3a, [](toml::table&& tbl) // spec-int-3a { const auto expected = toml::table{ { R"(int3)"sv, 0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_3b, [](toml::table&& tbl) // spec-int-3b { const auto expected = toml::table{ { R"(int3)"sv, 0 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_4, [](toml::table&& tbl) // spec-int-4 { const auto expected = toml::table{ { R"(int4)"sv, -17 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_5, [](toml::table&& tbl) // spec-int-5 { const auto expected = toml::table{ { R"(int5)"sv, 1000 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_6, [](toml::table&& tbl) // spec-int-6 { const auto expected = toml::table{ { R"(int6)"sv, 5349221 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_7, [](toml::table&& tbl) // spec-int-7 { const auto expected = toml::table{ { R"(int7)"sv, 12345 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_bin1, [](toml::table&& tbl) // spec-int-bin1 { const auto expected = toml::table{ { R"(bin1)"sv, 214 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_hex1, [](toml::table&& tbl) // spec-int-hex1 { const auto expected = toml::table{ { R"(hex1)"sv, 3735928559 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_hex2, [](toml::table&& tbl) // spec-int-hex2 { const auto expected = toml::table{ { R"(hex2)"sv, 3735928559 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_hex3, [](toml::table&& tbl) // spec-int-hex3 { const auto expected = toml::table{ { R"(hex3)"sv, 3735928559 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_max, [](toml::table&& tbl) // spec-int-max { const auto expected = toml::table{ { R"(max)"sv, std::numeric_limits::max() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_min, [](toml::table&& tbl) // spec-int-min { const auto expected = toml::table{ { R"(min)"sv, std::numeric_limits::min() }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_oct1, [](toml::table&& tbl) // spec-int-oct1 { const auto expected = toml::table{ { R"(oct1)"sv, 342391 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_int_oct2, [](toml::table&& tbl) // spec-int-oct2 { const auto expected = toml::table{ { R"(oct2)"sv, 493 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_1, [](toml::table&& tbl) // spec-key-value-pair-1 { const auto expected = toml::table{ { R"(key)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_2, [](toml::table&& tbl) // spec-key-value-pair-2 { const auto expected = toml::table{ { R"(bare_key)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_3, [](toml::table&& tbl) // spec-key-value-pair-3 { const auto expected = toml::table{ { R"(bare-key)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_4, [](toml::table&& tbl) // spec-key-value-pair-4 { const auto expected = toml::table{ { R"(1234)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_5, [](toml::table&& tbl) // spec-key-value-pair-5 { const auto expected = toml::table{ { R"(1234)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_6, [](toml::table&& tbl) // spec-key-value-pair-6 { const auto expected = toml::table{ { R"(-)"sv, 1 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_7, [](toml::table&& tbl) // spec-key-value-pair-7 { const auto expected = toml::table{ { R"(_)"sv, 1 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_8, [](toml::table&& tbl) // spec-key-value-pair-8 { const auto expected = toml::table{ { R"(-_-_-_-_-)"sv, 1 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_key_value_pair_9, [](toml::table&& tbl) // spec-key-value-pair-9 { const auto expected = toml::table{ { R"(3)"sv, toml::table{ { R"(14159)"sv, R"(pi)"sv }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_newline_1, [](toml::table&& tbl) // spec-newline-1 { const auto expected = toml::table{ { R"(abc)"sv, 123 }, { R"(def)"sv, 456 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_newline_2, [](toml::table&& tbl) // spec-newline-2 { const auto expected = toml::table{ { R"(abc)"sv, 123 }, { R"(def)"sv, 456 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_newline_3, [](toml::table&& tbl) // spec-newline-3 { const auto expected = toml::table{ { R"(abc)"sv, 123 }, { R"(def)"sv, 456 }, { R"(ghi)"sv, 789 }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_quoted_literal_keys_1, [](toml::table&& tbl) // spec-quoted-literal-keys-1 { const auto expected = toml::table{ { R"(quoted "value")"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_readme_example, [](toml::table&& tbl) // spec-readme-example { const auto expected = toml::table{ { R"(title)"sv, R"(TOML Example)"sv }, { R"(owner)"sv, toml::table{ { R"(name)"sv, R"(Tom Preston-Werner)"sv }, { R"(dob)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { -8, 0 } } }, } }, { R"(database)"sv, toml::table{ { R"(server)"sv, R"(192.168.1.1)"sv }, { R"(ports)"sv, toml::array{ 8001, 8001, 8002, } }, { R"(connection_max)"sv, 5000 }, { R"(enabled)"sv, true }, } }, { R"(servers)"sv, toml::table{ { R"(alpha)"sv, toml::table{ { R"(ip)"sv, R"(10.0.0.1)"sv }, { R"(dc)"sv, R"(eqdc10)"sv }, } }, { R"(beta)"sv, toml::table{ { R"(ip)"sv, R"(10.0.0.2)"sv }, { R"(dc)"sv, R"(eqdc10)"sv }, } }, } }, { R"(clients)"sv, toml::table{ { R"(data)"sv, toml::array{ toml::array{ R"(gamma)"sv, R"(delta)"sv, }, toml::array{ 1, 2, }, } }, { R"(hosts)"sv, toml::array{ R"(alpha)"sv, R"(omega)"sv, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_1, [](toml::table&& tbl) // spec-string-basic-multiline-1 { const auto expected = toml::table{ { R"(str1)"sv, R"(Roses are red Violets are blue)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_2, [](toml::table&& tbl) // spec-string-basic-multiline-2 { const auto expected = toml::table{ { R"(str)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_3, [](toml::table&& tbl) // spec-string-basic-multiline-3 { const auto expected = toml::table{ { R"(str)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_4, [](toml::table&& tbl) // spec-string-basic-multiline-4 { const auto expected = toml::table{ { R"(a)"sv, R"(abcdef)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_5, [](toml::table&& tbl) // spec-string-basic-multiline-5 { const auto expected = toml::table{ { R"(ml-escaped-nl)"sv, R"( foo bar \ baz \quux)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_6, [](toml::table&& tbl) // spec-string-basic-multiline-6 { const auto expected = toml::table{ { R"(str4)"sv, R"(Here are two quotation marks: "". Simple enough.)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_7, [](toml::table&& tbl) // spec-string-basic-multiline-7 { const auto expected = toml::table{ { R"(str5)"sv, R"(Here are three quotation marks: """.)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_8, [](toml::table&& tbl) // spec-string-basic-multiline-8 { const auto expected = toml::table{ { R"(str6)"sv, R"(Here are fifteen quotation marks: """"""""""""""".)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_multiline_9, [](toml::table&& tbl) // spec-string-basic-multiline-9 { const auto expected = toml::table{ { R"(str7)"sv, R"("This," she said, "is just a pointless statement.")"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_tab_multiline, [](toml::table&& tbl) // spec-string-basic-tab-multiline { const auto expected = toml::table{ { R"(str)"sv, R"(This is a tab)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic_tab, [](toml::table&& tbl) // spec-string-basic-tab { const auto expected = toml::table{ { R"(str)"sv, R"(This is a tab)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_1, [](toml::table&& tbl) // spec-string-escape-1 { const auto expected = toml::table{ { R"(a)"sv, "\x08"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_2, [](toml::table&& tbl) // spec-string-escape-2 { const auto expected = toml::table{ { R"(a)"sv, R"( )"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_3, [](toml::table&& tbl) // spec-string-escape-3 { const auto expected = toml::table{ { R"(a)"sv, R"( )"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_4, [](toml::table&& tbl) // spec-string-escape-4 { const auto expected = toml::table{ { R"(a)"sv, "\f"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_5, [](toml::table&& tbl) // spec-string-escape-5 { const auto expected = toml::table{ { R"(a)"sv, "\r"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_6, [](toml::table&& tbl) // spec-string-escape-6 { const auto expected = toml::table{ { R"(a)"sv, R"(")"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_7, [](toml::table&& tbl) // spec-string-escape-7 { const auto expected = toml::table{ { R"(a)"sv, R"(\)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_8, [](toml::table&& tbl) // spec-string-escape-8 { const auto expected = toml::table{ { R"(a)"sv, "\x00"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_escape_9, [](toml::table&& tbl) // spec-string-escape-9 { const auto expected = toml::table{ { R"(a)"sv, "\x00"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_1, [](toml::table&& tbl) // spec-string-literal-1 { const auto expected = toml::table{ { R"(winpath)"sv, R"(C:\Users\nodejs\templates)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_2, [](toml::table&& tbl) // spec-string-literal-2 { const auto expected = toml::table{ { R"(winpath2)"sv, R"(\\ServerX\admin$\system32\)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_3, [](toml::table&& tbl) // spec-string-literal-3 { const auto expected = toml::table{ { R"(quoted)"sv, R"(Tom "Dubs" Preston-Werner)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_4, [](toml::table&& tbl) // spec-string-literal-4 { const auto expected = toml::table{ { R"(regex)"sv, R"(<\i\c*\s*>)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_multiline_1, [](toml::table&& tbl) // spec-string-literal-multiline-1 { const auto expected = toml::table{ { R"(regex2)"sv, R"(I [dw]on't need \d{2} apples)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_multiline_2, [](toml::table&& tbl) // spec-string-literal-multiline-2 { const auto expected = toml::table{ { R"(lines)"sv, R"(The first newline is trimmed in raw strings. All other whitespace is preserved. )"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_multiline_3, [](toml::table&& tbl) // spec-string-literal-multiline-3 { const auto expected = toml::table{ { R"(quot15)"sv, R"(Here are fifteen quotation marks: """"""""""""""")"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_literal_multiline_4, [](toml::table&& tbl) // spec-string-literal-multiline-4 { const auto expected = toml::table{ { R"(str)"sv, R"('That,' she said, 'is still pointless.')"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_1, [](toml::table&& tbl) // spec-table-1 { const auto expected = toml::table{ { R"(table-1)"sv, toml::table{ { R"(key1)"sv, R"(some string)"sv }, { R"(key2)"sv, 123 }, } }, { R"(table-2)"sv, toml::table{ { R"(key1)"sv, R"(another string)"sv }, { R"(key2)"sv, 456 }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_2, [](toml::table&& tbl) // spec-table-2 { const auto expected = toml::table{ { R"(dog)"sv, toml::table{ { R"(tater.man)"sv, toml::table{ { R"(type)"sv, toml::table{ { R"(name)"sv, R"(pug)"sv }, } }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_3, [](toml::table&& tbl) // spec-table-3 { const auto expected = toml::table{ { R"(a)"sv, toml::table{ { R"(b)"sv, toml::table{ { R"(c)"sv, toml::table{} }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_4, [](toml::table&& tbl) // spec-table-4 { const auto expected = toml::table{ { R"(d)"sv, toml::table{ { R"(e)"sv, toml::table{ { R"(f)"sv, toml::table{} }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_5, [](toml::table&& tbl) // spec-table-5 { const auto expected = toml::table{ { R"(g)"sv, toml::table{ { R"(h)"sv, toml::table{ { R"(i)"sv, toml::table{} }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_7, [](toml::table&& tbl) // spec-table-7 { const auto expected = toml::table{ { R"(x)"sv, toml::table{ { R"(y)"sv, toml::table{ { R"(z)"sv, toml::table{ { R"(w)"sv, toml::table{} }, } }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_8, [](toml::table&& tbl) // spec-table-8 { const auto expected = toml::table{ { R"(fruit)"sv, toml::table{ { R"(apple)"sv, toml::table{ { R"(color)"sv, R"(red)"sv }, { R"(taste)"sv, toml::table{ { R"(sweet)"sv, true }, } }, { R"(texture)"sv, toml::table{ { R"(smooth)"sv, true }, } }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_inline_1, [](toml::table&& tbl) // spec-table-inline-1 { const auto expected = toml::table{ { R"(name)"sv, toml::table{ { R"(first)"sv, R"(Tom)"sv }, { R"(last)"sv, R"(Preston-Werner)"sv }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_inline_2, [](toml::table&& tbl) // spec-table-inline-2 { const auto expected = toml::table{ { R"(point)"sv, toml::table{ { R"(x)"sv, 1 }, { R"(y)"sv, 2 }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_inline_3, [](toml::table&& tbl) // spec-table-inline-3 { const auto expected = toml::table{ { R"(animal)"sv, toml::table{ { R"(type)"sv, toml::table{ { R"(name)"sv, R"(pug)"sv }, } }, } }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table, [](toml::table&& tbl) // spec-table { const auto expected = toml::table{ { R"(table)"sv, toml::table{} }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_time_1, [](toml::table&& tbl) // spec-time-1 { const auto expected = toml::table{ { R"(lt1)"sv, toml::time{ 7, 32 } }, }; REQUIRE(tbl == expected); }); #if UNICODE_LITERALS_OK parsing_should_succeed(FILE_LINE_ARGS, spec_quoted_basic_keys_1, [](toml::table&& tbl) // spec-quoted-basic-keys-1 { const auto expected = toml::table{ { R"(ʎǝʞ)"sv, R"(value)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_string_basic, [](toml::table&& tbl) // spec-string-basic { const auto expected = toml::table{ { R"(str)"sv, R"(I'm a string. "You can quote me". Name José Location SF.)"sv }, }; REQUIRE(tbl == expected); }); parsing_should_succeed(FILE_LINE_ARGS, spec_table_6, [](toml::table&& tbl) // spec-table-6 { const auto expected = toml::table{ { R"(j)"sv, toml::table{ { R"(ʞ)"sv, toml::table{ { R"(l)"sv, toml::table{} }, } }, } }, }; REQUIRE(tbl == expected); }); #endif // UNICODE_LITERALS_OK }