{"id":13496496,"url":"https://github.com/pwwang/toml-bench","last_synced_at":"2025-08-03T19:17:28.533Z","repository":{"id":59855213,"uuid":"489517912","full_name":"pwwang/toml-bench","owner":"pwwang","description":"Which toml package to use in python?","archived":false,"fork":false,"pushed_at":"2024-06-25T19:40:36.000Z","size":134,"stargazers_count":51,"open_issues_count":2,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-08T01:42:29.763Z","etag":null,"topics":["benchmarking","toml","toml-parser","toml-parsing","toml-validation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pwwang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-06T23:22:48.000Z","updated_at":"2024-12-10T02:40:01.000Z","dependencies_parsed_at":"2024-01-16T09:54:17.830Z","dependency_job_id":"42a8dd0a-40ad-48e8-ae29-ab4f5f089da2","html_url":"https://github.com/pwwang/toml-bench","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/pwwang/toml-bench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pwwang%2Ftoml-bench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pwwang%2Ftoml-bench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pwwang%2Ftoml-bench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pwwang%2Ftoml-bench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pwwang","download_url":"https://codeload.github.com/pwwang/toml-bench/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pwwang%2Ftoml-bench/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259884418,"owners_count":22926441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmarking","toml","toml-parser","toml-parsing","toml-validation"],"created_at":"2024-07-31T19:01:49.077Z","updated_at":"2025-06-14T21:04:12.754Z","avatar_url":"https://github.com/pwwang.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# toml-bench\n\n[![deps][1]][2]\n\nWhich toml package to use in python?\n\nSee also: [toml-lang](https://toml.io/en/) and [PEP 680](https://www.python.org/dev/peps/pep-0680/)\n\n## Report\n\n### Version\n\nThe verions of the packages tested in this report.\n\n| |Version|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|0.10.2|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|2.0.1; **tomli_w**: 1.0.0|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|0.12.5|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|0.11.0|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|0.3.1|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|(Python 3.12.2)|\n\n### Dumping `None` value\n\nHow the package dumps `None` value in python\n\nLiterally `\u003cpackage\u003e.dumps(None)`\n\n\n| |Dumped value or error|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|'NoneType' object is not iterable|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|'NoneType' object has no attribute 'items'|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Expecting Mapping or TOML Container, \u003cclass 'NoneType'\u003e given|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|\"null\"\u003cbr /\u003e---\u003cbr /\u003ertoml v0.11+ supports dumping None to a desired string:\u003cbr /\u003e`rtoml.dumps(data, none_value='@None')`:\u003cbr /\u003e\"@None\"|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|'NoneType' object has no attribute 'items'|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|module 'tomllib' has no attribute 'dumps'|\n\n### Dumping key-`None` pair\n\nHow the package dumps key-value pair with value `None`\n\nLiterally `\u003cpackage\u003e.dumps({\"key\": None})`\n\n\n| |Dumped value or error|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e||\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|Object of type \u003cclass 'NoneType'\u003e is not TOML serializable|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Invalid type \u003cclass 'NoneType'\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|key = \"null\"\u003cbr /\u003e\u003cbr /\u003e---\u003cbr /\u003ertoml v0.11+ supports dumping None to a desired string:\u003cbr /\u003e`rtoml.dumps(data, none_value='@None')`:\u003cbr /\u003ekey = \"@None\"\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|TOML cannot encode None|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|module 'tomllib' has no attribute 'dumps'|\n\n### Dumping list with `None` value\n\nHow the package dumps a list with `None` value in it.\n\nLiterally `\u003cpackage\u003e.dumps({\"key\": [1, 2, 3, None, 5]})`\n\n\n| |Dumped value or error|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|key = [ 1, 2, 3, \"None\", 5,]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|Object of type \u003cclass 'NoneType'\u003e is not TOML serializable|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Invalid type \u003cclass 'NoneType'\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|key = [1, 2, 3, \"null\", 5]\u003cbr /\u003e\u003cbr /\u003e---\u003cbr /\u003ertoml v0.11+ supports dumping None to a desired string:\u003cbr /\u003e`rtoml.dumps(data, none_value='@None')`:\u003cbr /\u003ekey = [1, 2, 3, \"@None\", 5]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|bad type '\u003cclass 'NoneType'\u003e' for dump_value|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|module 'tomllib' has no attribute 'dumps'|\n\n### Loading `None`-like values\n\nHow the package loads `None`-like value in string\n\nLiterally `\u003cpackage\u003e.loads('v1 = \"null\" v2 = \"None\"')`\n\n\n| |Loaded as|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|{'v1': 'null', 'v2': 'None'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|module 'tomli_w' has no attribute 'loads'|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|{'v1': 'null', 'v2': 'None'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|{'v1': 'null', 'v2': 'None'}\u003cbr /\u003e---\u003cbr /\u003ertoml v0.11+ supports loading custom None values:\u003cbr /\u003e`rtoml.loads(data, none_value='None')`:\u003cbr /\u003e{'v1': 'null', 'v2': None}\u003cbr /\u003e`rtoml.loads(data, none_value='null')`:\u003cbr /\u003e{'v1': None, 'v2': 'None'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|{'v1': 'null', 'v2': 'None'}|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|{'v1': 'null', 'v2': 'None'}|\n\n### Dumping a heterogenous array\n\nHow the package dumps a python dictionary with a heterogenous array.\n\nLiterally `\u003cpackage\u003e.dumps({\"v\": [1, 1.2, True, \"string\"]})`\n\n\n| |Dumped value or error|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\u0026nbsp;1,\u0026nbsp;1.2,\u0026nbsp;true,\u0026nbsp;\"string\",\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;1,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;1.2,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;true,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\"string\",\u003cbr /\u003e\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[1,\u0026nbsp;1.2,\u0026nbsp;true,\u0026nbsp;\"string\"\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[1,\u0026nbsp;1.2,\u0026nbsp;true,\u0026nbsp;\"string\"\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[1,\u0026nbsp;1.2,\u0026nbsp;true,\u0026nbsp;'string'\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|Dumping not supported|\n\n### Loading a heterogenous array\n\nHow the package loads a toml string with a heterogenous array.\n\nLiterally `\u003cpackage\u003e.loads('v = [1, 1.2, True, \"string\"]')`\n\n\n| |Loaded as|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Not a homogeneous array (line 2 column 1 char 1)|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|`{'v': [1, 1.2, True, 'string']}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|`{'v': [1, 1.2, True, 'string']}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|`{'v': [1, 1.2, True, 'string']}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|`{'v': [1, 1.2, True, 'string']}`|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|`{'v': [1, 1.2, True, 'string']}`|\n\n### Dumping a nested array\n\nHow the package dumps a python dictionary with a nested array.\n\nLiterally `\u003cpackage\u003e.dumps({\"v\": [[1], [1, 2]]})`\n\n\n| |Dumped value or error|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\u0026nbsp;\\[\u0026nbsp;1,\\],\u0026nbsp;\\[\u0026nbsp;1,\u0026nbsp;2,\\],\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\\[\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;1,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\\],\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\\[\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;1,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;2,\u003cbr /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\\],\u003cbr /\u003e\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\\[1\\],\u0026nbsp;\\[1,\u0026nbsp;2\\]\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\\[1\\],\u0026nbsp;\\[1,\u0026nbsp;2\\]\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|v\u0026nbsp;=\u0026nbsp;\\[\\[1\\],\u0026nbsp;\\[1,\u0026nbsp;2\\]\\]\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|Dumping not supported|\n\n### Loading a nested array\n\nHow the package loads a toml string with a nested array.\n\nLiterally `\u003cpackage\u003e.loads('v = [[1], [1, 2]]')`\n\n\n| |Loaded as|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|`{'v': [[1], [1, 2]]}`|\n\n### Dumping keeps order of keys?\n\nWhether the package preserves the order of the keys while dumps\na python dictionary.\n\nThus, whether `\u003cpackage\u003e.dumps({\"c\": 1, \"a\": 2, \"b\": 3})` yields a string\nlike `c = 1\\na = 2\\nb = 3\\n`.\n\n\n| |Order kept?|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|Dumping not supported|\n\n### Loading keeps order of keys?\n\nWhether the package preserves the order of the keys\nwhile loads a TOML string.\n\nThus, whether `\u003cpackage\u003e.loads('c = 1\\na = 2\\nb = 3\\n')` yields\na dictionary with keys in the order of `['c', 'a', 'b']`.\n\n\n| |Order kept?|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|Kept|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|Kept|\n\n### Dumping unicode\n\nHow the package dumps Unicode in python\n\nLiterally, `\u003cpackage\u003e.dumps({\"你好\": \"世界\"})`\n\n\n| |Dumped value|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|\"你好\" = \"世界\"\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|\"你好\" = \"世界\"\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|\"你好\" = \"世界\"\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|\"你好\" = \"世界\"\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|'你好' = '世界'\u003cbr /\u003e|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|Dumping not supported|\n\n### Loaded unicode\n\nHow the package loads a file with unicode.\n\nThe file was created by:\n\n```python\n## Create a file with unicode content\nwith open(self.datafile, \"w\", encoding=\"utf-8\") as f:\n    f.write('\"你好\" = \"世界\"\\n')\n\n## Use `\u003cpackage\u003e.load()` to load the file\nwith open(self.datafile, \"r\", encoding=\"utf-8\") as f:\n    loaded = \u003cpackage\u003e.load(f)\n```\n\n\n| |Loaded as|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|{'你好': '世界'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`\u003cbr /\u003eWhen loaded with `rb`:\u003cbr /\u003e{'你好': '世界'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|{'你好': '世界'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|{'你好': '世界'}|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|{'你好': '世界'}|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`\u003cbr /\u003eWhen loaded with `rb`:\u003cbr /\u003e{'你好': '世界'}|\n\n### Compliance with valid tests in toml-test\n\nTest the compliance with the standard test suites for valid toml files\nhere:\n\n\u003e https://github.com/BurntSushi/toml-test/\n\nThe tests come up with a JSON counterpart that can be used to valid whether\nloading the toml file yields the same result as the JSON counterpart.\n\n\n| |Result (toml-test v1.5.0)|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|[spec/array-0.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/array-0.toml) Not a homogeneous array (line 8 column 1 char 261)\u003cbr /\u003e[spec/keys-4.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/keys-4.toml) Found invalid character in key name: 'c'. Try quoting the key name. (line 2 column 8 char 57)\u003cbr /\u003e[spec/local-time-0.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/local-time-0.toml) Parsed as unexpected data.\u003cbr /\u003e[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) invalid literal for int() with base 0: '13:37' (line 2 column 1 char 46)\u003cbr /\u003e[datetime/local-time.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/local-time.toml) Parsed as unexpected data.\u003cbr /\u003e[datetime/datetime.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/datetime.toml) Parsed as unexpected data.\u003cbr /\u003e[comment/tricky.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/comment/tricky.toml) Parsed as unexpected data.\u003cbr /\u003e[key/dotted-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/dotted-1.toml) Parsed as unexpected data.\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) Found invalid character in key name: '‍'. Try quoting the key name. (line 5 column 2 char 67)\u003cbr /\u003e[key/dotted-2.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/dotted-2.toml) Found invalid character in key name: '\"'. Try quoting the key name. (line 7 column 11 char 166)\u003cbr /\u003e[key/quoted-unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/quoted-unicode.toml) Duplicate keys! (line 3 column 1 char 19)\u003cbr /\u003e[key/dotted-empty.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/dotted-empty.toml) Duplicate keys! (line 2 column 1 char 17)\u003cbr /\u003e[key/escapes.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/escapes.toml) Parsed as unexpected data.\u003cbr /\u003e[table/empty-name.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/table/empty-name.toml) Can't have a keygroup with an empty name (line 1 column 1 char 0)\u003cbr /\u003e[string/raw-multiline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/raw-multiline.toml) Unbalanced quotes (line 20 column 50 char 532)\u003cbr /\u003e[string/ends-in-whitespace-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/ends-in-whitespace-escape.toml) Reserved escape sequence used (line 6 column 1 char 28)\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) Reserved escape sequence used (line 3 column 1 char 35)\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) Reserved escape sequence used (line 1 column 1 char 0)\u003cbr /\u003e[string/multiline-quotes.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/multiline-quotes.toml) Unterminated string found. Reached end of file. (line 27 column 1 char 664)\u003cbr /\u003e[float/zero.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/float/zero.toml) Weirdness with leading zeroes or underscores in your number. (line 4 column 1 char 47)\u003cbr /\u003e[array/mixed-int-string.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/mixed-int-string.toml) Not a homogeneous array (line 1 column 1 char 0)\u003cbr /\u003e[array/nested-double.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/nested-double.toml) Not a homogeneous array (line 1 column 1 char 0)\u003cbr /\u003e[array/string-with-comma-2.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/string-with-comma-2.toml) string index out of range\u003cbr /\u003e[array/mixed-int-float.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/mixed-int-float.toml) Not a homogeneous array (line 1 column 1 char 0)\u003cbr /\u003e[array/mixed-string-table.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/mixed-string-table.toml) list index out of range\u003cbr /\u003e[array/mixed-int-array.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/array/mixed-int-array.toml) Not a homogeneous array (line 1 column 1 char 0)\u003cbr /\u003e[inline-table/multiline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/multiline.toml) Invalid inline table value encountered (line 1 column 1 char 0)\u003cbr /\u003e[inline-table/key-dotted-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/key-dotted-1.toml) Parsed as unexpected data.\u003cbr /\u003e[inline-table/key-dotted-5.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/key-dotted-5.toml) Not a homogeneous array (line 2 column 1 char 20)\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) Key name found without value. Reached end of line. (line 5 column 2 char 98)\u003cbr /\u003e*157/187 (83.96%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) Expected newline or end of document after a statement (at line 2, column 23)\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) Invalid statement (at line 3, column 1)\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) Unescaped '\\' in a string (at line 3, column 22)\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) Unescaped '\\' in a string (at line 1, column 10)\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) Invalid initial character for a key part (at line 3, column 21)\u003cbr /\u003e*182/187 (97.33%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) Invalid number at line 2 col 25\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) Empty key at line 3 col 0\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) Invalid character 'x' in string at line 3 col 20\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) Invalid character 'e' in string at line 1 col 8\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) Empty key at line 3 col 20\u003cbr /\u003e*182/187 (97.33%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|[spec/table-9.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/table-9.toml) duplicate key: `apple` for key `fruit` at line 8 column 1\u003cbr /\u003e[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) expected a colon, found a newline at line 2 column 26\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) unexpected character found: `\\u{20ac}` at line 3 column 1\u003cbr /\u003e[table/array-within-dotted.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/table/array-within-dotted.toml) duplicate key: `apple` for key `fruit` at line 4 column 1\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) invalid escape character in string: `x` at line 3 column 21\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) invalid escape character in string: `e` at line 1 column 9\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) expected a table key, found a newline at line 3 column 21\u003cbr /\u003e*180/187 (96.26%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|[spec/string-4.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/string-4.toml) Didn't find expected newline (line 7, column 62)\u003cbr /\u003e[spec/string-7.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/spec/string-7.toml) Didn't find expected newline (line 7, column 50)\u003cbr /\u003e[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) can't parse type (line 2, column 20)\u003cbr /\u003e[datetime/milliseconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/milliseconds.toml) Didn't find expected newline (line 2, column 27)\u003cbr /\u003e[datetime/datetime.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/datetime.toml) Didn't find expected newline (line 4, column 18)\u003cbr /\u003e[comment/after-literal-no-ws.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/comment/after-literal-no-ws.toml) can't parse type (line 1, column 4)\u003cbr /\u003e[comment/tricky.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/comment/tricky.toml) can't parse type (line 11, column 7)\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) '€' cannot begin key (line 3, column 0)\u003cbr /\u003e[string/raw-multiline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/raw-multiline.toml) Didn't find expected newline (line 22, column 3)\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) \\x not a valid escape (line 3, column 43)\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) \\e not a valid escape (line 1, column 33)\u003cbr /\u003e[string/multiline-quotes.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/multiline-quotes.toml) Didn't find expected newline (line 4, column 26)\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) ' ' cannot begin key (line 3, column 20)\u003cbr /\u003e*174/187 (93.05%) passed*|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|[datetime/no-seconds.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/datetime/no-seconds.toml) Expected newline or end of document after a statement (at line 2, column 23)\u003cbr /\u003e[key/unicode.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/key/unicode.toml) Invalid statement (at line 3, column 1)\u003cbr /\u003e[string/hex-escape.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/hex-escape.toml) Unescaped '\\' in a string (at line 3, column 22)\u003cbr /\u003e[string/escape-esc.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/string/escape-esc.toml) Unescaped '\\' in a string (at line 1, column 10)\u003cbr /\u003e[inline-table/newline.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//valid/inline-table/newline.toml) Invalid initial character for a key part (at line 3, column 21)\u003cbr /\u003e*182/187 (97.33%) passed*|\n\n### Compliance with invalid tests in toml-test\n\nTest the compliance with the standard test suites for invalid toml files\nhere:\n\n\u003e https://github.com/BurntSushi/toml-test/\n\n- `Not OK`: The toml file is parsed without error, but expected to fail.\n- `OK`: All files are failed to parse, as expected. Showing the last\nparsing error.\n\n\n| |Result (toml-test v1.5.0)|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Not OK: [integer/double-sign-plus.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/double-sign-plus.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/us-after-bin.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/us-after-bin.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/double-sign-nex.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/double-sign-nex.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/us-after-hex.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/us-after-hex.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/us-after-oct.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/us-after-oct.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [spec/inline-table-2-0.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/spec/inline-table-2-0.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [datetime/offset-overflow-minute.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/datetime/offset-overflow-minute.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [datetime/offset-overflow-hour.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/datetime/offset-overflow-hour.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-del.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-del.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/string-del.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/string-del.toml) incorrectly parsed.\u003cbr /\u003eNot OK: *63 more items incorrectly parsed.*\u003cbr /\u003e*298/371 (80.32%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|OK: [inline-table/linebreak-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/inline-table/linebreak-1.toml) Unclosed inline table (at line 3, column 18)\u003cbr /\u003e *371/371 (100%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Not OK: [control/comment-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/multi-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/multi-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/rawmulti-cd.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/rawmulti-cd.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/bare-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/bare-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/append-with-dotted-keys-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/table/append-with-dotted-keys-1.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/overwrite-array-in-parent.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/table/overwrite-array-in-parent.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/append-to-array-with-dotted-keys.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/table/append-to-array-with-dotted-keys.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/append-with-dotted-keys-2.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/table/append-with-dotted-keys-2.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [array/extend-defined-aot.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/array/extend-defined-aot.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/overwrite-09.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/inline-table/overwrite-09.toml) incorrectly parsed.\u003cbr /\u003e*361/371 (97.30%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|Not OK: [integer/positive-hex.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/positive-hex.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/positive-bin.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/positive-bin.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [integer/positive-oct.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/integer/positive-oct.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [datetime/offset-overflow-minute.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/datetime/offset-overflow-minute.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [datetime/offset-overflow-hour.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/datetime/offset-overflow-hour.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-del.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-del.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/multi-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/multi-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/rawmulti-cd.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/rawmulti-cd.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/bare-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/bare-cr.toml) incorrectly parsed.\u003cbr /\u003e*361/371 (97.30%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|Not OK: [spec/inline-table-2-0.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/spec/inline-table-2-0.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [spec/table-9-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/spec/table-9-1.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [spec/table-9-0.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/spec/table-9-0.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [datetime/offset-overflow-minute.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/datetime/offset-overflow-minute.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-del.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-del.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-lf.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-lf.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-null.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-null.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-ff.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-ff.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/comment-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/comment-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [control/multi-cr.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/control/multi-cr.toml) incorrectly parsed.\u003cbr /\u003eNot OK: *14 more items incorrectly parsed.*\u003cbr /\u003e*347/371 (93.53%) passed*|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|OK: [inline-table/linebreak-1.toml](https://github.com/BurntSushi/toml-test/blob/v1.5.0/tests//invalid/inline-table/linebreak-1.toml) Unclosed inline table (at line 3, column 18)\u003cbr /\u003e *371/371 (100%) passed*|\n\n### Compliance with valid tests in python tomllib test data\n\nTest the compliance with python tomllib test data (since python 3.11)\nfor valid toml files here:\n\n\u003e https://github.com/python/cpython/tree/3.11/Lib/test/test_tomllib/data/valid\n\nThe tests come up with a JSON counterpart that can be used to valid whether\nloading the toml file yields the same result as the JSON counterpart.\n\n\n| |Result (cpython tag 3.12.4)|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|[apostrophes-in-literal-string.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/apostrophes-in-literal-string.toml) Unbalanced quotes (line 1 column 50 char 49)\u003cbr /\u003e[five-quotes.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/five-quotes.toml) Unterminated string found. Reached end of file. (line 7 column 1 char 97)\u003cbr /\u003e[dates-and-times/datetimes.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/dates-and-times/datetimes.toml) Parsed as unexpected data.\u003cbr /\u003e[multiline-basic-str/ends-in-whitespace-escape.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/multiline-basic-str/ends-in-whitespace-escape.toml) Reserved escape sequence used (line 6 column 1 char 28)\u003cbr /\u003e*8/12 (66.67%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|OK, *12/12 (100%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|OK, *12/12 (100%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|OK, *12/12 (100%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|[apostrophes-in-literal-string.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/apostrophes-in-literal-string.toml) Didn't find expected newline (line 3, column 3)\u003cbr /\u003e[five-quotes.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/five-quotes.toml) Didn't find expected newline (line 3, column 3)\u003cbr /\u003e[dates-and-times/datetimes.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//valid/dates-and-times/datetimes.toml) Didn't find expected newline (line 1, column 19)\u003cbr /\u003e*9/12 (75.00%) passed*|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|OK, *12/12 (100%) passed*|\n\n### Compliance with invalid tests in python tomllib test data\n\nTest the compliance with python tomllib test data (since python 3.11)\nfor invalid toml files here:\n\n\u003e https://github.com/python/cpython/tree/main/Lib/test/test_tomllib/data/invalid\n\n- `Not OK`: The toml file is parsed without error, but expected to fail.\n- `OK`: All files are failed to parse, as expected. Showing the last\nparsing error.\n\n\n| |Result (cpython tag 3.12.4)|\n|-|-----------------------|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Not OK: [invalid-comment-char.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/invalid-comment-char.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [multiline-basic-str/carriage-return.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/multiline-basic-str/carriage-return.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table-with-subtable.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table-with-subtable.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [array/unclosed-empty.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/array/unclosed-empty.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [array/file-end-after-val.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/array/file-end-after-val.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [array/unclosed-after-item.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/array/unclosed-after-item.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/overwrite-value-in-inner-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/overwrite-value-in-inner-table.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/unclosed-empty.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/unclosed-empty.toml) incorrectly parsed.\u003cbr /\u003e*41/50 (82.00%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|OK: [inline-table/overwrite-implicitly.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/overwrite-implicitly.toml) Cannot overwrite a value (at line 1, column 21)\u003cbr /\u003e *50/50 (100%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|Not OK: [array-of-tables/overwrite-array-in-parent.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/array-of-tables/overwrite-array-in-parent.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [multiline-basic-str/carriage-return.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/multiline-basic-str/carriage-return.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-aot.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-aot.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table-with-subtable.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table-with-subtable.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/override-val-in-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/override-val-in-table.toml) incorrectly parsed.\u003cbr /\u003e*44/50 (88.00%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|Not OK: [multiline-basic-str/carriage-return.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/multiline-basic-str/carriage-return.toml) incorrectly parsed.\u003cbr /\u003e*49/50 (98.00%) passed*|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|Not OK: [non-scalar-escaped.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/non-scalar-escaped.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [invalid-comment-char.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/invalid-comment-char.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/redefine-2.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/table/redefine-2.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [table/redefine-1.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/table/redefine-1.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [multiline-basic-str/carriage-return.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/multiline-basic-str/carriage-return.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [dotted-keys/extend-defined-table-with-subtable.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/dotted-keys/extend-defined-table-with-subtable.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/overwrite-value-in-inner-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/overwrite-value-in-inner-table.toml) incorrectly parsed.\u003cbr /\u003eNot OK: [inline-table/override-val-with-table.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/override-val-with-table.toml) incorrectly parsed.\u003cbr /\u003e*41/50 (82.00%) passed*|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|OK: [inline-table/overwrite-implicitly.toml](https://github.com/python/cpython/tree/v3.12.4/Lib/test/test_tomllib/data//invalid/inline-table/overwrite-implicitly.toml) Cannot overwrite a value (at line 1, column 21)\u003cbr /\u003e *50/50 (100%) passed*|\n\n### Running speed with data provided by `rtoml`\n\nTest the speed of loading and dumping the loaded using data\nprovided by `rtoml`\n\n\u003e https://github.com/samuelcolvin/rtoml/raw/main/tests/data.toml\n\n\n| |Loading speed|Dumping speed|\n|-|-|-|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Excluded (heterogeneous arrays not supported)|Excluded (heterogeneous arrays not supported)|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|2.14s (5000 iterations)|0.73s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|39.78s (5000 iterations)|0.98s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|0.37s (5000 iterations)|0.08s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|4.99s (5000 iterations)|1.87s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|2.04s (5000 iterations)|Dumping not supported|\n\n### Running speed with data provided by `tomli`\n\nTest the speed of loading and dumping the loaded using data\nprovided by `tomli`\n\n\u003e https://github.com/hukkin/tomli/raw/master/benchmark/data.toml\n\n\n| |Loading speed|Dumping speed|\n|-|-|-|\n|\u003ca target=\"_blank\" href=\"https://github.com/uiri/toml\"\u003etoml\u003c/a\u003e|Excluded (heterogeneous arrays not supported)|Excluded (heterogeneous arrays not supported)|\n|\u003ca target=\"_blank\" href=\"https://github.com/hukkin/tomli\"\u003etomli/tomli_w\u003c/a\u003e|1.41s (5000 iterations)|0.46s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/sdispater/tomlkit\"\u003etomlkit\u003c/a\u003e|24.55s (5000 iterations)|0.51s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/samuelcolvin/rtoml\"\u003ertoml\u003c/a\u003e|0.32s (5000 iterations)|0.16s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://github.com/alethiophile/qtoml\"\u003eqtoml\u003c/a\u003e|3.63s (5000 iterations)|1.25s (5000 iterations)|\n|\u003ca target=\"_blank\" href=\"https://docs.python.org/3/library/tomllib.html\"\u003etomllib\u003c/a\u003e|1.44s (5000 iterations)|Dumping not supported|\n\n\n\n## Other reports\n\n- [Tests with `toml-test` v1.4.0](./reports/with_toml-test_v1.4.0.md)\n- [Tests with `toml-test` v1.3.0](./reports/with_toml-test_v1.3.0.md)\n- [Tests with `toml-test` v1.2.0](./reports/with_toml-test_v1.2.0.md)\n\n## Run your own report\n\n### Install\n\n```shell\npip install -U toml-bench\n```\n\n### Generate your own report\n\n```shell\ntoml-bench\n```\n\n#### Use a different data directory than the default one\n\n```shell\ntoml-bench --datadir /tmp/toml-bench\n```\n\n#### Write the report to a markdown file\n\n```shell\ntoml-bench --report ./README.md\n```\n\n#### Test with a different version of compliance set (`BurntSushi/toml-test`)\n\n```shell\ntoml-bench --comver 1.0.0\n```\n\n#### Use a different number of iterations in speed tests\n\n```shell\ntoml-bench --iter 5000\n```\n\n#### Test with different versions of packages\n\n```shell\ngit clone https://github.com/pwwang/toml-bench.git\ncd toml-bench\n# See https://python-poetry.org/docs/cli/#add\n# for how to specify a version constraint\npoetry add \"tomli=2.0.0\"\npoetry update\npoetry install\npoetry run toml-bench\n```\n\n[1]: https://img.shields.io/librariesio/release/pypi/toml-bench?style=flat-square\n[2]: https://libraries.io/github/pwwang/toml-bench#repository_dependencies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpwwang%2Ftoml-bench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpwwang%2Ftoml-bench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpwwang%2Ftoml-bench/lists"}