diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:44:05 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:44:05 +0300 |
| commit | 0b24459ac12b6cf9fd5a401d647796ca254a8fa8 (patch) | |
| tree | f2fd66e2476976a51e2a51330fd95dc6e87b24c1 /tomlplusplus/tests/conformance_iarna_valid.cpp | |
| parent | b85e90fc3480da0e6a48da73201a0b22488cc650 (diff) | |
| parent | 1c8b7466e4946fcc3bf20484c0e1d001202cca5a (diff) | |
| download | Project-Tick-0b24459ac12b6cf9fd5a401d647796ca254a8fa8.tar.gz Project-Tick-0b24459ac12b6cf9fd5a401d647796ca254a8fa8.zip | |
Add 'tomlplusplus/' from commit '1c8b7466e4946fcc3bf20484c0e1d001202cca5a'
git-subtree-dir: tomlplusplus
git-subtree-mainline: b85e90fc3480da0e6a48da73201a0b22488cc650
git-subtree-split: 1c8b7466e4946fcc3bf20484c0e1d001202cca5a
Diffstat (limited to 'tomlplusplus/tests/conformance_iarna_valid.cpp')
| -rw-r--r-- | tomlplusplus/tests/conformance_iarna_valid.cpp | 2210 |
1 files changed, 2210 insertions, 0 deletions
diff --git a/tomlplusplus/tests/conformance_iarna_valid.cpp b/tomlplusplus/tests/conformance_iarna_valid.cpp new file mode 100644 index 0000000000..88489064ba --- /dev/null +++ b/tomlplusplus/tests/conformance_iarna_valid.cpp @@ -0,0 +1,2210 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard <mark.gillard@outlook.com.au> +// 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.hpp" + +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 <foo@example.com>\",\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") +{ + SECTION("spec-array-1") + { + 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); + }); + } + + SECTION("spec-array-2") + { + 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); + }); + } + + SECTION("spec-array-3") + { + 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); + }); + } + + SECTION("spec-array-4") + { + 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); + }); + } + + SECTION("spec-array-5") + { + 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); + }); + } + + SECTION("spec-array-7") + { + 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); + }); + } + + SECTION("spec-array-8") + { + 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); + }); + } + + SECTION("spec-array-mixed-number-types") + { + 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); + }); + } + + SECTION("spec-array-more-mixed-types") + { + 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 <foo@example.com>)"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); + }); + } + + SECTION("spec-array-of-tables-1") + { + 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); + }); + } + + SECTION("spec-array-of-tables-2") + { + 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); + }); + } + + SECTION("spec-array-of-tables-3") + { + 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); + }); + } + + SECTION("spec-boolean-1") + { + 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); + }); + } + + SECTION("spec-boolean-2") + { + 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); + }); + } + + SECTION("spec-case-sensitive") + { + 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); + }); + } + + SECTION("spec-comment-mid-array") + { + 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); + }); + } + + SECTION("spec-comment-mid-string") + { + 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); + }); + } + + SECTION("spec-comment-tab") + { + 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); + }); + } + + SECTION("spec-comment") + { + 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); + }); + } + + SECTION("spec-date-local-1") + { + 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); + }); + } + + SECTION("spec-date-time-1") + { + 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); + }); + } + + SECTION("spec-date-time-2") + { + 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); + }); + } + + SECTION("spec-date-time-3") + { + 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); + }); + } + + SECTION("spec-date-time-4") + { + 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); + }); + } + + SECTION("spec-date-time-5") + { + 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); + }); + } + + SECTION("spec-date-time-local-1") + { + 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); + }); + } + + SECTION("spec-dotted-keys-1") + { + 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); + }); + } + + SECTION("spec-dotted-keys-2") + { + 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); + }); + } + + SECTION("spec-dotted-keys-3") + { + 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); + }); + } + + SECTION("spec-empty-key-name-1") + { + 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); + }); + } + + SECTION("spec-empty-key-name-2") + { + 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); + }); + } + + SECTION("spec-extend-dotted-object-1") + { + 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); + }); + } + + SECTION("spec-extend-dotted-object-2") + { + 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); + }); + } + + SECTION("spec-extend-dotted-object-3") + { + 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); + }); + } + + SECTION("spec-float-1") + { + 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); + }); + } + + SECTION("spec-float-10") + { + 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<double>::infinity() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-11") + { + 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<double>::infinity() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-12") + { + 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<double>::infinity() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-13") + { + 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<double>::quiet_NaN() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-14") + { + 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<double>::quiet_NaN() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-15") + { + 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<double>::quiet_NaN() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-float-2") + { + 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); + }); + } + + SECTION("spec-float-3") + { + 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); + }); + } + + SECTION("spec-float-4") + { + 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); + }); + } + + SECTION("spec-float-5") + { + 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); + }); + } + + SECTION("spec-float-6") + { + 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); + }); + } + + SECTION("spec-float-7") + { + 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); + }); + } + + SECTION("spec-float-8") + { + 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); + }); + } + + SECTION("spec-float-9") + { + 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); + }); + } + + SECTION("spec-int-1") + { + 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); + }); + } + + SECTION("spec-int-2") + { + 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); + }); + } + + SECTION("spec-int-3") + { + 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); + }); + } + + SECTION("spec-int-3a") + { + 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); + }); + } + + SECTION("spec-int-3b") + { + 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); + }); + } + + SECTION("spec-int-4") + { + 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); + }); + } + + SECTION("spec-int-5") + { + 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); + }); + } + + SECTION("spec-int-6") + { + 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); + }); + } + + SECTION("spec-int-7") + { + 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); + }); + } + + SECTION("spec-int-bin1") + { + 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); + }); + } + + SECTION("spec-int-hex1") + { + 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); + }); + } + + SECTION("spec-int-hex2") + { + 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); + }); + } + + SECTION("spec-int-hex3") + { + 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); + }); + } + + SECTION("spec-int-max") + { + 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<int64_t>::max() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-int-min") + { + 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<int64_t>::min() }, + }; + REQUIRE(tbl == expected); + }); + } + + SECTION("spec-int-oct1") + { + 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); + }); + } + + SECTION("spec-int-oct2") + { + 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); + }); + } + + SECTION("spec-key-value-pair-1") + { + 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); + }); + } + + SECTION("spec-key-value-pair-2") + { + 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); + }); + } + + SECTION("spec-key-value-pair-3") + { + 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); + }); + } + + SECTION("spec-key-value-pair-4") + { + 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); + }); + } + + SECTION("spec-key-value-pair-5") + { + 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); + }); + } + + SECTION("spec-key-value-pair-6") + { + 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); + }); + } + + SECTION("spec-key-value-pair-7") + { + 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); + }); + } + + SECTION("spec-key-value-pair-8") + { + 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); + }); + } + + SECTION("spec-key-value-pair-9") + { + 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); + }); + } + + SECTION("spec-newline-1") + { + 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); + }); + } + + SECTION("spec-newline-2") + { + 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); + }); + } + + SECTION("spec-newline-3") + { + 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); + }); + } + + SECTION("spec-quoted-literal-keys-1") + { + 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); + }); + } + + SECTION("spec-readme-example") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-1") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-2") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-3") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-4") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-5") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-6") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-7") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-8") + { + 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); + }); + } + + SECTION("spec-string-basic-multiline-9") + { + 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); + }); + } + + SECTION("spec-string-basic-tab-multiline") + { + 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); + }); + } + + SECTION("spec-string-basic-tab") + { + 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); + }); + } + + SECTION("spec-string-escape-1") + { + 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); + }); + } + + SECTION("spec-string-escape-2") + { + 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); + }); + } + + SECTION("spec-string-escape-3") + { + 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); + }); + } + + SECTION("spec-string-escape-4") + { + 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); + }); + } + + SECTION("spec-string-escape-5") + { + 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); + }); + } + + SECTION("spec-string-escape-6") + { + 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); + }); + } + + SECTION("spec-string-escape-7") + { + 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); + }); + } + + SECTION("spec-string-escape-8") + { + 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); + }); + } + + SECTION("spec-string-escape-9") + { + 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); + }); + } + + SECTION("spec-string-literal-1") + { + 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); + }); + } + + SECTION("spec-string-literal-2") + { + 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); + }); + } + + SECTION("spec-string-literal-3") + { + 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); + }); + } + + SECTION("spec-string-literal-4") + { + 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); + }); + } + + SECTION("spec-string-literal-multiline-1") + { + 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); + }); + } + + SECTION("spec-string-literal-multiline-2") + { + 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); + }); + } + + SECTION("spec-string-literal-multiline-3") + { + 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); + }); + } + + SECTION("spec-string-literal-multiline-4") + { + 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); + }); + } + + SECTION("spec-table-1") + { + 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); + }); + } + + SECTION("spec-table-2") + { + 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); + }); + } + + SECTION("spec-table-3") + { + 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); + }); + } + + SECTION("spec-table-4") + { + 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); + }); + } + + SECTION("spec-table-5") + { + 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); + }); + } + + SECTION("spec-table-7") + { + 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); + }); + } + + SECTION("spec-table-8") + { + 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); + }); + } + + SECTION("spec-table-inline-1") + { + 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); + }); + } + + SECTION("spec-table-inline-2") + { + 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); + }); + } + + SECTION("spec-table-inline-3") + { + 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); + }); + } + + SECTION("spec-table") + { + 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); + }); + } + + SECTION("spec-time-1") + { + 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 + + SECTION("spec-quoted-basic-keys-1") + { + 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); + }); + } + + SECTION("spec-string-basic") + { + 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); + }); + } + + SECTION("spec-table-6") + { + 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 +} |
