{"id":13417941,"url":"https://github.com/doctest/doctest","last_synced_at":"2026-04-02T01:19:29.235Z","repository":{"id":19418176,"uuid":"22660515","full_name":"doctest/doctest","owner":"doctest","description":"The fastest feature-rich C++11/14/17/20/23 single-header testing framework","archived":false,"fork":false,"pushed_at":"2026-03-31T09:08:50.000Z","size":7333,"stargazers_count":6672,"open_issues_count":129,"forks_count":682,"subscribers_count":107,"default_branch":"master","last_synced_at":"2026-03-31T10:24:00.374Z","etag":null,"topics":["c-plus-plus","cpp","cpp11","cpp14","cpp17","cpp20","cpp23","doctest","header-only","single-file","tdd","testing","testing-framework","unit-testing"],"latest_commit_sha":null,"homepage":"https://bit.ly/doctest-docs","language":"C++","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/doctest.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"onqtam","patreon":"onqtam","custom":"https://www.paypal.me/onqtam/10"}},"created_at":"2014-08-05T21:43:51.000Z","updated_at":"2026-03-31T05:36:34.000Z","dependencies_parsed_at":"2023-09-27T03:37:52.738Z","dependency_job_id":"dc5c9aad-6d53-4727-b2f0-1088290cb211","html_url":"https://github.com/doctest/doctest","commit_stats":{"total_commits":1405,"total_committers":106,"mean_commits":"13.254716981132075","dds":"0.15160142348754446","last_synced_commit":"ae7a13539fb71f270b87eb2e874fbac80bc8dda2"},"previous_names":["onqtam/doctest"],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/doctest/doctest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctest%2Fdoctest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctest%2Fdoctest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctest%2Fdoctest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctest%2Fdoctest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doctest","download_url":"https://codeload.github.com/doctest/doctest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctest%2Fdoctest/sbom","scorecard":{"id":349368,"data":{"date":"2025-08-11","repo":{"name":"github.com/doctest/doctest","commit":"1da23a3e8119ec5cce4f9388e91b065e20bf06f5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":4,"reason":"Found 14/30 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:302: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:305: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:328: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:350: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:232: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:276: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:282: update your workflow using https://app.stepsecurity.io/secureworkflow/doctest/doctest/main.yml/master?enable=pin","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.4.12 not signed: https://api.github.com/repos/doctest/doctest/releases/215164465","Warn: release artifact v2.4.11 not signed: https://api.github.com/repos/doctest/doctest/releases/95694710","Warn: release artifact v2.4.10 not signed: https://api.github.com/repos/doctest/doctest/releases/93828172","Warn: release artifact v2.4.9 not signed: https://api.github.com/repos/doctest/doctest/releases/69772051","Warn: release artifact v2.4.12 does not have provenance: https://api.github.com/repos/doctest/doctest/releases/215164465","Warn: release artifact v2.4.11 does not have provenance: https://api.github.com/repos/doctest/doctest/releases/95694710","Warn: release artifact v2.4.10 does not have provenance: https://api.github.com/repos/doctest/doctest/releases/93828172","Warn: release artifact v2.4.9 does not have provenance: https://api.github.com/repos/doctest/doctest/releases/69772051"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T07:55:23.594Z","repository_id":19418176,"created_at":"2025-08-18T07:55:23.594Z","updated_at":"2025-08-18T07:55:23.594Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:05:07.454Z","status":"ssl_error","status_checked_at":"2026-04-02T00:56:46.496Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["c-plus-plus","cpp","cpp11","cpp14","cpp17","cpp20","cpp23","doctest","header-only","single-file","tdd","testing","testing-framework","unit-testing"],"created_at":"2024-07-30T22:00:55.888Z","updated_at":"2026-04-02T01:19:29.228Z","avatar_url":"https://github.com/doctest.png","language":"C++","funding_links":["https://github.com/sponsors/onqtam","https://patreon.com/onqtam","https://www.paypal.me/onqtam/10"],"categories":["TODO scan for Android support in followings","C++","Tests","Tools","C/C++程序设计"],"sub_categories":["Static Analysis \u0026 Testing","资源传输下载"],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"scripts/data/logo/logo_1.svg\"\u003e\u003c/p\u003e\n\n\u003cb\u003e\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            master branch\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://github.com/doctest/doctest/actions?query=branch%3Amaster\"\u003e\u003cimg src=\"https://github.com/doctest/doctest/workflows/CI/badge.svg?branch=master\"\u003e\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://app.codecov.io/gh/doctest/doctest/branch/master\"\u003e\u003cimg src=\"https://codecov.io/gh/doctest/doctest/branch/master/graph/badge.svg?token=fAdZl67WN7\"/\u003e\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            dev branch\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://github.com/doctest/doctest/actions?query=branch%3Adev\"\u003e\u003cimg src=\"https://github.com/doctest/doctest/workflows/CI/badge.svg?branch=dev\"\u003e\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://app.codecov.io/gh/doctest/doctest/branch/dev\"\u003e\u003cimg src=\"https://codecov.io/gh/doctest/doctest/branch/dev/graph/badge.svg?token=fAdZl67WN7\"/\u003e\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\u003c/b\u003e\n\n**doctest** is a new C++ testing framework but is by far the fastest both in compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and runtime compared to other feature-rich alternatives. It brings the ability of compiled languages such as [**D**](https://dlang.org/spec/unittest.html) / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.html) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests written directly in the production code thanks to a fast, transparent and flexible test runner with a clean interface.\n\n[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20/23-blue.svg)](https://en.wikipedia.org/wiki/C%2B%2B#Standardization)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](https://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)\n[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](https://godbolt.org/z/4s389Kbfs)\n\nA complete example with a self-registering test that compiles to an executable looks like this:\n\n![cover-example](scripts/data/using_doctest_888px_wide.gif)\n\nThere are many C++ testing frameworks - [Catch](https://github.com/catchorg/Catch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp), [cpputest](https://github.com/cpputest/cpputest), [googletest](https://github.com/google/googletest) and [others](https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B).\n\nThe **key** differences between it and other testing frameworks are that it is light and unintrusive:\n- Ultra light on compile times both in terms of [**including the header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-assertion-macro)\n- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmake/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**\n- Can remove **everything** testing-related from the binary with the [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest_config_disable) identifier\n- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts can be used from multiple threads spawned from a single test case - [**example**](examples/all_features/concurrency.cpp)\n- asserts can be used [**outside of a testing context**](doc/markdown/assertions.md#using-asserts-out-of-a-testing-context) - as a general purpose assert library - [**example**](examples/all_features/asserts_used_outside_of_tests.cpp)\n- No global namespace pollution (everything is in ```doctest::```) \u0026 doesn't drag **any** headers with it\n- [**Portable**](doc/markdown/features.md#extremely-portable) C++11 (use tag [**1.2.9**](https://github.com/doctest/doctest/tree/1.2.9) for C++98) with over 100 different CI builds (static analysis, sanitizers..)\n- binaries (exe/dll) can use the test runner of another binary =\u003e tests in a single registry - [**example**](examples/executable_dll_and_plugin/)\n\n![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)\n\nThis allows the framework to be used in more ways than any other - tests can be written directly in the production code!\n\n*Tests can be a form of documentation and should be able to reside near the production code which they test.*\n\n- This makes the barrier for writing tests **much lower** - you don't have to: **1)** make a separate source file **2)** include a bunch of stuff in it **3)** add it to the build system and **4)** add it to source control - You can just write the tests for a class or a piece of functionality at the bottom of its source file - or even header file!\n- Tests in the production code can be thought of as documentation/up-to-date comments - showcasing the APIs\n- Testing internals that are not exposed through the public API and headers is no longer a mind-bending exercise\n- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_development) in C++ has never been easier!\n\nThe framework can be used just like any other without mixing production code and tests - check out the [**features**](doc/markdown/features.md).\n\n**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2) and some parts of the code have been taken directly - check out [**the differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).\n\n[This table](https://github.com/martinmoene/catch-lest-other-comparison) compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) / [**lest**](https://github.com/martinmoene/lest) which are all very similar.\n\nCheckout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/mix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=eH1CxEC29l8) to get a better understanding of how the framework works and read about how to use it in [**the JetBrains article**](https://blog.jetbrains.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique aspects of the framework! On a short description on how to use the framework along production code you could refer to [**this GitHub issue**](https://github.com/doctest/doctest/issues/252). There is also an [**older article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the february edition of ACCU Overload 2017.\n\n[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-talk-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)\n\nDocumentation\n-------------\n\nProject:\n\n- [Features and design goals](doc/markdown/features.md) - the complete list of features\n- [Community driven roadmap](https://github.com/doctest/doctest/issues/600) - upcoming features\n- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime supremacy\n- [Contributing](CONTRIBUTING.md) - how to make a proper pull request\n- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs\n\nUsage:\n\n- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before the other parts of the documentation\n- [Assertion macros](doc/markdown/assertions.md)\n- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)\n- [Parameterized test cases](doc/markdown/parameterized-tests.md)\n- [Command line](doc/markdown/commandline.md)\n- [Logging macros](doc/markdown/logging.md)\n- [```main()``` entry point](doc/markdown/main.md)\n- [Configuration](doc/markdown/configuration.md)\n- [String conversions](doc/markdown/stringification.md)\n- [Reporters](doc/markdown/reporters.md)\n- [Extensions](doc/markdown/extensions.md)\n- [FAQ](doc/markdown/faq.md)\n- [Build systems](doc/markdown/build-systems.md)\n- [Examples](examples)\n\nBugs and feature proposals\n------------\nIf you find a bug, report it!\nIf you have an idea on how to improve the project, be it anything from better documentation to adding new features, consider preparing a **feature proposal**.\nWe call it proposal because the word \"request\" has the wrong intention, no one will auto-magically fix it for you, but the idea can be discussed and accepted or rejected before **you** implement it.\nPlease make sure to read through the [**Contributing**](CONTRIBUTING.md) page before submitting any issue, the triaging procedure is documented there.\n\nContributing\n------------\n\nContributions in the form of issues and pull requests are welcome - check out the [**Contributing**](CONTRIBUTING.md) page.\n\nStargazers over time\n------------\n\n[![Stargazers over time](https://starchart.cc/doctest/doctest.svg)](https://starchart.cc/doctest/doctest)\n\nLogo\n------------\n\nThe [logo](scripts/data/logo) is licensed under a Creative Commons Attribution 4.0 International License. Copyright \u0026copy; 2019 [area55git](https://github.com/area55git) \u0026nbsp; [![License: CC BY 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons.org/licenses/by/4.0/)\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"scripts/data/logo/icon_2.svg\"\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoctest%2Fdoctest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoctest%2Fdoctest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoctest%2Fdoctest/lists"}