JLS-01 | Reviewed: ⨯ | Score: 0.0#

The CI pipeline in nlohmann/json executes the unit and integration test suites on each pull request (opened, reopened, synchronized).

Supported Requests:

Item

Summary

Score

Status

TA-VALIDATION

All specified tests are executed repeatedly, under defined conditions in controlled environments, according to specified objectives. (To revisit)

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/blob/develop/.github/workflows/ubuntu.yml#L9

https://github.com/nlohmann/json/blob/develop/.github/workflows/ubuntu.yml#L9 - The trigger condition for the CI workflow that executes the test suites.

Fallacies:

None

Graph:

No Image

date-time

JLS-01

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-02 | Reviewed: ⨯ | Score: 0.0#

Fuzz testing is used in the original nlohmann/json repository (https://github.com/nlohmann/json) to uncover edge cases and failure modes throughout development. (https://github.com/nlohmann/json/blob/develop/tests/fuzzing.md)

Supported Requests:

Item

Summary

Score

Status

TA-MISBEHAVIOURS

Prohibited misbehaviours for the nlohmann/json library are identified, and mitigations are specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://introspector.oss-fuzz.com/project-profile?project=json

https://introspector.oss-fuzz.com/project-profile?project=json - most recent report for fuzzing introspection of nlohmann/json with historical plots

  • website: https://storage.googleapis.com/oss-fuzz-introspector/json/inspector-report/20250824/fuzz_report.html

https://storage.googleapis.com/oss-fuzz-introspector/json/inspector-report/20250824/fuzz_report.html - persistent storage of fuzz-testing-report for nlohmann/json version 3.12.0 on 24.08.2025

  • website: https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/.github/workflows/cifuzz.yml

https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/.github/workflows/cifuzz.yml - Configuration file for Fuzz-Testing pipeline in the original nlohmann/json repository

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where score for ‘Fuzzing’ supports this statement.

Fallacies:

None

Graph:

No Image

date-time

JLS-02

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-03 | Reviewed: ⨯ | Score: 0.0#

Automated tests within the TSF documentation are reviewed by a Subject Matter Expert to verify they test the properties they claim to.

Supported Requests:

Item

Summary

Score

Status

TA-BEHAVIOURS

Expected or required behaviours for the nlohmann/json library are identified, specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-03

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-04 | Reviewed: ⨯ | Score: 0.0#

External dependencies within nlohmann/json are checked for potential security vulnerabilities with each pull request to main. Merging is blocked until all warnings are resolved.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TA-INPUTS

All inputs to the nlohmann/json library are assessed, to identify potential risks and issues.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • .github/workflows/dependency-review.yml

# Dependency Review Action
#
# This Action will scan dependency manifest files that change as part of a Pull Request,
# surfacing known-vulnerable versions of the packages declared or updated in the PR.
# Once installed, if the workflow run is marked as required,
# PRs introducing known-vulnerable packages will be blocked from merging.
#
# Source repository: https://github.com/actions/dependency-review-action
name: 'Dependency Review'

on:  
  workflow_call:
    inputs:
      artifact_id:
        description: 'Unique identifier for artifacts'
        required: true
        type: string

permissions:
  contents: read

jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - name: 'Checkout Repository'
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@ce3cf9537a52e8119d91fd484ab5b8a807627bf8 # v4.6.0


      - name: Generate dependency_review artifact
        run: |
          echo "Generating Dependency Review artifact..."
          mkdir -p dependency_review
          echo "dependency review processed for ${{ inputs.artifact_id }}" > dependency_review/dependency_review.txt

      - name: Upload dependency_review artifact
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ${{ inputs.artifact_id }}
          path: dependency_review/
  • Description: The workflow scans PRs for dependency changes and vulnerabilities.

Fallacies:

None

Graph:

No Image

date-time

JLS-04

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-05 | Reviewed: ⨯ | Score: 0.0#

The nlohmann/json library is widely used and actively maintained; bugs and misbehaviours are tracked publicly and transparently.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/issues

https://github.com/nlohmann/json/issues - contains the collected github-issues for nlohmann/json

  • website: https://github.com/nlohmann/json/graphs/commit-activity

https://github.com/nlohmann/json/graphs/commit-activity - presents the commit activity of the past year

  • website: https://github.com/nlohmann/json/graphs/contributors

https://github.com/nlohmann/json/graphs/contributors - presents commits over time and per contributor

  • website: https://github.com/nlohmann/json/forks?include=active&page=1&period=&sort_by=last_updated

https://github.com/nlohmann/json/forks?include=active&page=1&period=&sort_by=last_updated - lists all forks of nlohmann/json by last updated

  • website: https://github.com/nlohmann/json/pulse

https://github.com/nlohmann/json/pulse - presents activity over the past week

  • website: https://github.com/orgs/score-json/discussions/27#discussion-8594385

https://github.com/orgs/score-json/discussions/27#discussion-8594385 - comparison between JSON libraries demonstrating the popularity of nlohmann/json

  • website: https://json.nlohmann.me/home/customers/

https://json.nlohmann.me/home/customers/ - presents a list of a subset of all customers who are using the nlohmann/json library

  • website: https://github.com/nlohmann/json/releases/tag/v3.12.0

https://github.com/nlohmann/json/releases/tag/v3.12.0 - release notes for v3.12.0, listing bugs, CVEs and warnings which were either fixed or mitigated since last release

Fallacies:

None

Graph:

No Image

date-time

JLS-05

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-06 | Reviewed: ⨯ | Score: 0.0#

Pull requests in the nlohmann/json repository are merged only after code review.

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where score for ‘Code-Review’ reflects this statement.

Fallacies:

None

Graph:

No Image

date-time

JLS-06

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-07 | Reviewed: ⨯ | Score: 0.0#

The develop branch of nlohmann/json is protected, i.e. no direct commits are possible.

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/actions?query=event%3Apush+branch%3Adevelop

https://github.com/nlohmann/json/actions?query=event%3Apush+branch%3Adevelop - List of all pushes to the develop branch in nlohmann/json, showing that all commits are done by nlohmann and indicating that direct commits are not possible.

Fallacies:

None

Graph:

No Image

date-time

JLS-07

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-08 | Reviewed: ⨯ | Score: 0.0#

Each statement within the TSF documentation is scored based on SME reviews or automatic validation functions. (TODO)

Supported Requests:

Item

Summary

Score

Status

TA-CONFIDENCE

Confidence in the nlohmann/json library is measured based on results of analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-08

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-09 | Reviewed: ⨯ | Score: 0.0#

Scores within the TSF documentation are reasonably, systematically and repeatably accumulated. (TODO)

Supported Requests:

Item

Summary

Score

Status

TA-CONFIDENCE

Confidence in the nlohmann/json library is measured based on results of analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-09

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-10 | Reviewed: ⨯ | Score: 0.0#

Every release of nlohmann/json includes source code, build instructions, tests and attestations. (TODO: Test result summary)

Supported Requests:

Item

Summary

Score

Status

TA-ITERATIONS

All constructed iterations of the nlohmann/json library include source code, build instructions, tests, results and attestations.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-10

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-11 | Reviewed: ⨯ | Score: 0.0#

Outstanding bugs or misbehaviours are analyzed within eclipse-score/inc_nlohmann_json to determine whether they are relevant for S-CORE’s use cases of the nlohmann/json library.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/misbehaviours.md

https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/misbehaviours.md - List of outstanding bugs as well as fixes for developed code that are outstanding, not yet applied.

Fallacies:

None

Graph:

No Image

date-time

JLS-11

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-12 | Reviewed: ⨯ | Score: 0.0#

The nlohmann/json repository has well-defined community standards, including a contribution guideline and a security policy.

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/community

https://github.com/nlohmann/json/community - List of defined community standards in nlohmann/json

Fallacies:

None

Graph:

No Image

date-time

JLS-12

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-13 | Reviewed: ⨯ | Score: 0.0#

The S-Core methodologies are followed in eclipse-score/inc_nlohmann_json.

Supported Requests:

Item

Summary

Score

Status

TA-METHODOLOGIES

Manual methodologies applied for the nlohmann/json library by contributors, and their results, are managed according to specified objectives.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://eclipse-score.github.io/process_description/main/general_concepts/score_review_concept.html

https://eclipse-score.github.io/process_description/main/general_concepts/score_review_concept.html - Documentation of S-CORE methodologies

Fallacies:

None

Graph:

No Image

date-time

JLS-13

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-14 | Reviewed: ⨯ | Score: 0.0#

The SHA value of the nlohmann/json library in use within eclipse-score/inc_nlohmann_json coincides with the SHA value provided by Niels Lohmann for that version.

Supported Requests:

Item

Summary

Score

Status

TA-RELEASES

Construction of releases for the nlohmann/json library is fully repeatable and the results are fully reproducible, with any exceptions documented and justified.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/tree/v3.12.0

https://github.com/nlohmann/json/tree/v3.12.0 - release site of nlohmann/json containing the sha values

Fallacies:

None

Graph:

No Image

date-time

JLS-14

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-16 | Reviewed: ⨯ | Score: 0.0#

A list of tests, which is extracted from the test execution, is provided, along with a list of test environments.

Supported Requests:

Item

Summary

Score

Status

TA-TESTS

All tests for the nlohmann/json library, and its build and test environments, are constructed from controlled/mirrored sources and are reproducible, with any exceptions documented.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • TSF/docs/list_of_test_environments.md

## List of all unit-tests with test environments

    This list contains all unit-tests possibly running in this project.
    These tests are compiled from the source-code, where the individual unit-tests are arranged in TEST_CASEs containing possibly nested SECTIONs.
    To reflect the structure of the nested sections, nested lists are utilised, where the top-level list represents the list of TEST_CASEs. 

    It should be noted that not all unit-tests in a test-file are executed with every compiler-configuration.
    

### List of tests in file unit-32bit.cpp

* value_in_range_of trait
* 32bit
* BJData
    * parse errors
        * array
            * optimized array: negative size
            * optimized array: integer value overflow



All tests in this file were run in the following configurations:

* Linux-g++ with standard gnu++11


### List of tests in file unit-algorithms.cpp

* algorithms
    * non-modifying sequence operations
        * std::all_of
        * std::any_of
        * std::none_of
        * std::for_each
            * reading
            * writing
        * std::count
        * std::count_if
        * std::mismatch
        * std::equal
            * using operator==
            * using user-defined comparison
        * std::find
        * std::find_if
        * std::find_if_not
        * std::adjacent_find
    * modifying sequence operations
        * std::reverse
        * std::rotate
        * std::partition
    * sorting operations
        * std::sort
            * with standard comparison
            * with user-defined comparison
            * sorting an object
        * std::partial_sort
    * set operations
        * std::merge
        * std::set_difference
        * std::set_intersection
        * std::set_union
        * std::set_symmetric_difference
    * heap operations
    * iota
        * int
        * double
        * char
    * copy
        * copy without if
        * copy if
        * copy n
        * copy n chars



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-allocator.cpp

* bad_alloc
    * bad_alloc
* controlled bad_alloc
    * class json_value
        * json_value(value_t)
            * object
            * array
            * string
        * json_value(const string_t&)
    * class basic_json
        * basic_json(const CompatibleObjectType&)
        * basic_json(const CompatibleArrayType&)
        * basic_json(const typename string_t::value_type*)
        * basic_json(const typename string_t::value_type*)
* bad my_allocator::construct
    * my_allocator::construct doesn't forward



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-alt-string.cpp

* alternative string type
    * dump
    * parse
    * items
    * equality
    * JSON pointer
    * patch
    * diff
    * flatten



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-arrays.cpp

* accept
    * boundaries
* parse
    * whitespace



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-assert_macro.cpp

* JSON_ASSERT(x)
    * basic_json(first, second)



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-binary_formats.cpp

* Binary Formats
    * canada.json
    * twitter.json
    * citm_catalog.json
    * jeopardy.json
    * sample.json



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-bjdata.cpp

* value_in_range_of trait
* BJData
    * binary_reader BJData LUT arrays are sorted
    * individual values
        * discarded
        * null
        * boolean
            * true
            * false
        * byte
            * 0..255 (uint8)
        * number
            * signed
                * -9223372036854775808..-2147483649 (int64)
                * -2147483648..-32769 (int32)
                * -32768..-129 (int16)
                * -9263 (int16)
                * -128..-1 (int8)
                * 0..127 (int8)
                * 128..255 (uint8)
                * 256..32767 (int16)
                * 32768..65535 (uint16)
                * 65536..2147483647 (int32)
                * 2147483648..4294967295 (uint32)
                * 4294967296..9223372036854775807 (int64)
                * 9223372036854775808..18446744073709551615 (uint64)
            * unsigned
                * 0..127 (int8)
                * 128..255 (uint8)
                * 256..32767 (int16)
                * 32768..65535 (uint16)
                * 65536..2147483647 (int32)
                * 2147483648..4294967295 (uint32)
                * 4294967296..9223372036854775807 (int64)
                * 9223372036854775808..18446744073709551615 (uint64)
            * float64
                * 3.1415925
            * half-precision float
                * simple half floats
                * errors
                    * no byte follows
                    * only one byte follows
            * half-precision float (edge cases)
                * exp = 0b00000
                    * 0 (0 00000 0000000000)
                    * -0 (1 00000 0000000000)
                    * 2**-24 (0 00000 0000000001)
                * exp = 0b11111
                    * infinity (0 11111 0000000000)
                    * -infinity (1 11111 0000000000)
                * other values from https://en.wikipedia.org/wiki/Half-precision_floating-point_format
                    * 1 (0 01111 0000000000)
                    * -2 (1 10000 0000000000)
                    * 65504 (0 11110 1111111111)
                * infinity
                * NaN
            * high-precision number
                * unsigned integer number
                * signed integer number
                * floating-point number
                * errors
        * string
            * N = 0..127
            * N = 128..255
            * N = 256..32767
            * N = 32768..65535
            * N = 65536..2147483647
        * binary
            * N = 0..127
            * N = 128..255
            * N = 256..32767
            * N = 32768..65535
            * N = 65536..2147483647
            * Other Serializations
                * No Count No Type
                * Yes Count No Type
    * array
        * empty
            * size=false type=false
            * size=true type=false
            * size=true type=true
        * [null]
            * size=false type=false
            * size=true type=false
            * size=true type=true
        * [1,2,3,4,5]
            * size=false type=false
            * size=true type=false
            * size=true type=true
        * [[[[]]]]
            * size=false type=false
            * size=true type=false
            * size=true type=true
        * array with int16_t elements
            * size=false type=false
            * size=true type=false
        * array with uint16_t elements
            * size=false type=false
            * size=true type=false
        * array with int32_t elements
            * size=false type=false
            * size=true type=false
    * object
        * empty
            * size=false type=false
            * size=true type=false
            * size=true type=true
        * {\
            * size=false type=false
            * size=true type=false
        * {\
            * size=false type=false
            * size=true type=false
            * size=true type=true ignore object type marker
* errors
    * strict mode
        * non-strict mode
        * strict mode
* SAX aborts
    * start_array()
    * start_object()
    * key() in object
    * start_array(len)
    * start_object(len)
    * key() in object with length
    * start_array() in ndarray _ArraySize_
    * number_integer() in ndarray _ArraySize_
    * key() in ndarray _ArrayType_
    * string() in ndarray _ArrayType_
    * key() in ndarray _ArrayData_
    * string() in ndarray _ArrayData_
    * string() in ndarray _ArrayType_
    * start_array() in ndarray _ArrayData_
* parsing values
    * strings
    * number
        * float
    * array
        * optimized version (length only)
        * optimized version (type and length)
        * optimized ndarray (type and vector-size as optimized 1D array)
        * optimized ndarray (type and vector-size ndarray with JData annotations)
        * optimized ndarray (type and vector-size as 1D array)
        * optimized ndarray (type and vector-size as size-optimized array)
        * invalid ndarray annotations remains as object
* parse errors
    * empty byte vector
    * char
        * eof after C byte
        * byte out of range
    * byte
        * parse bjdata markers in ubjson
    * strings
        * eof after S byte
        * invalid byte
        * parse bjdata markers in ubjson
    * array
        * optimized array: no size following type
        * optimized array: negative size
        * optimized array: integer value overflow
        * do not accept NTFZ markers in ndarray optimized type (with count)
        * do not accept NTFZ markers in ndarray optimized type (without count)
    * strings
    * sizes
    * parse bjdata markers as array size in ubjson
    * types
    * arrays
    * ndarrays
    * objects
* writing optimized values
    * integer
        * array of i
        * array of U
        * array of I
        * array of u
        * array of l
        * array of m
        * array of L
    * unsigned integer
        * array of i
        * array of U
        * array of I
        * array of u
        * array of l
        * array of m
        * array of L
        * array of M
* Universal Binary JSON Specification Examples 1
    * Null Value
    * No-Op Value
    * Boolean Types
    * Numeric Types
    * Char Type
    * Byte Type
    * String Type
        * English
        * Russian
        * Russian
    * Array Type
        * size=false type=false
        * size=true type=false
        * size=true type=true
    * Object Type
        * size=false type=false
        * size=true type=false
        * size=true type=true
    * Optimized Format
        * Array Example
            * No Optimization
            * Optimized with count
            * Optimized with type & count
        * Object Example
            * No Optimization
            * Optimized with count
            * Optimized with type & count
        * Special Cases (Null, No-Op and Boolean)
            * Array
            * Object
* all BJData first bytes
* BJData roundtrips
    * input from self-generated BJData files



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-bson.cpp

* BSON
    * individual values not supported
        * null
        * boolean
            * true
            * false
        * number
        * float
        * string
        * array
    * keys containing code-point U+0000 cannot be serialized to BSON
    * string length must be at least 1
    * objects
        * empty object
        * non-empty object with bool
        * non-empty object with bool
        * non-empty object with double
        * non-empty object with string
        * non-empty object with null member
        * non-empty object with integer (32-bit) member
        * non-empty object with integer (64-bit) member
        * non-empty object with negative integer (32-bit) member
        * non-empty object with negative integer (64-bit) member
        * non-empty object with unsigned integer (64-bit) member
        * non-empty object with small unsigned integer member
        * non-empty object with object member
        * non-empty object with array member
        * non-empty object with non-empty array member
        * non-empty object with binary member
        * non-empty object with binary member with subtype
        * Some more complex document
    * Examples from https://bsonspec.org/faq.html
        * Example 1
        * Example 2
* BSON input/output_adapters
    * roundtrips
        * std::ostringstream
        * std::string
        * std::vector
* Incomplete BSON Input
    * Incomplete BSON Input 1
    * Incomplete BSON Input 2
    * Incomplete BSON Input 3
    * Incomplete BSON Input 4
    * Improve coverage
        * key
        * array
* Negative size of binary value
* Unsupported BSON input
* BSON numerical data
    * number
        * signed
            * std::int64_t: INT64_MIN .. INT32_MIN-1
            * signed std::int32_t: INT32_MIN .. INT32_MAX
            * signed std::int64_t: INT32_MAX+1 .. INT64_MAX
        * unsigned
            * unsigned std::uint64_t: 0 .. INT32_MAX
            * unsigned std::uint64_t: INT32_MAX+1 .. INT64_MAX
            * unsigned std::uint64_t: INT64_MAX+1 .. UINT64_MAX
* BSON roundtrips
    * reference files



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-byte_container_with_subtype.cpp

* byte_container_with_subtype
    * empty container
    * subtyped container
    * comparisons



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-byte_order_mark.cpp

* accept
    * UTF-8
        * single BOM
        * multiple BOM
        * unexpected BOM
    * Other byte-order marks
        * UTF-16
        * UTF-32
* parse
    * UTF-8
        * multiple BOM
        * unexpected BOM
    * other BOM
        * UTF-16
        * UTF-32



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-capacity.cpp

* capacity
    * empty()
        * boolean
            * result of empty
            * definition of empty
        * string
            * result of empty
            * definition of empty
        * array
            * empty array
                * result of empty
                * definition of empty
            * filled array
                * result of empty
                * definition of empty
        * object
            * empty object
                * result of empty
                * definition of empty
            * filled object
                * result of empty
                * definition of empty
        * number (integer)
            * result of empty
            * definition of empty
        * number (unsigned)
            * result of empty
            * definition of empty
        * number (float)
            * result of empty
            * definition of empty
        * null
            * result of empty
            * definition of empty
    * size()
        * boolean
            * result of size
            * definition of size
        * string
            * result of size
            * definition of size
        * array
            * empty array
                * result of size
                * definition of size
            * filled array
                * result of size
                * definition of size
        * object
            * empty object
                * result of size
                * definition of size
            * filled object
                * result of size
                * definition of size
        * number (integer)
            * result of size
            * definition of size
        * number (unsigned)
            * result of size
            * definition of size
        * number (float)
            * result of size
            * definition of size
        * null
            * result of size
            * definition of size
    * max_size()
        * boolean
            * result of max_size
        * string
            * result of max_size
        * array
            * empty array
                * result of max_size
            * filled array
                * result of max_size
        * object
            * empty object
                * result of max_size
            * filled object
                * result of max_size
        * number (integer)
            * result of max_size
        * number (unsigned)
            * result of max_size
        * number (float)
            * result of max_size
        * null
            * result of max_size



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-cbor.cpp

* CBOR
    * individual values
        * discarded
        * NaN
        * Infinity
        * null
        * boolean
            * true
            * false
        * number
            * signed
                * -9223372036854775808..-4294967297
                * -4294967296..-65537
                * -65536..-257
                * -9263 (int 16)
                * -256..-24
                * -24..-1
                * 0..23
                * 24..255
                * 256..65535
                * 65536..4294967295
                * 4294967296..4611686018427387903
                * -32768..-129 (int 16)
            * unsigned
                * 0..23 (Integer)
                * 24..255 (one-byte uint8_t)
                * 256..65535 (two-byte uint16_t)
                * 65536..4294967295 (four-byte uint32_t)
                * 4294967296..4611686018427387903 (eight-byte uint64_t)
            * double-precision float
                * 3.1415925
            * single-precision float
                * 0.5
                * 0.0
                * -0.0
                * 100.0
                * 200.0
                * 3.40282e+38(max float)
                * -3.40282e+38(lowest float)
                * 1 + 3.40282e+38(more than max float)
                * -1 - 3.40282e+38(less than lowest float)
            * half-precision float (edge cases)
                * errors
                    * no byte follows
                    * only one byte follows
                * exp = 0b00000
                    * 0 (0 00000 0000000000)
                    * -0 (1 00000 0000000000)
                    * 2**-24 (0 00000 0000000001)
                * exp = 0b11111
                    * infinity (0 11111 0000000000)
                    * -infinity (1 11111 0000000000)
                * other values from https://en.wikipedia.org/wiki/Half-precision_floating-point_format
                    * 1 (0 01111 0000000000)
                    * -2 (1 10000 0000000000)
                    * 65504 (0 11110 1111111111)
                * infinity
                * NaN
        * string
            * N = 0..23
            * N = 24..255
            * N = 256..65535
            * N = 65536..4294967295
        * array
            * empty
            * [null]
            * [1,2,3,4,5]
            * [[[[]]]]
            * array with uint16_t elements
            * array with uint32_t elements
        * object
            * empty
            * {\
            * {\
            * object with uint8_t elements
            * object with uint16_t elements
            * object with uint32_t elements
        * binary
            * N = 0..23
            * N = 24..255
            * N = 256..65535
            * N = 65536..4294967295
            * indefinite size
            * binary in array
            * binary in object
            * SAX callback with binary
    * additional deserialization
        * 0x5b (byte array)
        * 0x7b (string)
        * 0x9b (array)
        * 0xbb (map)
    * errors
        * empty byte vector
        * too short byte vector
        * unsupported bytes
            * concrete examples
            * all unsupported bytes
        * invalid string in map
        * strict mode
            * non-strict mode
            * strict mode
    * SAX aborts
        * start_array(len)
        * start_object(len)
        * key()
* single CBOR roundtrip
    * sample.json
        * roundtrips
            * std::ostringstream
            * std::string
* CBOR regressions
    * fuzz test results
* CBOR roundtrips
    * input from flynn
* all CBOR first bytes
* examples from RFC 7049 Appendix A
    * numbers
    * simple values
    * strings
    * byte arrays
    * arrays
    * objects
* Tagged values
    * 0xC6..0xD4
    * 0xD8 - 1 byte follows
        * success
        * missing byte after tag
    * 0xD9 - 2 byte follow
        * success
        * missing byte after tag
    * 0xDA - 4 bytes follow
        * success
        * missing bytes after tag
    * 0xDB - 8 bytes follow
        * success
        * missing byte after tag
    * tagged binary



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_const_iterator.cpp

* const_iterator class
    * construction
        * constructor
            * null
            * object
            * array
        * copy assignment
        * copy constructor from non-const iterator
            * create from uninitialized iterator
            * create from initialized iterator
    * initialization
        * set_begin
            * null
            * object
            * array
        * set_end
            * null
            * object
            * array
    * element access
        * operator*
            * null
            * number
            * object
            * array
        * operator->
            * null
            * number
            * object
            * array
    * increment/decrement
        * post-increment
            * null
            * number
            * object
            * array
        * pre-increment
            * null
            * number
            * object
            * array
        * post-decrement
            * null
            * number
            * object
            * array
        * pre-decrement
            * null
            * number
            * object
            * array



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_iterator.cpp

* iterator class
    * construction
        * constructor
            * null
            * object
            * array
        * copy assignment
    * initialization
        * set_begin
            * null
            * object
            * array
        * set_end
            * null
            * object
            * array
    * element access
        * operator*
            * null
            * number
            * object
            * array
        * operator->
            * null
            * number
            * object
            * array
    * increment/decrement
        * post-increment
            * null
            * number
            * object
            * array
        * pre-increment
            * null
            * number
            * object
            * array
        * post-decrement
            * null
            * number
            * object
            * array
        * pre-decrement
            * null
            * number
            * object
            * array
    * equality-preserving
        * post-increment
            * primitive_iterator_t
            * iter_impl
            * json_reverse_iterator
        * post-decrement
            * primitive_iterator_t
            * iter_impl
            * json_reverse_iterator
    * cert-dcl21-cpp
        * post-increment
            * primitive_iterator_t
            * iter_impl
            * json_reverse_iterator
        * post-decrement
            * primitive_iterator_t
            * iter_impl
            * json_reverse_iterator



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_lexer.cpp

* lexer class
    * scan
        * structural characters
        * literal names
        * numbers
        * whitespace
    * token_type_name
    * parse errors on first character
    * very large string
    * fail on comments
    * ignore comments



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_parser.cpp

* parser class
    * parse
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
                * additional test for null byte
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * accept
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * parse errors
    * parse errors (accept)
    * tests found by mutate++
    * callback function
        * filter nothing
        * filter everything
        * filter specific element
        * filter object in array
        * filter specific events
            * first closing event
        * special cases
    * constructing from contiguous containers
        * from std::vector
        * from std::array
        * from array
        * from char literal
        * from std::string
        * from std::initializer_list
        * from std::valarray
    * improve test coverage
        * parser with callback
        * SAX parser
            * } without value
            * } with value
            * second key
            * ] without value
            * ] with value
            * float
            * false
            * null
            * true
            * unsigned
            * integer
            * string
    * error messages for comments



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_parser_core.cpp

* parser class - core
    * parse
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
                * additional test for null byte
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * accept
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * parse errors
    * parse errors (accept)
    * tests found by mutate++



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-class_parser_diagnostic_positions.cpp

* parser class
    * parse
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
                * additional test for null byte
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * accept
        * null
        * true
        * false
        * array
            * empty array
            * nonempty array
        * object
            * empty object
            * nonempty object
        * string
            * errors
            * escaped
        * number
            * integers
                * without exponent
                * with exponent
                * edge cases
                * over the edge cases
            * floating-point
                * without exponent
                * with exponent
            * overflow
            * invalid numbers
    * parse errors
    * parse errors (accept)
    * tests found by mutate++
    * callback function
        * filter nothing
        * filter everything
        * filter specific element
        * filter object in array
        * filter specific events
            * first closing event
        * special cases
    * constructing from contiguous containers
        * from std::vector
        * from std::array
        * from array
        * from char literal
        * from std::string
        * from std::initializer_list
        * from std::valarray
    * improve test coverage
        * parser with callback
        * SAX parser
            * } without value
            * } with value
            * second key
            * ] without value
            * ] with value
            * float
            * false
            * null
            * true
            * unsigned
            * integer
            * string
    * error messages for comments
    * with callback
        * filter nothing
        * filter element
    * without callback
    * retrieve start position and end position
        * for object
        * for array
        * for array with objects
        * for two levels of nesting objects
        * for simple types
            * no nested
                * with callback
                * without callback
            * string type
            * number type
            * boolean type
            * null type
        * with leading whitespace and newlines around root JSON



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-comparison.cpp

* lexicographical comparison operators
    * types
        * comparison: less
        * comparison: 3-way
    * values
        * compares unordered
        * compares unordered (inverse)
        * comparison: equal
        * comparison: not equal
        * comparison: less
        * comparison: less than or equal equal
        * comparison: greater than
        * comparison: greater than or equal
        * comparison: 3-way
    * parser callback regression
        * filter specific element



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++20
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++20
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++20
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++20
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++20
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++20
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20


### List of tests in file unit-concepts.cpp

* concepts
    * container requirements for json
    * class json
        * DefaultConstructible
        * MoveConstructible
        * CopyConstructible
        * MoveAssignable
        * CopyAssignable
        * Destructible
        * StandardLayoutType
    * class iterator
        * CopyConstructible
        * CopyAssignable
        * Destructible
        * Swappable



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-constructor1.cpp

* constructors
    * create an empty value with a given type
        * null
        * discarded
        * object
        * array
        * boolean
        * string
        * number_integer
        * number_unsigned
        * number_float
        * binary
    * create a null object (implicitly)
        * no parameter
    * create a null object (explicitly)
        * parameter
    * create an object (explicit)
        * empty object
        * filled object
    * create an object (implicit)
        * std::map<json::string_t, json>
        * std::map<std::string, std::string> #600
        * std::map<const char*, json>
        * std::multimap<json::string_t, json>
        * std::unordered_map<json::string_t, json>
        * std::unordered_multimap<json::string_t, json>
        * associative container literal
    * create an array (explicit)
        * empty array
        * filled array
    * create an array (implicit)
        * std::list<json>
        * std::pair
        * std::pair with discarded values
        * std::tuple
        * std::tuple with discarded values
        * std::pair/tuple/array failures
        * std::forward_list<json>
        * std::array<json, 6>
        * std::valarray<int>
        * std::valarray<double>
        * std::vector<json>
        * std::deque<json>
        * std::set<json>
        * std::unordered_set<json>
        * sequence container literal
    * create a string (explicit)
        * empty string
        * filled string
    * create a string (implicit)
        * std::string
        * char[]
        * const char*
        * string literal
    * create a boolean (explicit)
        * empty boolean
        * filled boolean (true)
        * filled boolean (false)
        * from std::vector<bool>::reference
        * from std::vector<bool>::const_reference
    * create a binary (explicit)
        * empty binary
        * filled binary
    * create an integer number (explicit)
        * uninitialized value
        * initialized value
    * create an integer number (implicit)
        * short
        * unsigned short
        * int
        * unsigned int
        * long
        * unsigned long
        * long long
        * unsigned long long
        * int8_t
        * int16_t
        * int32_t
        * int64_t
        * int_fast8_t
        * int_fast16_t
        * int_fast32_t
        * int_fast64_t
        * int_least8_t
        * int_least16_t
        * int_least32_t
        * int_least64_t
        * uint8_t
        * uint16_t
        * uint32_t
        * uint64_t
        * uint_fast8_t
        * uint_fast16_t
        * uint_fast32_t
        * uint_fast64_t
        * uint_least8_t
        * uint_least16_t
        * uint_least32_t
        * uint_least64_t
        * integer literal without suffix
        * integer literal with u suffix
        * integer literal with l suffix
        * integer literal with ul suffix
        * integer literal with ll suffix
        * integer literal with ull suffix
    * create a floating-point number (explicit)
        * uninitialized value
        * initialized value
        * NaN
        * infinity
    * create a floating-point number (implicit)
        * float
        * double
        * long double
        * floating-point literal without suffix
        * integer literal with f suffix
        * integer literal with l suffix
    * create a container (array or object) from an initializer list
        * empty initializer list
            * explicit
            * implicit
        * one element
            * array
                * explicit
                * implicit
            * object
                * explicit
                * implicit
            * string
                * explicit
                * implicit
            * boolean
                * explicit
                * implicit
            * number (integer)
                * explicit
                * implicit
            * number (unsigned)
                * explicit
                * implicit
            * number (floating-point)
                * explicit
                * implicit
        * more elements
            * explicit
            * implicit
        * implicit type deduction
            * object
            * array
        * explicit type deduction
            * empty object
            * object
            * object with error
            * empty array
            * array
        * move from initializer_list
            * string
                * constructor with implicit types (array)
                * constructor with implicit types (object)
                * constructor with implicit types (object key)
            * array
                * constructor with implicit types (array)
                * constructor with implicit types (object)
                * assignment with implicit types (array)
                * assignment with implicit types (object)
            * object
                * constructor with implicit types (array)
                * constructor with implicit types (object)
                * assignment with implicit types (array)
                * assignment with implicit types (object)
            * json
                * constructor with implicit types (array)
                * constructor with implicit types (object)
                * assignment with implicit types (array)
                * assignment with implicit types (object)
    * create an array of n copies of a given value
        * cnt = 0
        * cnt = 1
        * cnt = 3
    * create a JSON container from an iterator range
        * object
            * json(begin(), end())
            * json(begin(), begin())
            * construct from subrange
            * incompatible iterators
        * array
            * json(begin(), end())
            * json(begin(), begin())
            * construct from subrange
            * incompatible iterators
        * other values
            * construct with two valid iterators
                * null
                * string
                * number (boolean)
                * number (integer)
                * number (unsigned)
                * number (floating point)
                * binary
            * construct with two invalid iterators
                * string
                * number (boolean)
                * number (integer)
                * number (integer)
                * number (floating point)



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-constructor2.cpp

* other constructors and destructor
    * copy constructor
        * object
        * array
        * null
        * boolean
        * string
        * number (integer)
        * number (unsigned)
        * number (floating-point)
        * binary
    * move constructor
    * copy assignment
        * object
        * array
        * null
        * boolean
        * string
        * number (integer)
        * number (unsigned)
        * number (floating-point)
        * binary
    * destructor
        * object
        * array
        * string



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-convenience.cpp

* convenience functions
    * type name as string
    * string escape
    * string concat
        * std::string
        * alt_string_iter
        * alt_string_data



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-conversions.cpp

* value conversion
    * get an object (explicit)
        * json::object_t
        * std::map<json::string_t, json>
        * std::multimap<json::string_t, json>
        * std::unordered_map<json::string_t, json>
        * std::unordered_multimap<json::string_t, json>
        * exception in case of a non-object type
    * get an object (explicit, get_to)
        * json::object_t
        * std::map<json::string_t, json>
        * std::multimap<json::string_t, json>
        * std::unordered_map<json::string_t, json>
        * std::unordered_multimap<json::string_t, json>
    * get an object (implicit)
        * json::object_t
        * std::map<json::string_t, json>
        * std::multimap<json::string_t, json>
        * std::unordered_map<json::string_t, json>
        * std::unordered_multimap<json::string_t, json>
    * get an array (explicit)
        * json::array_t
        * std::list<json>
        * std::forward_list<json>
        * std::vector<json>
            * reserve is called on containers that supports it
        * built-in arrays
        * std::deque<json>
        * exception in case of a non-array type
    * get an array (explicit, get_to)
        * json::array_t
        * std::valarray<json>
        * std::list<json>
        * std::forward_list<json>
        * std::vector<json>
        * built-in arrays
        * built-in arrays: 2D
        * built-in arrays: 3D
        * built-in arrays: 4D
        * std::deque<json>
    * get an array (implicit)
        * json::array_t
        * std::list<json>
        * std::forward_list<json>
        * std::vector<json>
        * std::deque<json>
    * get a string (explicit)
        * string_t
        * std::string
        * std::string_view
        * exception in case of a non-string type
        * exception in case of a non-string type using string_view
    * get a string (explicit, get_to)
        * string_t
        * std::string
        * std::string_view
    * get null (explicit)
    * get a string (implicit)
        * string_t
        * std::string_view
        * std::string
    * get a boolean (explicit)
        * boolean_t
        * uint8_t
        * bool
        * exception in case of a non-number type
    * get a boolean (implicit)
        * boolean_t
        * bool
    * get an integer number (explicit)
        * number_integer_t
        * number_unsigned_t
        * short
        * unsigned short
        * int
        * unsigned int
        * long
        * unsigned long
        * long long
        * unsigned long long
        * int8_t
        * int16_t
        * int32_t
        * int64_t
        * int8_fast_t
        * int16_fast_t
        * int32_fast_t
        * int64_fast_t
        * int8_least_t
        * int16_least_t
        * int32_least_t
        * int64_least_t
        * uint8_t
        * uint16_t
        * uint32_t
        * uint64_t
        * uint8_fast_t
        * uint16_fast_t
        * uint32_fast_t
        * uint64_fast_t
        * uint8_least_t
        * uint16_least_t
        * uint32_least_t
        * uint64_least_t
        * exception in case of a non-number type
    * get an integer number (implicit)
        * number_integer_t
        * number_unsigned_t
        * short
        * unsigned short
        * int
        * unsigned int
        * long
        * unsigned long
        * long long
        * unsigned long long
        * int8_t
        * int16_t
        * int32_t
        * int64_t
        * int8_fast_t
        * int16_fast_t
        * int32_fast_t
        * int64_fast_t
        * int8_least_t
        * int16_least_t
        * int32_least_t
        * int64_least_t
        * uint8_t
        * uint16_t
        * uint32_t
        * uint64_t
        * uint8_fast_t
        * uint16_fast_t
        * uint32_fast_t
        * uint64_fast_t
        * uint8_least_t
        * uint16_least_t
        * uint32_least_t
        * uint64_least_t
    * get a floating-point number (explicit)
        * number_float_t
        * float
        * double
        * exception in case of a non-string type
    * get a floating-point number (implicit)
        * number_float_t
        * float
        * double
    * get a binary value (explicit)
        * binary_t
        * get_binary()
            * non-const
            * non-const
        * exception in case of a non-string type
    * get a binary value (implicit)
        * binary_t
    * get an enum
    * more involved conversions
        * object-like STL containers
            * std::map
            * std::unordered_map
            * std::multimap
            * std::unordered_multimap
            * exception in case of a non-object type
        * array-like STL containers
            * std::list
            * std::forward_list
            * std::array
                * std::array is larger than JSON
                * std::array is smaller than JSON
            * std::valarray
            * std::vector
            * std::deque
            * std::set
            * std::unordered_set
            * std::map (array of pairs)
                * superfluous entries
            * std::unordered_map (array of pairs)
                * superfluous entries
            * exception in case of a non-object type
* JSON to enum mapping
    * enum class
    * traditional enum
* std::filesystem::path
    * ascii
    * utf-8
* std::optional
    * null
    * string
    * bool
    * number
    * array
    * object



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++14
* GNU 11.5.0 with standard gnu++17
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++14
* GNU 8.5.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 4.9.3 with standard gnu++11
* GNU 4.9.3 with standard gnu++14
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++14
* Clang 18.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++14
* GNU 12.5.0 with standard gnu++17
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++14
* GNU 10.5.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++14
* GNU 9.5.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 6.4.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++14
* Clang 19.1.7 with standard gnu++17
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++14
* Clang 17.0.6 with standard gnu++17
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++14
* Intel 2021.5.0.20211109 with standard gnu++17
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++14
* GNU 7.5.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++14
* GNU 13.4.0 with standard gnu++17
* GNU 5.5.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* GNU 4.8.5 with standard gnu++14
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++14
* Linux-c++ with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17


### List of tests in file unit-custom-base-class.cpp

* JSON Node Metadata
    * type int
    * type vector<int>
    * copy ctor
    * move ctor
    * move assign
    * copy assign
    * type unique_ptr<int>
    * type vector<int> in json array
* JSON Visit Node



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-deserialization.cpp

* deserialization
    * successful deserialization
        * stream
        * string literal
        * string_t
        * operator<<
        * operator>>
        * user-defined string literal
    * unsuccessful deserialization
        * stream
        * string
        * operator<<
        * operator>>
        * user-defined string literal
    * contiguous containers
        * directly
            * from std::vector
            * from std::array
            * from array
            * from chars
            * from std::string
            * from std::initializer_list
            * empty container
        * via iterator range
            * from std::vector
            * from std::array
            * from array
            * from std::string
            * from std::initializer_list
            * from std::valarray
            * with empty range
            * iterator_input_adapter advances iterators correctly
        * error cases
            * case 1
            * case 2
            * case 3
            * case 4
            * case 5
            * case 6
            * case 7
            * case 8
            * case 9
            * case 10
            * case 11
            * case 12
            * case 13
            * case 14
            * case 15
            * case 16
    * ignoring byte-order marks
        * BOM only
        * BOM and content
        * 2 byte of BOM
        * 1 byte of BOM
        * variations
        * preserve state after parsing
    * SAX and early abort
    * JSON Lines
        * Example file
        * Example file without trailing newline
* deserialization of different character types (ASCII)
* deserialization of different character types (UTF-8)
* deserialization of different character types (UTF-16)
* deserialization of different character types (UTF-32)



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++20
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++20
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++20
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++20
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++20
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++20
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20


### List of tests in file unit-diagnostic-positions-only.cpp

* Better diagnostics with positions only
    * invalid type
    * invalid type without positions



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-diagnostic-positions.cpp

* Better diagnostics with positions
    * invalid type
    * invalid type without positions



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-diagnostics.cpp

* Better diagnostics
    * empty JSON Pointer
    * invalid type
    * missing key
    * array index out of range
    * array index at wrong type
    * wrong iterator
    * JSON Pointer escaping
    * Parse error
    * Wrong type in update()
* Regression tests for extended diagnostics
    * Regression test for https://github.com/nlohmann/json/pull/2562#pullrequestreview-574858448
    * Regression test for https://github.com/nlohmann/json/pull/2562/files/380a613f2b5d32425021129cd1f371ddcfd54ddf#r563259793
    * Regression test for issue #2838 - Assertion failure when inserting into arrays with JSON_DIAGNOSTICS set
    * Regression test for issue #2962 - JSON_DIAGNOSTICS assertion for ordered_json
    * Regression test for issue #3007 - Parent pointers properly set when using update()
    * Regression test for issue #3032 - Yet another assertion failure when inserting into arrays with JSON_DIAGNOSTICS set
    * Regression test for issue #3915 - JSON_DIAGNOSTICS trigger assertion



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-disabled_exceptions.cpp

* Tests with disabled exceptions
    * issue #2824 - encoding of json::exception::what()



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-element_access1.cpp

* element access 1
    * array
        * access specified element with bounds checking
            * access within bounds
            * access outside bounds
            * access on non-array type
                * null
                * boolean
                * string
                * object
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * front and back
        * access specified element
            * access within bounds
            * access on non-array type
                * null
                    * standard tests
                    * implicit transformation to properly filled array
                * boolean
                * string
                * object
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * remove specified element
            * remove element by index
            * remove element by iterator
                * erase(begin())
                * erase(begin(), end())
                * erase(begin(), begin())
                * erase at offset
                * erase subrange
                * different arrays
            * remove element by index in non-array type
                * null
                * boolean
                * string
                * object
                * number (integer)
                * number (unsigned)
                * number (floating-point)
    * other values
        * front and back
            * null
            * string
            * number (boolean)
            * number (integer)
            * number (unsigned)
            * number (floating point)
        * erase with one valid iterator
            * null
            * string
            * number (boolean)
            * number (integer)
            * number (unsigned)
            * number (floating point)
            * binary
        * erase with one invalid iterator
            * string
            * number (boolean)
            * number (integer)
            * number (unsigned)
            * number (floating point)
        * erase with two valid iterators
            * null
            * string
            * number (boolean)
            * number (integer)
            * number (unsigned)
            * number (floating point)
            * binary
        * erase with two invalid iterators
            * string
            * number (boolean)
            * number (integer)
            * number (unsigned)
            * number (floating point)



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-element_access2.cpp

* element access 2
    * object
        * access specified element with bounds checking
            * access within bounds
            * access outside bounds
            * access on non-object type
                * null
                * boolean
                * string
                * array
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * access specified element with default value
            * given a key
                * access existing value
                * access non-existing value
                * access on non-object type
                    * null
                    * boolean
                    * string
                    * array
                    * number (integer)
                    * number (unsigned)
                    * number (floating-point)
            * given a JSON pointer
                * access existing value
                * access on non-object type
                    * null
                    * boolean
                    * string
                    * array
                    * number (integer)
                    * number (unsigned)
                    * number (floating-point)
        * non-const operator[]
        * front and back
        * access specified element
            * access within bounds
            * access within bounds (string_view)
            * access on non-object type
                * null
                * boolean
                * string
                * array
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * remove specified element
            * remove element by key
            * remove element by key (string_view)
            * remove element by iterator
                * erase(begin())
                * erase(begin(), end())
                * erase(begin(), begin())
                * erase at offset
                * erase subrange
                * different objects
            * remove element by key in non-object type
                * null
                * boolean
                * string
                * array
                * number (integer)
                * number (floating-point)
        * find an element in an object
            * existing element
            * nonexisting element
            * all types
                * null
                * string
                * object
                * array
                * boolean
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * count keys in an object
            * existing element
            * nonexisting element
            * all types
                * null
                * string
                * object
                * array
                * boolean
                * number (integer)
                * number (unsigned)
                * number (floating-point)
        * check existence of key in an object
            * existing element
            * nonexisting element
            * all types
                * null
                * string
                * object
                * array
                * boolean
                * number (integer)
                * number (unsigned)
                * number (floating-point)
* element access 2 (throwing tests)
    * object
        * access specified element with default value
            * given a JSON pointer
                * access non-existing value
* element access 2 (additional value() tests)
    * deduced ValueType
        * literal key
        * const char * key
        * const char(&)[] key
        * string_t/object_t::key_type key
        * std::string_view key
    * explicit ValueType
        * literal key
        * const char * key
        * const char(&)[] key
        * string_t/object_t::key_type key
        * std::string_view key



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++14
* GNU 11.5.0 with standard gnu++17
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++14
* GNU 8.5.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 4.9.3 with standard gnu++11
* GNU 4.9.3 with standard gnu++14
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++14
* Clang 18.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++14
* GNU 12.5.0 with standard gnu++17
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++14
* GNU 10.5.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* Clang 20.1.8 with standard gnu++17
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++14
* GNU 9.5.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 6.4.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++14
* Clang 19.1.7 with standard gnu++17
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++14
* Clang 17.0.6 with standard gnu++17
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++14
* Intel 2021.5.0.20211109 with standard gnu++17
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++14
* GNU 7.5.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++14
* GNU 13.4.0 with standard gnu++17
* GNU 5.5.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* GNU 4.8.5 with standard gnu++14
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++17
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++14
* Linux-c++ with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++17


### List of tests in file unit-hash.cpp

* hash<nlohmann::json>
* hash<nlohmann::ordered_json>



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-inspection.cpp

* object inspection
    * convenience type checker
        * object
        * array
        * null
        * boolean
        * string
        * number (integer)
        * number (unsigned)
        * number (floating-point)
        * binary
        * discarded
    * serialization
        * no indent / indent=-1
        * indent=0
        * indent=1, space='\t'
        * indent=4
        * indent=x
        * dump and floating-point numbers
        * dump and small floating-point numbers
        * dump and non-ASCII characters
        * dump with ensure_ascii and non-ASCII characters
        * full Unicode escaping to ASCII
            * parsing yields the same JSON value
            * dumping yields the same JSON text
        * serialization of discarded element
        * check that precision is reset after serialization
    * round trips
    * return the type of the object (explicit)
        * null
        * object
        * array
        * boolean
        * string
        * number (integer)
        * number (unsigned)
        * number (floating-point)
    * return the type of the object (implicit)
        * null
        * object
        * array
        * boolean
        * string
        * number (integer)
        * number (unsigned)
        * number (floating-point)
        * binary



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-items.cpp

* iterator_wrapper
    * object
        * value
        * reference
        * const value
        * const reference
    * const object
        * value
        * reference
        * const value
        * const reference
    * array
        * value
        * reference
        * const value
        * const reference
    * const array
        * value
        * reference
        * const value
        * const reference
    * primitive
        * value
        * reference
        * const value
        * const reference
    * const primitive
        * value
        * reference
        * const value
        * const reference
* items()
    * object
        * value
        * reference
        * const value
        * const reference
        * structured bindings
    * const object
        * value
        * reference
        * const value
        * const reference
    * array
        * value
        * reference
        * const value
        * const reference
    * const array
        * value
        * reference
        * const value
        * const reference
    * primitive
        * value
        * reference
        * const value
        * const reference
    * const primitive
        * value
        * reference
        * const value
        * const reference



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++17
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++17
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++17
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++17
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++17
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++17
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17


### List of tests in file unit-iterators1.cpp

* iterators 1
    * basic behavior
        * uninitialized
        * boolean
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * additional tests
                * !(begin != begin)
                * !(end != end)
                * begin < end
                * begin <= end
                * end > begin
                * end >= begin
                * end == end
                * end <= end
                * begin == begin
                * begin <= begin
                * begin >= begin
                * !(begin == end)
                * begin != end
                * begin+1 == end
                * begin == end-1
                * begin != end+1
                * end != end+1
                * begin+1 != begin+2
                * begin+1 < begin+2
                * begin+1 <= begin+2
                * end+1 != end+2
            * key/value
        * string
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * array
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * object
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * number (integer)
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * number (unsigned)
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * number (float)
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
        * null
            * json + begin/end
            * const json + begin/end
            * json + cbegin/cend
            * const json + cbegin/cend
            * json + rbegin/rend
            * json + crbegin/crend
            * const json + crbegin/crend
            * key/value
    * conversion from iterator to const iterator
        * boolean
        * string
        * array
        * object
        * number (integer)
        * number (unsigned)
        * number (float)
        * null



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-iterators2.cpp

* iterators 2
    * iterator comparisons
    * iterator arithmetic
        * addition and subtraction
            * object
            * array
            * null
            * value
        * subscript operator
            * object
            * array
            * null
            * value
    * reverse iterator comparisons
    * reverse iterator arithmetic
        * addition and subtraction
            * object
            * array
            * null
            * value
        * subscript operator
            * object
            * array
            * null
            * value
    * ranges
        * concepts
        * algorithms
            * copy
            * find_if
        * views
            * reverse
            * transform



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++20
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++20
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++20
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++20
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++20
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++20
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20


### List of tests in file unit-iterators3.cpp

* checking forward-iterators



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++14
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 4.9.3 with standard gnu++11
* GNU 4.9.3 with standard gnu++14
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++14
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++14
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++14
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 6.4.0 with standard gnu++14
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++14
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++14
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++14
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++14
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++14
* GNU 5.5.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* GNU 4.8.5 with standard gnu++14
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++14
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++14
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++14


### List of tests in file unit-json_patch.cpp

* JSON patch
    * examples from RFC 6902
        * 4. Operations
        * 4.1 add
        * 4.2 remove
        * A.1. Adding an Object Member
        * A.2. Adding an Array Element
        * A.3. Removing an Object Member
        * A.4. Removing an Array Element
        * A.5. Replacing a Value
        * A.6. Moving a Value
        * A.7. Moving a Value
        * A.8. Testing a Value: Success
        * A.9. Testing a Value: Error
        * A.10. Adding a Nested Member Object
        * A.11. Ignoring Unrecognized Elements
        * A.12. Adding to a Nonexistent Target
        * A.14. Escape Ordering
        * A.15. Comparing Strings and Numbers
        * A.16. Adding an Array Value
    * own examples
        * add
            * add to the root element
            * add to end of the array
        * copy
        * replace
        * documentation GIF
    * errors
        * unknown operation
            * not an array
            * not an array of objects
            * missing 'op'
            * non-string 'op'
            * invalid operation
        * add
            * missing 'path'
            * non-string 'path'
            * missing 'value'
            * invalid array index
        * remove
            * missing 'path'
            * non-string 'path'
            * nonexisting target location (array)
            * nonexisting target location (object)
            * root element as target location
        * replace
            * missing 'path'
            * non-string 'path'
            * missing 'value'
            * nonexisting target location (array)
            * nonexisting target location (object)
        * move
            * missing 'path'
            * non-string 'path'
            * missing 'from'
            * non-string 'from'
            * nonexisting from location (array)
            * nonexisting from location (object)
        * copy
            * missing 'path'
            * non-string 'path'
            * missing 'from'
            * non-string 'from'
            * nonexisting from location (array)
            * nonexisting from location (object)
        * test
            * missing 'path'
            * non-string 'path'
            * missing 'value'
    * Examples from jsonpatch.com
        * Simple Example
        * Operations
            * add
            * remove
            * replace
            * copy
            * move
            * test
    * Examples from bruth.github.io/jsonpatch-js
        * add
        * remove
        * replace
        * move
        * copy
        * copy
    * Tests from github.com/json-patch/json-patch-tests



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-json_pointer.cpp

* JSON pointers
    * errors
        * array index error
    * examples from RFC 6901
        * nonconst access
        * const access
        * user-defined string literal
    * array access
        * nonconst access
        * const access
    * flatten
    * string representation
    * conversion
        * array
        * object
    * empty, push, pop and parent
    * operators
    * equality comparison
        * exceptions
    * less-than comparison
    * usable as map key
    * backwards compatibility and mixing
        * equality comparison



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++20
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++20
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++20
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++20
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++20
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++20
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++20
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++20


### List of tests in file unit-large_json.cpp

* tests on very large JSONs
    * issue #1419 - Segmentation fault (stack overflow) due to unbounded recursion



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-literals.cpp

* accept
    * unicode
    * capitalisation
        * true
        * null
        * false
    * illegal literals
        * nil
        * truth
        * const
        * none
        * self
        * super
        * this
        * undefined
    * illegal literal numbers
        * inf
        * infinity
        * NaN
* parse
    * values
    * whitespace
    * capitalisation
        * true
        * null
        * false
    * illegal literals
        * nil
        * truth
        * const
        * none
        * self
        * super
        * this
        * undefined
    * illegal literal numbers
        * inf
        * infinity
        * NaN



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-locale-cpp.cpp

* locale-dependent test (LC_NUMERIC=C)
    * check if locale is properly set
    * parsing
    * SAX parsing
* locale-dependent test (LC_NUMERIC=de_DE)
    * check if locale is properly set
    * parsing
    * SAX parsing



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-merge_patch.cpp

* JSON Merge Patch
    * examples from RFC 7396
        * Section 1
        * Section 3
        * Appendix A
            * Example 1
            * Example 2
            * Example 3
            * Example 4
            * Example 5
            * Example 6
            * Example 7
            * Example 8
            * Example 9
            * Example 10
            * Example 11
            * Example 12
            * Example 13
            * Example 14
            * Example 15



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-meta.cpp

* version information
    * meta()



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-modifiers.cpp

* modifiers
    * clear()
        * boolean
        * string
        * array
            * empty array
            * filled array
        * object
            * empty object
            * filled object
        * binary
            * empty binary
            * filled binary
        * number (integer)
        * number (unsigned)
        * number (float)
        * null
    * push_back()
        * to array
            * json&&
                * null
                * array
                * other type
            * const json&
                * null
                * array
                * other type
        * to object
            * null
            * object
            * other type
        * with initializer_list
            * null
            * array
            * object
    * emplace_back()
        * to array
            * null
            * array
            * multiple values
        * other type
    * emplace()
        * to object
            * null
            * object
        * other type
    * operator+=
        * to array
            * json&&
                * null
                * array
                * other type
            * const json&
                * null
                * array
                * other type
        * to object
            * null
            * object
            * other type
        * with initializer_list
            * null
            * array
            * object
    * insert()
        * value at position
            * insert before begin()
            * insert in the middle
            * insert before end()
        * rvalue at position
            * insert before begin()
            * insert in the middle
            * insert before end()
        * copies at position
            * insert before begin()
            * insert in the middle
            * insert before end()
            * insert nothing (count = 0)
        * range for array
            * proper usage
            * empty range
            * invalid iterators
        * range for object
            * proper usage
            * empty range
            * invalid iterators
        * initializer list at position
            * insert before begin()
            * insert in the middle
            * insert before end()
        * invalid iterator
        * non-array type
    * update()
        * non-recursive (default)
            * const reference
                * proper usage
                * wrong types
            * iterator range
                * proper usage
                * empty range
                * invalid iterators
        * recursive
            * const reference
                * extend object
                * replace object
    * swap()
        * json
            * member swap
            * nonmember swap
        * array_t
            * array_t type
            * non-array_t type
        * object_t
            * object_t type
            * non-object_t type
        * string_t
            * string_t type
            * non-string_t type
        * binary_t
            * binary_t type
            * binary_t::container_type type
            * non-binary_t type



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-msgpack.cpp

* MessagePack
    * individual values
        * discarded
        * null
        * boolean
            * true
            * false
        * number
            * signed
                * -32..-1 (negative fixnum)
                * 0..127 (positive fixnum)
                * 128..255 (int 8)
                * 256..65535 (int 16)
                * 65536..4294967295 (int 32)
                * 4294967296..9223372036854775807 (int 64)
                * -128..-33 (int 8)
                * -9263 (int 16)
                * -32768..-129 (int 16)
                * -32769..-2147483648
                * -9223372036854775808..-2147483649 (int 64)
            * unsigned
                * 0..127 (positive fixnum)
                * 128..255 (uint 8)
                * 256..65535 (uint 16)
                * 65536..4294967295 (uint 32)
                * 4294967296..18446744073709551615 (uint 64)
            * float
                * 3.1415925
                * 1.0
                * 128.128
        * string
            * N = 0..31
            * N = 32..255
            * N = 256..65535
            * N = 65536..4294967295
        * array
            * empty
            * [null]
            * [1,2,3,4,5]
            * [[[[]]]]
            * array 16
            * array 32
        * object
            * empty
            * {\
            * {\
            * map 16
            * map 32
        * extension
            * N = 0..255
            * N = 256..65535
            * N = 65536..4294967295
        * binary
            * N = 0..255
            * N = 256..65535
            * N = 65536..4294967295
    * from float32
    * errors
        * empty byte vector
        * too short byte vector
        * unexpected end inside int with stream
        * misuse wchar for binary
        * unsupported bytes
            * concrete examples
            * all unsupported bytes
        * invalid string in map
        * strict mode
            * non-strict mode
            * strict mode
    * SAX aborts
        * start_array(len)
        * start_object(len)
        * key()
* single MessagePack roundtrip
    * sample.json
        * roundtrips
            * std::ostringstream
            * std::string
* MessagePack roundtrips
    * input from msgpack-python



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-no-mem-leak-on-adl-serialize.cpp

* check_for_mem_leak_on_adl_to_json-1
* check_for_mem_leak_on_adl_to_json-2
* check_for_mem_leak_on_adl_to_json-2



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-noexcept.cpp

* noexcept
    * nothrow-copy-constructible exceptions



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-numbers.cpp

* accept
    * exponents
        * U+0425
        * U+0436
        * leading zeroes
    * operators
        * plus
        * minus
        * brackets
        * factorial
        * multiplication
        * division
        * comma
    * whitespace
        * space
        * tab
        * new line
        * Carriage return
        * Leading and tailing
            * space
            * tab
            * newline
            * Carriage return
            * Mixed
    * Leading zeroes
    * bases
        * Octal
        * Hexadecimal
* parse
    * exponents
        * U+0425
        * U+0436
        * leading zeroes
        * leading plus
        * Capitalisation
    * operators
        * plus
        * minus
        * brackets
        * factorial
        * multiplication
        * division
        * comma
    * trailing zeroes
    * whitespace
    * invalid whitespace
        * space
        * tab
        * new line
        * Carriage return
    * Leading zeroes
    * Precision



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-objects.cpp

* accept
    * names
        * numbers
        * arrays
        * objects
        * literals
        * strings
            * control characters
            * unicode
            * escaped UTF-16 surrogates
    * whitespace
        * empty object
        * non-empty object
    * member separator
* parse
    * whitespace
        * empty object
        * non-empty object
    * member separator
    * names
        * numbers
        * arrays
        * objects
        * literals
    * duplicate names
        * 100,000 identical keys
        * first and last key duplicate



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-ordered_json.cpp

* ordered_json



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-ordered_map.cpp

* ordered_map
    * constructor
        * constructor from iterator range
        * copy assignment
    * at
        * with Key&&
        * with const Key&&
        * with string literal
    * operator[]
        * with Key&&
        * with const Key&&
        * with string literal
    * erase
        * with Key&&
        * with const Key&&
        * with string literal
        * with iterator
        * with iterator pair
            * range in the middle
            * range at the beginning
            * range at the end
    * count
    * find
    * insert
        * const value_type&
        * value_type&&



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-pointer_access.cpp

* pointer access
    * pointer access to object_t
    * pointer access to const object_t
    * pointer access to array_t
    * pointer access to const array_t
    * pointer access to string_t
    * pointer access to const string_t
    * pointer access to boolean_t
    * pointer access to const boolean_t
    * pointer access to number_integer_t
    * pointer access to const number_integer_t
    * pointer access to number_unsigned_t
    * pointer access to const number_unsigned_t
    * pointer access to number_float_t
    * pointer access to const number_float_t
    * pointer access to const binary_t
    * pointer access to const binary_t



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-readme.cpp

* README



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-reference_access.cpp

* reference access
    * reference access to object_t
    * const reference access to const object_t
    * reference access to array_t
    * reference access to string_t
    * reference access to boolean_t
    * reference access to number_integer_t
    * reference access to number_unsigned_t
    * reference access to number_float_t



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-regression1.cpp

* regression tests 1
    * issue #60 - Double quotation mark is not parsed correctly
        * escape_doublequote
    * issue #70 - Handle infinity and NaN cases
        * NAN value
        * infinity
        * NAN value
        * infinity
    * pull request #71 - handle enum type
    * issue #76 - dump() / parse() not idempotent
    * issue #82 - lexer::get_number return NAN
    * issue #89 - nonstandard integer type
    * issue #93 reverse_iterator operator inheritance problem
    * issue #100 - failed to iterator json object with reverse_iterator
    * issue #101 - binary string causes numbers to be dumped as hex
    * issue #111 - subsequent unicode chars
    * issue #144 - implicit assignment to std::string fails
    * issue #146 - character following a surrogate pair is skipped
    * issue #171 - Cannot index by key of type static constexpr const char*
    * issue #186 miloyip/nativejson-benchmark: floating-point parsing
    * issue #228 - double values are serialized with commas as decimal points
    * issue #378 - locale-independent num-to-str
    * issue #379 - locale-independent str-to-num
    * issue #233 - Can't use basic_json::iterator as a base iterator for std::move_iterator
    * issue #235 - ambiguous overload for 'push_back' and 'operator+='
    * issue #269 - diff generates incorrect patch when removing multiple array elements
    * issue #283 - value() does not work with _json_pointer types
    * issue #304 - Unused variable warning
    * issue #306 - Parsing fails without space at end of file
    * issue #310 - make json_benchmarks no longer working in 2.0.4
    * issue #323 - add nested object capabilities to pointers
    * issue #329 - serialized value not always can be parsed
    * issue #360 - Loss of precision when serializing <double>
    * issue #366 - json::parse on failed stream gets stuck
    * issue #367 - calling stream at EOF
    * issue #367 - behavior of operator>> should more closely resemble that of built-in overloads
        * (empty)
        * (whitespace)
        * one value
        * one value + whitespace
        * whitespace + one value
        * three values
        * literals without whitespace
        * example from #529
        * second example from #529
    * issue #389 - Integer-overflow (OSS-Fuzz issue 267)
    * issue #380 - bug in overflow detection when parsing integers
    * issue #405 - Heap-buffer-overflow (OSS-Fuzz issue 342)
    * issue #407 - Heap-buffer-overflow (OSS-Fuzz issue 343)
    * issue #408 - Heap-buffer-overflow (OSS-Fuzz issue 344)
    * issue #411 - Heap-buffer-overflow (OSS-Fuzz issue 366)
    * issue #412 - Heap-buffer-overflow (OSS-Fuzz issue 367)
    * issue #414 - compare with literal 0)
    * issue #416 - Use-of-uninitialized-value (OSS-Fuzz issue 377)
    * issue #452 - Heap-buffer-overflow (OSS-Fuzz issue 585)
    * issue #454 - doubles are printed as integers
    * issue #464 - VS2017 implicit to std::string conversion fix
    * issue #465 - roundtrip error while parsing 1000000000000000010E5
    * issue #473 - inconsistent behavior in conversion to array type
        * std::vector
        * std::list
        * std::forward_list
    * issue #486 - json::value_t can't be a map's key type in VC++ 2015
    * issue #494 - conversion from vector<bool> to json fails to build
    * issue #504 - assertion error (OSS-Fuzz 856)
    * issue #512 - use of overloaded operator '<=' is ambiguous
    * issue #575 - heap-buffer-overflow (OSS-Fuzz 1400)
    * issue #600 - how does one convert a map in Json back to std::map?
        * example 1
        * example 2
    * issue #602 - BOM not skipped when using json:parse(iterator)
    * issue #702 - conversion from valarray<double> to json fails to build
        * original example
        * full example
    * issue #367 - Behavior of operator>> should more closely resemble that of built-in overloads.
        * example 1
    * issue #714 - throw std::ios_base::failure exception when failbit set to true
    * issue #805 - copy constructor is used with std::initializer_list constructor.
    * issue #838 - incorrect parse error with binary data in keys
    * issue #843 - converting to array not working
    * issue #894 - invalid RFC6902 copy operation succeeds
    * issue #961 - incorrect parsing of indefinite length CBOR strings
    * issue #962 - Timeout (OSS-Fuzz 6034)
    * issue #971 - Add a SAX parser - late bug
    * issue #972 - Segmentation fault on G++ when trying to assign json string literal to custom json type
    * issue #977 - Assigning between different json types
* regression tests, exceptions dependent
    * issue #1340 - eof not set on exhausted input stream



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++17
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++17
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++17
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++17
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++17
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++17
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++17
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17


### List of tests in file unit-regression2.cpp

* regression tests 2
    * issue #1001 - Fix memory leak during parser callback
    * issue #1021 - to/from_msgpack only works with standard typization
    * issue #1045 - Using STL algorithms with JSON containers with expected results?
    * issue #1292 - Serializing std::variant causes stack overflow
    * issue #1299 - compile error in from_json converting to container 
    * issue #1445 - buffer overflow in dumping invalid utf-8 strings
        * a bunch of -1, ensure_ascii=true
        * a bunch of -2, ensure_ascii=false
        * test case in issue #1445
    * issue #1447 - Integer Overflow (OSS-Fuzz 12506)
    * issue #1708 - minimum value of int64_t can be outputted
    * issue #1727 - Contains with non-const lvalue json_pointer picks the wrong overload
    * issue #1647 - compile error when deserializing enum if both non-default from_json and non-member operator== exists for other type
    * issue #1715 - json::from_cbor does not respect allow_exceptions = false when input is string literal
        * string literal
        * string array
        * std::string
    * issue #1805 - A pair<T1, T2> is json constructible only if T1 and T2 are json constructible
    * issue #1825 - A tuple<Args..> is json constructible only if all T in Args are json constructible
    * issue #1983 - JSON patch diff for op=add formation is not as per standard (RFC 6902)
    * issue #2067 - cannot serialize binary data to text JSON
    * PR #2181 - regression bug with lvalue
    * issue #2293 - eof doesn't cause parsing to stop
    * issue #2315 - json.update and vector<pair>does not work with ordered_json
    * issue #2330 - ignore_comment=true fails on multiple consecutive lines starting with comments
    * issue #2546 - parsing containers of std::byte
    * issue #2574 - Deserialization to std::array, std::pair, and std::tuple with non-default constructable types fails
        * std::array
        * std::pair
        * std::tuple
    * issue #4530 - Serialization of empty tuple
    * issue #2865 - ASAN detects memory leaks
    * issue #2824 - encoding of json::exception::what()
    * issue #2825 - Properly constrain the basic_json conversion operator
    * issue #2958 - Inserting in unordered json using a pointer retains the leading slash
    * issue #2982 - to_{binary format} does not provide a mechanism for specifying a custom allocator for the returned type
    * issue #3070 - Version 3.10.3 breaks backward-compatibility with 3.10.2 
    * issue #3077 - explicit constructor with default does not compile
    * issue #3108 - ordered_json doesn't support range based erase
    * issue #3343 - json and ordered_json are not interchangeable
    * issue #3171 - if class is_constructible from std::string wrong from_json overload is being selected, compilation failed
    * issue #3312 - Parse to custom class from unordered_json breaks on G++11.2.0 with C++20
    * issue #3428 - Error occurred when converting nlohmann::json to std::any
    * issue #3204 - ambiguous regression
    * issue #3333 - Ambiguous conversion from nlohmann::basic_json<> to custom class
    * issue #3810 - ordered_json doesn't support construction from C array of custom type



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* GNU 11.5.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++17
* GNU 11.5.0 with standard gnu++20
* GNU 8.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* Clang 18.1.8 with standard gnu++17
* Clang 18.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* GNU 14.3.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 12.5.0 with standard gnu++17
* GNU 12.5.0 with standard gnu++20
* GNU 10.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++17
* GNU 10.5.0 with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* Clang 20.1.8 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* GNU 9.5.0 with standard gnu++11
* GNU 9.5.0 with standard gnu++17
* GNU 9.5.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 19.1.7 with standard gnu++17
* Clang 19.1.7 with standard gnu++20
* Clang 17.0.6 with standard gnu++11
* Clang 17.0.6 with standard gnu++17
* Clang 17.0.6 with standard gnu++20
* Intel 2021.5.0.20211109 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++17
* Intel 2021.5.0.20211109 with standard gnu++20
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 7.5.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++17
* GNU 13.4.0 with standard gnu++20
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++17
* GNU 9.4.0 with standard gnu++20
* Linux-c++ with standard gnu++11
* Linux-c++ with standard gnu++17
* Linux-c++ with standard gnu++20
* GNU 13.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++17
* GNU 13.3.0 with standard gnu++20


### List of tests in file unit-serialization.cpp

* serialization
    * operator<<
        * no given width
        * given width
        * given fill
    * operator>>
        * no given width
        * given width
        * given fill
    * dump
        * invalid character
        * ending with incomplete character
        * unexpected character
        * U+FFFD Substitution of Maximal Subparts
    * to_string
* serialization for extreme integer values
    * minimum
    * maximum
* dump with binary values
    * normal
    * pretty-printed



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-strings.cpp

* accept
    * noncharacter code positions
    * overlong sequences
        * Examples of an overlong ASCII character
        * Maximum overlong sequences
        * Overlong representation of the NUL character
    * malformed sequences
        * Unexpected continuation bytes
        * Lonely start characters
        * Sequences with last continuation byte missing
        * Concatenation of incomplete sequences
        * Impossible bytes
* Unicode
    * escaped unicode
    * unescaped unicode
    * escaped utf-16 surrogates
        * well-formed
        * ill-formed
* parse
    * whitespace



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-testsuites.cpp

* compliance tests from json.org
    * expected failures
    * no failures with trailing literals (relaxed)
    * expected passes
* compliance tests from nativejson-benchmark
    * doubles
    * strings
    * roundtrip
* test suite from json-test-suite
    * read all sample.json
* json.org examples
    * 1.json
    * 2.json
    * 3.json
    * 4.json
    * 5.json
    * FILE 1.json
    * FILE 2.json
    * FILE 3.json
    * FILE 4.json
    * FILE 5.json
* RFC 8259 examples
    * 7. Strings
    * 8.3 String Comparison
    * 13 Examples
* nst's JSONTestSuite
    * test_parsing
        * y
        * n
        * n -> y (relaxed)
        * i -> y
        * i/y -> n (out of range)
        * i -> n
* nst's JSONTestSuite (2)
    * test_parsing
        * y
        * n
        * n (previously overflowed)
        * i -> y
        * i -> n
* Big List of Naughty Strings
    * parsing blns.json
    * roundtripping



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-to_chars.cpp

* digit gen
    * single precision
    * double precision
* formatting
    * single precision
    * double precision
    * integer



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-type_traits.cpp

* type traits
    * is_c_string
        * char *
        * char[]



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-ubjson.cpp

* UBJSON
    * individual values
        * discarded
        * null
        * boolean
            * true
            * false
        * number
            * signed
                * -9223372036854775808..-2147483649 (int64)
                * -2147483648..-32769 (int32)
                * -32768..-129 (int16)
                * -9263 (int16)
                * -128..-1 (int8)
                * 0..127 (int8)
                * 128..255 (uint8)
                * 256..32767 (int16)
                * 65536..2147483647 (int32)
                * 2147483648..9223372036854775807 (int64)
            * unsigned
                * 0..127 (int8)
                * 128..255 (uint8)
                * 256..32767 (int16)
                * 65536..2147483647 (int32)
                * 2147483648..9223372036854775807 (int64)
            * float64
                * 3.1415925
            * high-precision number
                * unsigned integer number
                * signed integer number
                * floating-point number
                * errors
                * serialization
        * string
            * N = 0..127
            * N = 128..255
            * N = 256..32767
            * N = 65536..2147483647
        * binary
            * N = 0..127
            * N = 128..255
            * N = 256..32767
            * N = 32768..2147483647
            * Other Serializations
                * No Count No Type
                * Yes Count No Type
        * array
            * empty
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * [null]
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * [1,2,3,4,5]
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * [[[[]]]]
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * array with uint16_t elements
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * array with uint32_t elements
                * size=false type=false
                * size=true type=false
                * size=true type=true
        * object
            * empty
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * {\
                * size=false type=false
                * size=true type=false
                * size=true type=true
            * {\
                * size=false type=false
                * size=true type=false
                * size=true type=true
    * errors
        * strict mode
            * non-strict mode
            * strict mode
        * excessive size
            * array
            * object
    * SAX aborts
        * start_array()
        * start_object()
        * key() in object
        * start_array(len)
        * start_object(len)
        * key() in object with length
    * parsing values
        * strings
        * number
            * float
        * array
            * optimized version (length only)
            * optimized version (type and length)
    * parse errors
        * empty byte vector
        * char
            * eof after C byte
            * byte out of range
        * strings
            * eof after S byte
            * invalid byte
        * array
            * optimized array: no size following type
        * strings
        * sizes
        * types
        * arrays
        * objects
    * writing optimized values
        * integer
            * array of i
            * array of U
            * array of I
            * array of l
            * array of L
        * unsigned integer
            * array of i
            * array of U
            * array of I
            * array of l
            * array of L
        * discarded
* Universal Binary JSON Specification Examples 1
    * Null Value
    * No-Op Value
    * Boolean Types
    * Numeric Types
    * Char Type
    * String Type
        * English
        * Russian
        * Russian
    * Array Type
        * size=false type=false
        * size=true type=false
        * size=true type=true
    * Object Type
        * size=false type=false
        * size=true type=false
        * size=true type=true
    * Optimized Format
        * Array Example
            * No Optimization
            * Optimized with count
            * Optimized with type & count
        * Object Example
            * No Optimization
            * Optimized with count
            * Optimized with type & count
        * Special Cases (Null, No-Op and Boolean)
            * Array
            * Object
* all UBJSON first bytes
* UBJSON roundtrips
    * input from self-generated UBJSON files



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using GNU 11.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 8.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.9.3 with standard gnu++11
* 1 test case was skipped when using Clang 18.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 12.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 10.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 9.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 6.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 19.1.7 with standard gnu++11
* 1 test case was skipped when using Clang 17.0.6 with standard gnu++11
* 1 test case was skipped when using Intel 2021.5.0.20211109 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 7.5.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.4.0 with standard gnu++11
* 1 test case was skipped when using GNU 5.5.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 4.8.5 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-udl.cpp

* user-defined string literals
    * using namespace nlohmann::literals::json_literals
    * using namespace nlohmann::json_literals
    * using namespace nlohmann::literals
    * using namespace nlohmann
    * global namespace



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-udt.cpp

* basic usage
    * conversion to json via free-functions
    * conversion from json via free-functions
        * via explicit calls to get
        * via explicit calls to get_to
        * implicit conversions
* adl_serializer specialization
    * partial specialization
        * to_json
        * from_json
    * total specialization
        * to_json
        * from_json
* even supported types can be specialized
* Non-copyable types
    * to_json
    * from_json
* custom serializer for pods
* custom serializer that does adl by default
* different basic_json types conversions
    * null
    * boolean
    * discarded
    * array
    * integer
    * float
    * unsigned
    * string
    * binary
    * object
    * get<custom_json>
* an incomplete type does not trigger a compiler error in non-evaluated context
* Issue #924
* Issue #1237
* compatible array type, without iterator type alias



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-udt_macro.cpp

* Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
    * person
* Serialization/deserialization via NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE and NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE
    * person
* Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    * person with default values
* Serialization/deserialization via NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    * derived person with default values
* Serialization/deserialization of classes with 26 public/private member variables via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
    * alphabet
* Serialization of non-default-constructible classes via NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    * person
* Serialization of non-default-constructible classes via NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE and NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    * derived person only serialize



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-unicode1.cpp

* Unicode (1/5)
    * \\uxxxx sequences
        * correct sequences
        * incorrect sequences
            * incorrect surrogate values
        * incorrect sequences
            * high surrogate without low surrogate
            * high surrogate with wrong low surrogate
            * low surrogate without high surrogate
    * read all unicode characters
        * check JSON Pointers
    * ignore byte-order-mark
        * in a stream
        * with an iterator
    * error for incomplete/wrong BOM
* Markus Kuhn's UTF-8 decoder capability and stress test
    * 1  Some correct UTF-8 text
    * 2  Boundary condition test cases
        * 2.1  First possible sequence of a certain length
        * 2.2  Last possible sequence of a certain length
        * 2.3  Other boundary conditions
    * 3  Malformed sequences
        * 3.1  Unexpected continuation bytes
        * 3.2  Lonely start characters
        * 3.3  Sequences with last continuation byte missing
        * 3.4  Concatenation of incomplete sequences
        * 3.5  Impossible bytes
    * 4  Overlong sequences
        * 4.1  Examples of an overlong ASCII character
        * 4.2  Maximum overlong sequences
        * 4.3  Overlong representation of the NUL character
    * 5  Illegal code positions
        * 5.1 Single UTF-16 surrogates
        * 5.2 Paired UTF-16 surrogates
        * 5.3 Noncharacter code positions



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-unicode2.cpp

* Unicode (2/5)
    * RFC 3629
        * ill-formed first byte
        * UTF8-1 (x00-x7F)
            * well-formed
        * UTF8-2 (xC2-xDF UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: wrong second byte
        * UTF8-3 (xE0 xA0-BF UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
        * UTF8-3 (xE1-xEC UTF8-tail UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
        * UTF8-3 (xED x80-9F UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
        * UTF8-3 (xEE-xEF UTF8-tail UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-unicode3.cpp

* Unicode (3/5)
    * RFC 3629
        * UTF8-4 (xF0 x90-BF UTF8-tail UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: missing fourth byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
            * ill-formed: wrong fourth byte



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-unicode4.cpp

* Unicode (4/5)
    * RFC 3629
        * UTF8-4 (xF1-F3 UTF8-tail UTF8-tail UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: missing fourth byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
            * ill-formed: wrong fourth byte



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-unicode5.cpp

* Unicode (5/5)
    * RFC 3629
        * UTF8-4 (xF4 x80-8F UTF8-tail UTF8-tail)
            * well-formed
            * ill-formed: missing second byte
            * ill-formed: missing third byte
            * ill-formed: missing fourth byte
            * ill-formed: wrong second byte
            * ill-formed: wrong third byte
            * ill-formed: wrong fourth byte



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11

In the following configuration, however, some test-cases were skipped:

* 1 test case was skipped when using GNU 14.3.0 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using GNU 14.3.0 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++17
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++23
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++14
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++20
* 1 test case was skipped when using Clang 20.1.8 with standard gnu++11
* 1 test case was skipped when using GNU 9.4.0 with standard gnu++11
* 1 test case was skipped when using Linux-c++ with standard gnu++11
* 1 test case was skipped when using GNU 13.3.0 with standard gnu++11


### List of tests in file unit-user_defined_input.cpp

* Use arbitrary stdlib container
* Custom container non-member begin/end
* Custom container member begin/end
* Custom iterator



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-windows_h.cpp

* include windows.h



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11


### List of tests in file unit-wstring.cpp

* wide strings
    * std::wstring
    * invalid std::wstring
    * std::u16string
    * invalid std::u16string
    * std::u32string
    * invalid std::u32string



All tests in this file were run in the following configurations:

* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++20
* GNU 9.4.0 with standard gnu++11
* GNU 11.5.0 with standard gnu++11
* GNU 8.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++14
* GNU 9.4.0 with standard gnu++11
* GNU 4.9.3 with standard gnu++11
* Clang 18.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 14.3.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 12.5.0 with standard gnu++11
* GNU 10.5.0 with standard gnu++11
* GNU 13.3.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++11
* GNU 9.5.0 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++14
* Clang 20.1.8 with standard gnu++23
* GNU 6.4.0 with standard gnu++11
* GNU 14.3.0 with standard gnu++17
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++17
* Clang 19.1.7 with standard gnu++11
* Clang 17.0.6 with standard gnu++11
* Intel 2021.5.0.20211109 with standard gnu++11
* GNU 14.3.0 with standard gnu++23
* Clang 20.1.8 with standard gnu++17
* GNU 7.5.0 with standard gnu++11
* GNU 13.4.0 with standard gnu++11
* GNU 5.5.0 with standard gnu++11
* Clang 20.1.8 with standard gnu++23
* Clang 20.1.8 with standard gnu++14
* GNU 4.8.5 with standard gnu++11
* Clang 20.1.8 with standard gnu++20
* Clang 20.1.8 with standard gnu++11
* GNU 9.4.0 with standard gnu++11
* Linux-c++ with standard gnu++11
* GNU 13.3.0 with standard gnu++11

Fallacies:

None

Graph:

No Image

date-time

JLS-16

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-17 | Reviewed: ⨯ | Score: 0.0#

A github workflow calculates the fraction of expectations covered by tests in eclipse-score/inc_nlohmann_json (TODO).

Supported Requests:

Item

Summary

Score

Status

TA-ANALYSIS

Collected data from tests and monitoring of deployed software in eclipse-score/inc_nlohmann_json is analysed according to specified objectives.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-17

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-18 | Reviewed: ⨯ | Score: 0.0#

Results from tests are accurately captured.

Supported Requests:

Item

Summary

Score

Status

TA-DATA

Data in eclipse-score/inc_nlohmann_json is collected from tests, and from monitoring of deployed software, according to specified objectives.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • TSF/scripts/capture_test_data_memory_sensitive.py

import sys
import sqlite3
import os
import xml.etree.ElementTree as ET
import re
from datetime import datetime, timezone

def setup_environment_variables() -> dict[str, str]:
    # Retrieves and validates the necessary environment variables for GitHub workflows.
    # Raises a RuntimeError if any required variables are missing.
    required_vars = ["GITHUB_RUN_ID", "GITHUB_REPOSITORY", "GITHUB_RUN_ATTEMPT"]
    environment = {var: os.getenv(var) for var in required_vars}
    
    missing_vars = [var for var, value in environment.items() if not value]
    if missing_vars:
        raise RuntimeError(f"Missing required environment variables: {', '.join(missing_vars)}")
    
    return environment

def clean_test_case(testcase: str) -> tuple[str,str]:
    # This function expects a testcase of the form "testcase_name_cppxx".
    # It returns the tuple ["testcase_name","gnu++xx"].
    name, appendix = testcase.rsplit('_',1)
    return [name, "gnu++"+appendix.replace('cpp','')]

def read_result_table(input: list[str]) -> dict:
    """
    This function expects console output <system-out> of doctest.
    It is assumed that this has the following form
        <system-out>[doctest] doctest version is "2.4.11"
        [doctest] run with "--help" for options
        ===============================================================================
        [doctest] test cases:  1 |  1 passed | 0 failed | 0 skipped
        [doctest] assertions: 45 | 45 passed | 0 failed |
        [doctest] Status: SUCCESS!
        </system-out>
    It extracts the number of passed/failed/skipped test cases, and passed/skipped assertions.
    """
    metadata = dict()
    raw_data = input[0]
    data = re.findall(r'(\d+)\s+(passed|failed|skipped)\b', raw_data)
    if len(data) < 5:
        raise RuntimeError("Fatal Error: Received incomplete or wrong result table.")
    metadata["passed test cases"] = int(data[0][0])
    metadata["failed test cases"] = int(data[1][0])
    metadata["skipped test cases"] = int(data[2][0])
    metadata["passed assertions"] = int(data[3][0])
    metadata["failed assertions"] = int(data[4][0])
    return metadata


def get_metadata(testcase: ET.Element) -> dict:
    # expects testcase extracted from a junit xml-file as input
    # extracts the data interesting to us
    # Assumption of Use: before execution, it is checked if is_unit_test(testcase)==True
    metadata = dict()
    # from name both name of the test and C++ standard can be extracted
    unsplit_name = testcase.get("name", None)
    if unsplit_name is None:
        raise RuntimeError("Fatal error: Can not read name of test-case!")
    name, standard = clean_test_case(unsplit_name)
    metadata["name"] = name
    metadata["standard"] = standard
    metadata["execution time"] = float(testcase.get("time"))
    # results are not as easily extracted but must be processed further
    metadata = metadata | read_result_table(list(testcase.find("system-out").itertext()))
    return metadata

def is_unit_test(testcase: ET.Element) -> bool:
    # crude test if the element belongs to a unit-test
    return "_cpp" in testcase.get('name')

def get_all_xml_files(directory: str = '.') -> list[str]:
    # search the folder containing all the artifacts and list the paths of expected test-reports
    result = []
    try:
        content = os.listdir(directory)
    except FileNotFoundError as e:
        print(e)
        return result
    for entry in content:
        if os.path.isdir(directory+'/'+entry):
            result = result + get_all_xml_files(directory+'/'+entry)
        if entry.endswith('.xml'):
            file = directory+'/'+entry if directory != '.' else entry
            result.append(file)
    return result

def get_ctest_target(log_name: str) -> str:
    # extracts name of ctest target from junit log
    # log_name has the form "path/to/log/file/target_junit.xml", and target is expected
    log = log_name.split('/')[-1]
    return log.removesuffix("_junit.xml")

def find_most_recent_results(target: str, name: str, compiler: str, cpp_standard: str, database: sqlite3.Connection) -> list[int]:
    cursor = database.cursor()
    cursor.execute("""
                    WITH combination AS (
                        SELECT workflow_info.repo, workflow_info.run_id, workflow_info.run_attempt, workflow_info.time
                        FROM test_results INNER JOIN workflow_info ON
                        workflow_info.repo = test_results.repo 
                        AND workflow_info.run_id = test_results.run_id 
                        AND workflow_info.run_attempt = test_results.run_attempt
                        WHERE test_results.ctest_target = ? AND test_results.name = ? AND test_results.compiler = ? AND test_results.cpp_standard = ?
                    )
                    SELECT repo, run_id, run_attempt FROM combination
                    ORDER BY time DESC, run_id DESC, run_attempt DESC
                    LIMIT 1;
                    """,(target,name,compiler,cpp_standard))
    result = cursor.fetchone()
    if result is None:
        # if no recent run is found, data need to be stored
        return [] 
    repo, run_id, run_attempt = result
    cursor.execute("""
                    SELECT passed_cases, failed_cases, skipped_cases, passed_assertions, failed_assertions 
                    FROM test_results WHERE
                    ctest_target = ? AND name = ? AND compiler = ? AND cpp_standard = ? AND repo = ? AND run_id = ? AND run_attempt = ?
                    """, (target,name,compiler,cpp_standard,repo,run_id,run_attempt))
    result = cursor.fetchone()
    return [] if result is None else list(result)

##########################
# Below starts the script.
##########################

if __name__ == "__main__":

    # check if argument was delivered
    if len(sys.argv) != 2:
        raise RuntimeError("Expected status of workflow as argument. Aborting!")
    # expected argument: status of workflow
    # check if the argument has the expected form
    status = sys.argv[1]
    if status not in ["successful", "failed", "cancelled"]:
        raise RuntimeError("The input does not match the expected format! Permissible are 'successful', 'failed' and 'cancelled'. Aborting!")

    # get environment variables
    try:
        environment = setup_environment_variables()
    except RuntimeError as e:
        raise RuntimeError("Critical error: Can not uniquely identify environment data! Aborting recording of data.")
    
    # Step 1: store metadata of workflow run persistently

    # initiate connection to database
    connector = sqlite3.connect("TSF/MemoryEfficientTestResultData.db")
    connector.execute("PRAGMA foreign_keys = ON")

    # load expected tables
    # table workflow_info contains metadata of workflow and is updated every time
    command = (
        "CREATE TABLE IF NOT EXISTS workflow_info(",
        "repo TEXT, ",                              # repository
        "run_id INT, ",                             # ID of workflow run
        "run_attempt INT, ",                        # Attempt-number of workflow run
        "status TEXT ",                             # Termination-status of workflow                                         
        "CHECK(status IN ('successful', 'failed', 'cancelled')) DEFAULT 'failed', ",
        "time INT, ",                               # the time that is associated to this workflow run
        "PRIMARY KEY(repo, run_id, run_attempt))"
    )
    connector.execute(''.join(command))
    # table test_results contains detailed results for each individual test
    command = (
        "CREATE TABLE IF NOT EXISTS test_results(",
        "ctest_target TEXT, ",                      # name of the ctest target located in ci.cmake
        "name TEXT, ",                              # name of the test
        "execution_time REAL, ",                    # execution time in seconds
        "compiler TEXT, ",                          # compiler information
        "cpp_standard TEXT, ",                      # cpp-standard
        "passed_cases INT, ",                       # number of passed test-cases
        "failed_cases INT, ",                       # number of failed test-cases
        "skipped_cases INT, ",                      # number of skipped test-cases
        "passed_assertions INT, ",                  # number of passed assertions
        "failed_assertions INT, ",                  # number of failed assertions
        "repo TEXT, ",                              # repository
        "run_id INT, ",                             # ID of workflow run
        "run_attempt INT, ",                        # Attempt-number of workflow run
        "FOREIGN KEY(repo, run_id, run_attempt) REFERENCES workflow_info);"
        )
    connector.execute(''.join(command))
    cursor = connector.cursor()

    # Count number of rows as heuristic size-checker.
    # In case that the update-check fails, and every result is stored, allow for approximately 26 complete results to be stored
    cursor.execute("SELECT MAX(COALESCE((SELECT MAX(rowid) FROM workflow_info),0),COALESCE((SELECT MAX(rowid) FROM test_results),0));")
    if cursor.fetchone()[0] > 1e5:
        connector.close()
        raise RuntimeError("The persistent data storage is too large! Please move persistent data to external storage.")

    # fill in metadata
    # OBSERVE: This script expects the status of the github workflow as argument
    repo = environment.get('GITHUB_REPOSITORY')
    run_id = environment.get('GITHUB_RUN_ID')
    run_attempt = environment.get('GITHUB_RUN_ATTEMPT')
    time = int(datetime.now(timezone.utc).timestamp())
    command = "INSERT INTO workflow_info VALUES(?,?,?,?,?)"
    cursor.execute(command,(repo, run_id, run_attempt, status, time))
    # Don't forget to save!
    connector.commit()
    
    # Step 2: generate report of most recent test run and update persistent storage if necessary
    
    # initialise database connection
    conn = sqlite3.connect("MemoryEfficientTestResults.db")
    cur = conn.cursor()
    # add the expected table
    # the table TestResults.test_results differs from TestResultData.test_results in that the metadata of the commit are not saved.
    command = (
        "CREATE TABLE IF NOT EXISTS test_results(",
        "ctest_target TEXT, ",                      # name of the ctest target located in ci.cmake
        "name TEXT, ",                              # name of the test
        "execution_time REAL, ",                    # execution time in seconds
        "compiler TEXT, ",                          # compiler information
        "cpp_standard TEXT, ",                      # cpp-standard
        "passed_cases INT, ",                       # number of passed test-cases
        "failed_cases INT, ",                       # number of failed test-cases
        "skipped_cases INT, ",                      # number of skipped test-cases
        "passed_assertions INT, ",                  # number of passed assertions
        "failed_assertions INT",                    # number of failed assertions
        ")"
        )
    conn.execute(''.join(command))

    # Load my artifacts
    junit_logs = get_all_xml_files("./my_artifacts/")

    #extract data
    for junit_log in junit_logs:
        tree = ET.parse(junit_log)
        file_root = tree.getroot()
        testsuite = next(file_root.iter('testsuite'), None)
        if testsuite is None:
            print(f"Error: Could not find testsuite data in {junit_log}.")
            continue
        for testcase in (case for case in file_root.iter('testcase') if is_unit_test(case)):
            metadata = get_metadata(testcase)
            target = get_ctest_target(junit_log)
            compiler = testsuite.get('name')
            more_compiler_info = [case for case in file_root.iter('testcase') if case.get("name") == "cmake_target_include_directories_configure"]
            if len(more_compiler_info) != 0:
                compiler_information = more_compiler_info[0]
                information = list(compiler_information.find("system-out").itertext())[0].split('\n')[0]
                compiler = information.replace("-- The CXX compiler identification is ","")
            name = metadata.get('name')
            cpp_standard = metadata.get('standard')
            data = (
                        target,
                        name,
                        metadata.get('execution time'), 
                        compiler, 
                        cpp_standard, 
                        metadata.get('passed test cases'), 
                        metadata.get('failed test cases'), 
                        metadata.get('skipped test cases'), 
                        metadata.get('passed assertions'), 
                        metadata.get('failed assertions')
                    )
            command ="INSERT INTO test_results VALUES(?,?,?,?,?,?,?,?,?,?);"
            cur.execute(command, data)
            conn.commit()
            most_recently_stored_results = find_most_recent_results(target,name,compiler,cpp_standard,connector)
            current_results = [metadata.get('passed test cases'),metadata.get('failed test cases'),metadata.get('skipped test cases'),metadata.get('passed assertions'),metadata.get('failed assertions')]
            if (len(most_recently_stored_results) != 5) or any(most_recently_stored_results[i]!=current_results[i] for i in range(0,5)):
                data = data + (repo, run_id, run_attempt)
                command ="INSERT INTO test_results VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);"
                cursor.execute(command,data)

                
    # terminate connection to temporary database
    # don't forget to commit the changes
    conn.commit()
    conn.close()

    # terminate connection to persistent database
    # don't forget to commit the changes again, for good measure
    connector.commit()
    connector.close()

  • Description: This script extracts the test-results from the junit-files generated by ctest and writes these into a data-base.

  • .github/workflows/ubuntu.yml

name: Ubuntu

on:
  workflow_call:
    inputs:
      artifact_id:
        description: 'Unique identifier for artifacts'
        required: true
        type: string
        
permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  ci_test_gcc:
    runs-on: ubuntu-latest
    container: gcc:14
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_gcc
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_gcc_artefact
          path: build/my_logs/

  ci_infer:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_infer

  ci_static_analysis_ubuntu:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [ci_test_amalgamation, ci_test_single_header, ci_cppcheck, ci_cpplint, ci_reproducible_tests, ci_non_git_tests, ci_offline_testdata, ci_reuse_compliance, ci_test_valgrind]
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - name: Install Valgrind
        run: sudo apt-get update ; sudo apt-get install -y valgrind
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_reuse_compliance' && matrix.target != 'ci_cpplint' && matrix.target != 'ci_test_amalgamation' && matrix.target != 'ci_cppcheck' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_static_analysis_ubuntu_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_static_analysis_clang:
    runs-on: ubuntu-latest
    container: silkeh/clang:20
    strategy:
      matrix:
        target: [ci_test_clang, ci_clang_tidy, ci_test_clang_sanitizer, ci_clang_analyze, ci_single_binaries]
    steps:
      - name: Install git, clang-tools, iwyu (ci_single_binaries), and unzip
        run: apt-get update ; apt-get install -y git clang-tools iwyu unzip
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
      # The default C++ compiler in the docker image is clang++-14 which does not support all compiler flags
        run: cmake -S . -B build -DJSON_CI=On -DCLANG_TOOL=clang++-20
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_clang_analyze' && matrix.target != 'ci_single_binaries' && matrix.target != 'ci_clang_tidy' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_static_analysis_clang_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_cmake_options:
    runs-on: ubuntu-latest
    container: ubuntu:focal
    strategy:
      matrix:
        target: [ci_cmake_flags, ci_test_diagnostics, ci_test_diagnostic_positions, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison, ci_test_noglobaludls]
    steps:
      - name: Install build-essential
        run: apt-get update ; apt-get install -y build-essential unzip wget git libssl-dev
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_cmake_flags' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_cmake_options_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_test_coverage:
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Install dependencies and de_DE locale
        run: |
          sudo apt-get clean
          sudo apt-get update
          sudo apt-get install -y build-essential cmake lcov ninja-build make locales gcc-multilib g++-multilib
          sudo locale-gen de_DE
          sudo update-locale
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_coverage
      - name: Archive coverage report
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: code-coverage-report
          path: ${{ github.workspace }}/build/html
      - name: Publish report to Coveralls
        uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          path-to-lcov: ${{ github.workspace }}/build/json.info.filtered.noexcept
          fail-on-error: false # Do not fail the workflow if Coveralls fails
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_coverage_artefact
          path: build/my_logs/

  ci_test_compilers_gcc_old:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler: ['4.8', '4.9', '5', '6']
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: CXX=g++-${{ matrix.compiler }} cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_g++-${{ matrix.compiler }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_gcc_old_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_compilers_gcc:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # older GCC docker images (4, 5, 6) fail to check out code
        compiler: ['7', '8', '9', '10', '11', '12', '13', '14']
    container: gcc:${{ matrix.compiler }}
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_default
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_gcc_clang_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_compilers_clang:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler: ['17', '18', '19', '20']
    container: silkeh/clang:${{ matrix.compiler }}
    steps:
      - name: Install unzip and git
        run: apt-get update ; apt-get install -y unzip git
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Set env FORCE_STDCPPFS_FLAG for clang 7 / 8 / 9 / 10
        run: echo "JSON_FORCED_GLOBAL_COMPILE_OPTIONS=-DJSON_HAS_FILESYSTEM=0;-DJSON_HAS_EXPERIMENTAL_FILESYSTEM=0" >> "$GITHUB_ENV"
        if: ${{ matrix.compiler == '7' || matrix.compiler == '8' || matrix.compiler == '9' || matrix.compiler == '10' }}
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_default
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_clang_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_standards_gcc:
    runs-on: ubuntu-latest
    container: gcc:14.3
    strategy:
      matrix:
        standard: [11, 14, 17, 20, 23, 26]
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_gcc_cxx${{ matrix.standard }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_standards_gcc_artefact_${{ matrix.standard }}
          path: build/my_logs/

  ci_test_standards_clang:
    runs-on: ubuntu-latest
    container: silkeh/clang:20
    strategy:
      matrix:
        standard: [11, 14, 17, 20, 23, 26]
        stdlib: [libcxx, libstdcxx]
    steps:
      - name: Install git and unzip
        run: apt-get update ; apt-get install -y git unzip
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build with libc++
        run: cmake --build build --target ci_test_clang_libcxx_cxx${{ matrix.standard }}
        if: ${{ matrix.stdlib == 'libcxx' }}
      - name: Build with libstdc++
        run: cmake --build build --target ci_test_clang_cxx${{ matrix.standard }}
        if: ${{ matrix.stdlib == 'libstdcxx' }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_standards_clang_artefact_${{ matrix.stdlib }}_${{ matrix.standard }}
          path: build/my_logs/

  ci_cuda_example:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_cuda_example

  ci_icpc:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.2.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: |
          . /opt/intel/oneapi/setvars.sh
          cmake --build build --target ci_icpc
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_icpc_artefact
          path: build/my_logs/

  ci_test_documentation:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [ci_test_examples, ci_test_build_documentation]
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}

  publish_test_data_success:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: success()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py successful
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  publish_test_data_failure:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: failure()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py failed
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  publish_test_data_cancellation:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: cancelled()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py cancelled
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  ubuntu_artifact:
    runs-on: ubuntu-latest
    needs: [publish_test_data_success, publish_test_data_failure, publish_test_data_cancellation, ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: ${{ always() && (needs.publish_test_data_success.result == 'success' || needs.publish_test_data_failure.result == 'success' || needs.publish_test_data_cancellation.result == 'success') }}
    steps:
      - name: Download test report
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: publish_data_artifact

      - name: Generate ubuntu artifact
        run: |
          echo "Generating ubuntu artifact..."
          mkdir -p ubuntu
          if [ -f MemoryEfficientTestResults.db ]; then
            mv MemoryEfficientTestResults.db ubuntu/MemoryEfficientTestResults.db
          else
            echo "No test-results were captured."
          fi
          echo "ubuntu processed for ${{ inputs.artifact_id }}" > ubuntu/ubuntu.txt

      - name: Upload ubuntu artifact
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ${{ inputs.artifact_id }}
          path: ubuntu/
  • Description: This workflow runs the tests and generates test-reports as junit-files, which are given to the script capture_test_data.py.

Fallacies:

None

Graph:

No Image

date-time

JLS-18

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-19 | Reviewed: ⨯ | Score: 0.0#

All library components, build dependencies, and build tools in the nlohmann/json repository are declared in build system manifests.

Supported Requests:

Item

Summary

Score

Status

TA-ITERATIONS

All constructed iterations of the nlohmann/json library include source code, build instructions, tests, results and attestations.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/CMakeLists.txt

https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/CMakeLists.txt - CMake build manifest file

  • website: https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/BUILD.bazel

https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/BUILD.bazel - Bazel build manifest file

  • website: https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/meson.build

https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/meson.build - Meson build manifest file

  • website: https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/Package.swift

https://raw.githubusercontent.com/nlohmann/json/refs/heads/develop/Package.swift - Swift Package Manager manifest file

Fallacies:

None

Graph:

No Image

date-time

JLS-19

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-20 | Reviewed: ⨯ | Score: 0.0#

A github workflow of eclipse-score/inc_nlohmann_json saves the history of scores in the trustable graph to derive trends.

Supported Requests:

Item

Summary

Score

Status

TA-CONFIDENCE

Confidence in the nlohmann/json library is measured based on results of analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • .github/workflows/parent-workflow.yml

name: Parent Workflow

on: 
  pull_request:
  push: 
    branches:
      - main
  schedule:
    - cron: '0 0 * * *' # Runs daily at midnight UTC

permissions:
  contents: read

jobs:
  labeler:
    permissions:
      contents: read
      pages: write
      pull-requests: write
    name: Run Labeler Workflow
    uses: ./.github/workflows/labeler.yml
    with:
      artifact_id: "labeler-${{ github.sha }}"

  SME_review_checker:
    permissions:
      contents: read
      pull-requests: read
    name: Run SME_review_checker Workflow
    if: ${{ github.event_name == 'pull_request' }} # only run SME_review_checker for PRs
    uses: ./.github/workflows/SME_review_checker.yml
    with:
      artifact_id: "SME_review_checker-${{ github.sha }}"

  check_amalgamation:
    name: Run Amalgamation Workflow
    if: ${{ github.event_name == 'pull_request' }} # only run check_amalgamation for PRs
    uses: ./.github/workflows/check_amalgamation.yml
    with:
      artifact_id: "check_amalgamation-${{ github.sha }}"
      
  test_trudag_extensions:
    name: Run Test Trudag Extensions Workflow
    uses: ./.github/workflows/test_trudag_extensions.yml
    with:
      artifact_id: "test_trudag_extensions-${{ github.sha }}"

  codeql:
    permissions:
      contents: read
      security-events: write
    name: Run Codeql analysis Workflow
    uses: ./.github/workflows/codeql-analysis.yml
    with:
      artifact_id: "codeql-${{ github.sha }}"

  ubuntu:
    name: Run Ubuntu Workflow
    permissions:
      contents: write
    needs: [codeql] # Error if CodeQL and Ubuntu triggered at the same time due to conflicting priorities
    uses: ./.github/workflows/ubuntu.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"

  dependency_review:
    name: Run dependency_review Workflow
    if: ${{ github.event_name == 'pull_request' }}  # only run dependency_review for PRs
    uses: ./.github/workflows/dependency-review.yml
    with:
      artifact_id: "dependency_review-${{ github.sha }}"

  collect_artifacts_pr:
    name: "Collect Results & Deploy (PR)"
    if: github.event_name == 'pull_request'
    needs: [labeler, SME_review_checker, check_amalgamation, test_trudag_extensions, dependency_review, codeql, ubuntu]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [labeler, SME_review_checker, check_amalgamation, test_trudag_extensions, dependency_review, codeql, ubuntu]

    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Check child workflow results 
        run: |
          echo "=== Checking Child Workflow Results ==="
          result="${{ needs[matrix.target].result }}"
          echo "${{ matrix.target }} workflow result: $result"

          if [[ "$result" != "success" ]]; then
            echo "❌ ${{ matrix.target }} workflow failed! Exiting..."
            exit 1
          fi
          echo "✅ Child workflows completed successfully!" 
        env:
          current_workflow: ${{ matrix.target }}

      - name: Download artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: "${{ matrix.target }}-${{ github.sha }}"
          path: artifacts/

  collect_artifacts_non_pr:
    name: "Collect Results & Deploy (Non-PR)"
    if: github.event_name != 'pull_request'
    needs: [labeler, test_trudag_extensions, codeql, ubuntu]  # no check_amalgamation, dependency_review or SME_review_checker if non PR
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [labeler, test_trudag_extensions, codeql, ubuntu]

    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Check child workflow results 
        run: |
          echo "=== Checking Child Workflow Results ==="
          result="${{ needs[matrix.target].result }}"
          echo "${{ matrix.target }} workflow result: $result"

          if [[ "$result" != "success" ]]; then
            echo "❌ ${{ matrix.target }} workflow failed! Exiting..."
            exit 1
          fi
          echo "✅ Child workflows completed successfully!" 
        env:
          current_workflow: ${{ matrix.target }}

      - name: Download artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: "${{ matrix.target }}-${{ github.sha }}"
          path: artifacts/

  test_publish_documentation:
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write
      security-events: read
    name: Test publish_documentation Workflow
    if: github.event_name == 'pull_request'            # Whenever on Pull-request, test publication
    needs: [collect_artifacts_pr]
    uses: ./.github/workflows/test_publication.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"

  publish_documentation:
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write
      security-events: read
    name: Run publish_documentation Workflow
    if: github.event_name == 'push'            # Publish documentation should only run on push to main
    needs: [collect_artifacts_non_pr]
    uses: ./.github/workflows/publish_documentation.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"
  • Description: github workflow running on push to main and triggering the workflow publish_documentation

  • .github/workflows/publish_documentation.yml

# *******************************************************************************
# Copyright (c) 2025 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

name: Documentation

on:
  workflow_call:
    inputs:
      artifact_id:
        description: 'Unique identifier for artifacts to be loaded'
        required: true
        type: string

permissions:
  contents: read

jobs:
  run-trudag:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Load ubuntu-artifact
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: ${{ inputs.artifact_id }}
          path: artifacts/

      - name: Set up Python
        uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
        with:
          python-version: '3.11.2'

      # trudag version v2025.10.22
      - name: Install trudag and dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y graphviz
          pip install --upgrade pip
          pip install PyYAML requests
          pip install git+https://gitlab.com/CodethinkLabs/trustable/trustable@v2025.10.22

      - name: Install tools
        run: |
          sudo apt-get update
          sudo apt-get install -y jq
          sudo apt install gh -y

      - name: Authenticate with GitHub CLI
        run: |
          echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data

      - name: Fetch open issues labelled as bug from nlohmann/json
        id: fetch_issues
        run: |
          echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token

          # Define variables
          REPO="nlohmann/json" # Target repository
          OUTPUT_FILE="TSF/misbehaviours.md"

          # Check if the target repository is reachable
          if ! gh repo view "$REPO" --json name -q .name; then
            echo "Could not reach the target repository ($REPO). Aborting workflow."
            exit 1
          fi

          # Fetch open issues from the nlohmann/json repository
          gh issue list --repo "$REPO" --state open --limit 10000 --json number,title,state,createdAt,url,labels > raw_open_issues.json

          # Fetch closed issues from the nlohmann/json repository
          gh issue list --repo "$REPO" --state closed --limit 10000 --json number,title,state,createdAt,url,labels > raw_closed_issues.json

          # print the list of misbehaviours
          python3 TSF/scripts/generate_list_of_misbehaviours.py > $OUTPUT_FILE

          # Push misbehaviours file to save_historical_data branch
          git add TSF/misbehaviours.md
          git commit -m "Updated issues list" || echo "No changes to commit"
          git push origin save_historical_data && git pull
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/TrustableScoring.db | grep TSF/TrustableScoring.db; then
            mkdir -p TSF
            touch TSF/TrustableScoring.db
            git add TSF/TrustableScoring.db
            git commit -m "Initialise persistent data storage"
            git push origin save_historical_data
          fi
          git checkout $branch_name
          git checkout save_historical_data -- TSF/TrustableScoring.db

      - name: Generate trudag report
        run: |
          REPO_FULL="${{ github.repository }}"
          REPO_NAME="${REPO_FULL#*/}"
          OWNER_NAME="${REPO_FULL%%/*}" 
          TSF/scripts/generate_report.sh "https://${OWNER_NAME}.github.io/${REPO_NAME}/main"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Checkout data storage branch
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/TrustableScoring.db)
          git checkout save_historical_data
          git pull

      - name: Store persistent data
        run: |
          git add TSF/TrustableScoring.db
          git commit -m "Append data storage" || echo "Historical data already up to date."
          git push origin save_historical_data

      - name: Recover stash
        run: |
          git checkout $branch_name
          git stash apply

      - name: Upload trudag artifact
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: trudag-report-${{ github.sha }}
          path: TSF/docs/generated/
          if-no-files-found: error
          
  build-docs:
    needs: run-trudag
    # the eclipse-score/cicd-workflow docs.yml is adjusted to download the trudag report artifact before building the documentation
    uses: ./.github/workflows/docs.yml
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write

    with:
      # the bazel-target depends on your repo specific docs_targets configuration (e.g. "suffix")Add commentMore actions
      bazel-target: "//:docs -- --github_user=${{ github.repository_owner }} --github_repo=${{ github.event.repository.name }}"
      retention-days: 3
  • Description: github workflow executing calculation and storage of trustable scores

  • website: https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/TrustableScoring.db

https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/TrustableScoring.db - the database containing the trustable scores

Fallacies:

None

Graph:

No Image

date-time

JLS-20

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-21 | Reviewed: ⨯ | Score: 0.0#

A score is calculated based on the number of mirrored and unmirrored things. (TODO)

Supported Requests:

Item

Summary

Score

Status

TA-RELEASES

Construction of releases for the nlohmann/json library is fully repeatable and the results are fully reproducible, with any exceptions documented and justified.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-21

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-22 | Reviewed: ⨯ | Score: 0.0#

A github workflow of eclipse-score/inc_nlohmann_json executes the unit tests daily and saves the results as time-series data.

Supported Requests:

Item

Summary

Score

Status

TA-VALIDATION

All specified tests are executed repeatedly, under defined conditions in controlled environments, according to specified objectives. (To revisit)

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • .github/workflows/parent-workflow.yml

name: Parent Workflow

on: 
  pull_request:
  push: 
    branches:
      - main
  schedule:
    - cron: '0 0 * * *' # Runs daily at midnight UTC

permissions:
  contents: read

jobs:
  labeler:
    permissions:
      contents: read
      pages: write
      pull-requests: write
    name: Run Labeler Workflow
    uses: ./.github/workflows/labeler.yml
    with:
      artifact_id: "labeler-${{ github.sha }}"

  SME_review_checker:
    permissions:
      contents: read
      pull-requests: read
    name: Run SME_review_checker Workflow
    if: ${{ github.event_name == 'pull_request' }} # only run SME_review_checker for PRs
    uses: ./.github/workflows/SME_review_checker.yml
    with:
      artifact_id: "SME_review_checker-${{ github.sha }}"

  check_amalgamation:
    name: Run Amalgamation Workflow
    if: ${{ github.event_name == 'pull_request' }} # only run check_amalgamation for PRs
    uses: ./.github/workflows/check_amalgamation.yml
    with:
      artifact_id: "check_amalgamation-${{ github.sha }}"
      
  test_trudag_extensions:
    name: Run Test Trudag Extensions Workflow
    uses: ./.github/workflows/test_trudag_extensions.yml
    with:
      artifact_id: "test_trudag_extensions-${{ github.sha }}"

  codeql:
    permissions:
      contents: read
      security-events: write
    name: Run Codeql analysis Workflow
    uses: ./.github/workflows/codeql-analysis.yml
    with:
      artifact_id: "codeql-${{ github.sha }}"

  ubuntu:
    name: Run Ubuntu Workflow
    permissions:
      contents: write
    needs: [codeql] # Error if CodeQL and Ubuntu triggered at the same time due to conflicting priorities
    uses: ./.github/workflows/ubuntu.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"

  dependency_review:
    name: Run dependency_review Workflow
    if: ${{ github.event_name == 'pull_request' }}  # only run dependency_review for PRs
    uses: ./.github/workflows/dependency-review.yml
    with:
      artifact_id: "dependency_review-${{ github.sha }}"

  collect_artifacts_pr:
    name: "Collect Results & Deploy (PR)"
    if: github.event_name == 'pull_request'
    needs: [labeler, SME_review_checker, check_amalgamation, test_trudag_extensions, dependency_review, codeql, ubuntu]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [labeler, SME_review_checker, check_amalgamation, test_trudag_extensions, dependency_review, codeql, ubuntu]

    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Check child workflow results 
        run: |
          echo "=== Checking Child Workflow Results ==="
          result="${{ needs[matrix.target].result }}"
          echo "${{ matrix.target }} workflow result: $result"

          if [[ "$result" != "success" ]]; then
            echo "❌ ${{ matrix.target }} workflow failed! Exiting..."
            exit 1
          fi
          echo "✅ Child workflows completed successfully!" 
        env:
          current_workflow: ${{ matrix.target }}

      - name: Download artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: "${{ matrix.target }}-${{ github.sha }}"
          path: artifacts/

  collect_artifacts_non_pr:
    name: "Collect Results & Deploy (Non-PR)"
    if: github.event_name != 'pull_request'
    needs: [labeler, test_trudag_extensions, codeql, ubuntu]  # no check_amalgamation, dependency_review or SME_review_checker if non PR
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [labeler, test_trudag_extensions, codeql, ubuntu]

    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Check child workflow results 
        run: |
          echo "=== Checking Child Workflow Results ==="
          result="${{ needs[matrix.target].result }}"
          echo "${{ matrix.target }} workflow result: $result"

          if [[ "$result" != "success" ]]; then
            echo "❌ ${{ matrix.target }} workflow failed! Exiting..."
            exit 1
          fi
          echo "✅ Child workflows completed successfully!" 
        env:
          current_workflow: ${{ matrix.target }}

      - name: Download artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: "${{ matrix.target }}-${{ github.sha }}"
          path: artifacts/

  test_publish_documentation:
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write
      security-events: read
    name: Test publish_documentation Workflow
    if: github.event_name == 'pull_request'            # Whenever on Pull-request, test publication
    needs: [collect_artifacts_pr]
    uses: ./.github/workflows/test_publication.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"

  publish_documentation:
    permissions:
      contents: write
      pages: write
      pull-requests: write
      id-token: write
      security-events: read
    name: Run publish_documentation Workflow
    if: github.event_name == 'push'            # Publish documentation should only run on push to main
    needs: [collect_artifacts_non_pr]
    uses: ./.github/workflows/publish_documentation.yml
    with:
      artifact_id: "ubuntu-${{ github.sha }}"
  • Description: github workflow running daily and triggering the workflow ubuntu

  • .github/workflows/ubuntu.yml

name: Ubuntu

on:
  workflow_call:
    inputs:
      artifact_id:
        description: 'Unique identifier for artifacts'
        required: true
        type: string
        
permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  ci_test_gcc:
    runs-on: ubuntu-latest
    container: gcc:14
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_gcc
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_gcc_artefact
          path: build/my_logs/

  ci_infer:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_infer

  ci_static_analysis_ubuntu:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [ci_test_amalgamation, ci_test_single_header, ci_cppcheck, ci_cpplint, ci_reproducible_tests, ci_non_git_tests, ci_offline_testdata, ci_reuse_compliance, ci_test_valgrind]
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - name: Install Valgrind
        run: sudo apt-get update ; sudo apt-get install -y valgrind
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_reuse_compliance' && matrix.target != 'ci_cpplint' && matrix.target != 'ci_test_amalgamation' && matrix.target != 'ci_cppcheck' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_static_analysis_ubuntu_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_static_analysis_clang:
    runs-on: ubuntu-latest
    container: silkeh/clang:20
    strategy:
      matrix:
        target: [ci_test_clang, ci_clang_tidy, ci_test_clang_sanitizer, ci_clang_analyze, ci_single_binaries]
    steps:
      - name: Install git, clang-tools, iwyu (ci_single_binaries), and unzip
        run: apt-get update ; apt-get install -y git clang-tools iwyu unzip
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
      # The default C++ compiler in the docker image is clang++-14 which does not support all compiler flags
        run: cmake -S . -B build -DJSON_CI=On -DCLANG_TOOL=clang++-20
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_clang_analyze' && matrix.target != 'ci_single_binaries' && matrix.target != 'ci_clang_tidy' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_static_analysis_clang_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_cmake_options:
    runs-on: ubuntu-latest
    container: ubuntu:focal
    strategy:
      matrix:
        target: [ci_cmake_flags, ci_test_diagnostics, ci_test_diagnostic_positions, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison, ci_test_noglobaludls]
    steps:
      - name: Install build-essential
        run: apt-get update ; apt-get install -y build-essential unzip wget git libssl-dev
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}
      - name: Upload test report 
        if: ${{ matrix.target != 'ci_cmake_flags' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_cmake_options_artefact_${{ matrix.target }}
          path: build/my_logs/

  ci_test_coverage:
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Install dependencies and de_DE locale
        run: |
          sudo apt-get clean
          sudo apt-get update
          sudo apt-get install -y build-essential cmake lcov ninja-build make locales gcc-multilib g++-multilib
          sudo locale-gen de_DE
          sudo update-locale
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_coverage
      - name: Archive coverage report
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: code-coverage-report
          path: ${{ github.workspace }}/build/html
      - name: Publish report to Coveralls
        uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          path-to-lcov: ${{ github.workspace }}/build/json.info.filtered.noexcept
          fail-on-error: false # Do not fail the workflow if Coveralls fails
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_coverage_artefact
          path: build/my_logs/

  ci_test_compilers_gcc_old:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler: ['4.8', '4.9', '5', '6']
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: CXX=g++-${{ matrix.compiler }} cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_g++-${{ matrix.compiler }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_gcc_old_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_compilers_gcc:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # older GCC docker images (4, 5, 6) fail to check out code
        compiler: ['7', '8', '9', '10', '11', '12', '13', '14']
    container: gcc:${{ matrix.compiler }}
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_default
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_gcc_clang_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_compilers_clang:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler: ['17', '18', '19', '20']
    container: silkeh/clang:${{ matrix.compiler }}
    steps:
      - name: Install unzip and git
        run: apt-get update ; apt-get install -y unzip git
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Set env FORCE_STDCPPFS_FLAG for clang 7 / 8 / 9 / 10
        run: echo "JSON_FORCED_GLOBAL_COMPILE_OPTIONS=-DJSON_HAS_FILESYSTEM=0;-DJSON_HAS_EXPERIMENTAL_FILESYSTEM=0" >> "$GITHUB_ENV"
        if: ${{ matrix.compiler == '7' || matrix.compiler == '8' || matrix.compiler == '9' || matrix.compiler == '10' }}
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_compiler_default
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_compilers_clang_artefact_${{ matrix.compiler }}
          path: build/my_logs/

  ci_test_standards_gcc:
    runs-on: ubuntu-latest
    container: gcc:14.3
    strategy:
      matrix:
        standard: [11, 14, 17, 20, 23, 26]
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_test_gcc_cxx${{ matrix.standard }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_standards_gcc_artefact_${{ matrix.standard }}
          path: build/my_logs/

  ci_test_standards_clang:
    runs-on: ubuntu-latest
    container: silkeh/clang:20
    strategy:
      matrix:
        standard: [11, 14, 17, 20, 23, 26]
        stdlib: [libcxx, libstdcxx]
    steps:
      - name: Install git and unzip
        run: apt-get update ; apt-get install -y git unzip
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Get latest CMake and ninja
        uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build with libc++
        run: cmake --build build --target ci_test_clang_libcxx_cxx${{ matrix.standard }}
        if: ${{ matrix.stdlib == 'libcxx' }}
      - name: Build with libstdc++
        run: cmake --build build --target ci_test_clang_cxx${{ matrix.standard }}
        if: ${{ matrix.stdlib == 'libstdcxx' }}
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_test_standards_clang_artefact_${{ matrix.stdlib }}_${{ matrix.standard }}
          path: build/my_logs/

  ci_cuda_example:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.4.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ci_cuda_example

  ci_icpc:
    runs-on: ubuntu-latest
    container: ghcr.io/nlohmann/json-ci:v2.2.0
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: |
          . /opt/intel/oneapi/setvars.sh
          cmake --build build --target ci_icpc
      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ci_icpc_artefact
          path: build/my_logs/

  ci_test_documentation:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [ci_test_examples, ci_test_build_documentation]
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
        with:
          egress-policy: audit

      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Run CMake
        run: cmake -S . -B build -DJSON_CI=On
      - name: Build
        run: cmake --build build --target ${{ matrix.target }}

  publish_test_data_success:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: success()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py successful
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  publish_test_data_failure:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: failure()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py failed
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  publish_test_data_cancellation:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs: [ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: cancelled()
    steps:
      - name: Check out code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Download all workflow artifacts
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          path: my_artifacts

      - name: Get current branch name
        id: get_branch
        env:
          GITHUB_EVENT_NAME: ${{ github.event_name }}
          PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
          GITHUB_REF_SAFE: ${{ github.ref }}
        run: |
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # Use the branch from the pull request safely via environment variable
            current_branch="$PR_BRANCH_NAME"
          else
            # Remove the "refs/heads/" prefix from GITHUB_REF safely
            current_branch="${GITHUB_REF_SAFE#refs/heads/}"
          fi
 
          # Write the branch name to $GITHUB_ENV securely
          echo "branch_name=${current_branch}" >> "$GITHUB_ENV"

      - name: Fetch data storage branch
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git fetch --all
          git checkout save_historical_data && git pull || git checkout -b save_historical_data
      
      - name: Load persistent data
        run: |
          if ! git ls-tree --name-only origin/save_historical_data TSF/MemoryEfficientTestResultData.db | grep TSF/MemoryEfficientTestResultData.db; then
            touch TSF/MemoryEfficientTestResultData.db
            git add TSF/MemoryEfficientTestResultData.db
            git commit -m "Create persistent storage"
            git push origin save_historical_data
          fi
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right commit from actions/checkout
            # Just get the file from save_historical_data branch
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          else
            # For push events, switch to the branch and get the file
            git checkout $branch_name
            git checkout save_historical_data -- TSF/MemoryEfficientTestResultData.db
          fi

      - name: append test data
        run: |
          python3 TSF/scripts/capture_test_data_memory_sensitive.py cancelled
      
      - name: Checkout data storage branch
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git stash push --include-untracked -- $(git status --porcelain | awk '{print $2}' | grep -v TSF/MemoryEfficientTestResultData.db)
          git checkout save_historical_data

      - name: Commit and Push persistent data
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          git add TSF/MemoryEfficientTestResultData.db
          git commit -m "Save test data" || echo "No test data to be saved"
          git push origin save_historical_data
      
      - name: Recover stash
        if: github.event_name == 'schedule' || (github.event_name == 'push' && github.ref_name == 'main')
        run: |
          # Handle fork PRs by staying on current working branch instead of switching
          if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
            # For PRs, we're already on the right branch/commit
            git stash apply
          else
            # For push events, switch back to the working branch
            git checkout $branch_name
            git stash apply
          fi
      
      - name: Move test report
        run: |
          mkdir test_report
          mv MemoryEfficientTestResults.db test_report/MemoryEfficientTestResults.db

      - name: Upload test report 
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: publish_data_artifact
          path: test_report/


  ubuntu_artifact:
    runs-on: ubuntu-latest
    needs: [publish_test_data_success, publish_test_data_failure, publish_test_data_cancellation, ci_test_gcc, ci_infer, ci_static_analysis_ubuntu, ci_static_analysis_clang, ci_cmake_options, ci_test_coverage, ci_test_compilers_gcc_old, ci_test_compilers_gcc, ci_test_compilers_clang, ci_test_standards_gcc, ci_test_standards_clang, ci_cuda_example, ci_icpc, ci_test_documentation]
    if: ${{ always() && (needs.publish_test_data_success.result == 'success' || needs.publish_test_data_failure.result == 'success' || needs.publish_test_data_cancellation.result == 'success') }}
    steps:
      - name: Download test report
        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
        with:
          name: publish_data_artifact

      - name: Generate ubuntu artifact
        run: |
          echo "Generating ubuntu artifact..."
          mkdir -p ubuntu
          if [ -f MemoryEfficientTestResults.db ]; then
            mv MemoryEfficientTestResults.db ubuntu/MemoryEfficientTestResults.db
          else
            echo "No test-results were captured."
          fi
          echo "ubuntu processed for ${{ inputs.artifact_id }}" > ubuntu/ubuntu.txt

      - name: Upload ubuntu artifact
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ${{ inputs.artifact_id }}
          path: ubuntu/
  • Description: workflow, in which unit tests are executed with a myriad of test environments and test results are captured.

  • TSF/scripts/capture_test_data.py

import sys
import sqlite3
import os
import xml.etree.ElementTree as ET
import re
from datetime import datetime, timezone

def setup_environment_variables() -> dict[str, str]:
    # Retrieves and validates the necessary environment variables for GitHub workflows.
    # Raises a RuntimeError if any required variables are missing.
    required_vars = ["GITHUB_RUN_ID", "GITHUB_REPOSITORY", "GITHUB_RUN_ATTEMPT"]
    environment = {var: os.getenv(var) for var in required_vars}
    
    missing_vars = [var for var, value in environment.items() if not value]
    if missing_vars:
        raise RuntimeError(f"Missing required environment variables: {', '.join(missing_vars)}")
    
    return environment

def clean_test_case(testcase: str) -> tuple[str,str]:
    # This function expects a testcase of the form "testcase_name_cppxx".
    # It returns the tuple ["testcase_name","gnu++xx"].
    name, appendix = testcase.rsplit('_',1)
    return [name, "gnu++"+appendix.replace('cpp','')]

def read_result_table(input: list[str]) -> dict:
    """
    This function expects console output <system-out> of doctest.
    It is assumed that this has the following form
        <system-out>[doctest] doctest version is "2.4.11"
        [doctest] run with "--help" for options
        ===============================================================================
        [doctest] test cases:  1 |  1 passed | 0 failed | 0 skipped
        [doctest] assertions: 45 | 45 passed | 0 failed |
        [doctest] Status: SUCCESS!
        </system-out>
    It extracts the number of passed/failed/skipped test cases, and passed/skipped assertions.
    """
    metadata = dict()
    raw_data = input[0]
    data = re.findall(r'(\d+)\s+(passed|failed|skipped)\b', raw_data)
    if len(data) < 5:
        raise RuntimeError("Fatal Error: Received incomplete or wrong result table.")
    metadata["passed test cases"] = int(data[0][0])
    metadata["failed test cases"] = int(data[1][0])
    metadata["skipped test cases"] = int(data[2][0])
    metadata["passed assertions"] = int(data[3][0])
    metadata["failed assertions"] = int(data[4][0])
    return metadata


def get_metadata(testcase: ET.Element) -> dict:
    # expects testcase extracted from a junit xml-file as input
    # extracts the data interesting to us
    # Assumption of Use: before execution, it is checked if is_unit_test(testcase)==True
    metadata = dict()
    # from name both name of the test and C++ standard can be extracted
    unsplit_name = testcase.get("name", None)
    if unsplit_name is None:
        raise RuntimeError("Fatal error: Can not read name of test-case!")
    name, standard = clean_test_case(unsplit_name)
    metadata["name"] = name
    metadata["standard"] = standard
    metadata["execution time"] = float(testcase.get("time"))
    # results are not as easily extracted but must be processed further
    metadata = metadata | read_result_table(list(testcase.find("system-out").itertext()))
    return metadata

def is_unit_test(testcase: ET.Element) -> bool:
    # crude test if the element belongs to a unit-test
    return "_cpp" in testcase.get('name')

def get_all_xml_files(directory: str = '.') -> list[str]:
    # search the folder containing all the artifacts and list the paths of expected test-reports
    result = []
    try:
        content = os.listdir(directory)
    except FileNotFoundError as e:
        print(e)
        return result
    for entry in content:
        if os.path.isdir(directory+'/'+entry):
            result = result + get_all_xml_files(directory+'/'+entry)
        if entry.endswith('.xml'):
            file = directory+'/'+entry if directory != '.' else entry
            result.append(file)
    return result

##########################
# Below starts the script.
##########################

if __name__ == "__main__":

    # check if argument was delivered
    if len(sys.argv) != 2:
        raise RuntimeError("Expected status of workflow as argument. Aborting!")
    # expected argument: status of workflow
    # check if the argument has the expected form
    status = sys.argv[1]
    if status not in ["successful", "failed", "cancelled"]:
        raise RuntimeError("The input does not match the expected format! Permissible are 'successful', 'failed' and 'cancelled'. Aborting!")

    # get environment variables
    try:
        environment = setup_environment_variables()
    except RuntimeError as e:
        raise RuntimeError("Critical error: Can not uniquely identify environment data! Aborting recording of data.")

    # initiate connection to database
    connector = sqlite3.connect("TSF/TestResultData.db")
    connector.execute("PRAGMA foreign_keys = ON")
    cursor = connector.cursor()

    # load expected tables
    command = (
        "CREATE TABLE IF NOT EXISTS workflow_info(",
        "repo TEXT, ",                              # repository
        "run_id INT, ",                             # ID of workflow run
        "run_attempt INT, ",                        # Attempt-number of workflow run
        "status TEXT ",                             # Termination-status of workflow                                         
        "CHECK(status IN ('successful', 'failed', 'cancelled')) DEFAULT 'failed', ",
        "time INT, ",                               # the time that is associated to this workflow run
        "PRIMARY KEY(repo, run_id, run_attempt))"
    )
    cursor.execute(''.join(command))
    command = (
        "CREATE TABLE IF NOT EXISTS test_results(",
        "timestamp INT, "                           # when the test-run was started
        "name TEXT, ",                              # name of the test
        "execution_time REAL, ",                    # execution time in seconds
        "compiler TEXT, ",                          # compiler information
        "cpp_standard TEXT, ",                      # cpp-standard
        "passed_cases INT, ",                       # number of passed test-cases
        "failed_cases INT, ",                       # number of failed test-cases
        "skipped_cases INT, ",                      # number of skipped test-cases
        "passed_assertions INT, ",                  # number of passed assertions
        "failed_assertions INT, ",                  # number of failed assertions
        "repo TEXT, ",                              # repository
        "run_id INT, ",                             # ID of workflow run
        "run_attempt INT, ",                        # Attempt-number of workflow run
        "FOREIGN KEY(repo, run_id, run_attempt) REFERENCES workflow_info)"
        )
    cursor.execute(''.join(command))

    # Due to storage space constraints, only most recent 100 test-results are stored.
    # Heuristic calculations have demonstrated that this should ensure that
    # the TestResultData.db is below 100MiB, which is github's hard file size limit.

    cursor.execute("SELECT COUNT(*) FROM workflow_info")
    saved_test_data = int(cursor.fetchone()[0])
    while saved_test_data>=100:
        # delete oldest saved data
        cursor.execute("SELECT MIN(time) FROM workflow_info")
        oldest_time = int(cursor.fetchone()[0])
        cursor.execute("SELECT repo, run_id, run_attempt FROM workflow_info WHERE \"time\" = ?", (oldest_time,))
        results = cursor.fetchall()
        # Delete all data associated to all the oldest workflow runs 
        for result in results:
            # it is expected that there is only one result
            cursor.execute("DELETE FROM test_results WHERE repo = \"?\" AND run_id = ? AND run_attempt = ?", (result[0],result[1],result[2]))
            cursor.execute("DELETE FROM workflow_info WHERE repo = \"?\" AND run_id = ? AND run_attempt = ?", (result[0],result[1],result[2]))
            connector.commit()
        # don't forget to update!
        cursor.execute("SELECT COUNT(*) FROM workflow_info")
        saved_test_data = int(cursor.fetchone()[0])

    # fill in metadata
    # OBSERVE: This script expects the status of the github workflow as argument
    repo = environment.get('GITHUB_REPOSITORY')
    run_id = environment.get('GITHUB_RUN_ID')
    run_attempt = environment.get('GITHUB_RUN_ATTEMPT')
    time = int(datetime.now(timezone.utc).timestamp())
    command = f"INSERT INTO workflow_info VALUES(?,?,?,?,?)"
    cursor.execute(command,(repo, run_id, run_attempt, status, time))
    # Don't forget to save!
    connector.commit()

    # Load my artifacts
    failed_data = []
    junit_logs = get_all_xml_files("./my_artifacts/")

    #extract data
    for junit_log in junit_logs:
        tree = ET.parse(junit_log)
        file_root = tree.getroot()
        testsuite = next(file_root.iter('testsuite'), None)
        if testsuite is None:
            print(f"Error: Could not find testsuite data in {junit_log}.")
            failed_data.append(junit_log)
            continue
        for testcase in (case for case in file_root.iter('testcase') if is_unit_test(case)):
            metadata = get_metadata(testcase)
            command = (
                "INSERT INTO test_results VALUES(",
                f"{int(datetime.fromisoformat(testsuite.get('timestamp')).timestamp())}, ",
                f"'{metadata.get('name')}', ",
                f"{metadata.get('execution time')}, ",
                f"'{testsuite.get('name')}', ",
                f"'{metadata.get('standard')}', ",
                f"{metadata.get('passed test cases')}, ",
                f"{metadata.get('failed test cases')}, ",
                f"{metadata.get('skipped test cases')}, ",
                f"{metadata.get('passed assertions')}, ",
                f"{metadata.get('failed assertions')}, ",
                f"'{repo}', ",
                f"{run_id}, ",
                f"{run_attempt}"
                ")"
            )
            command = ''.join(command)
            cursor.execute(command)
            connector.commit()

    # storage space on the github is limited.

    # finally, most recent test data are stored separately

    # initialise database connection
    conn = sqlite3.connect("TestResults.db")
    cur = conn.cursor()
    # add the expected table
    command = (
        "CREATE TABLE IF NOT EXISTS test_results(",
        "name TEXT, ",                              # name of the test
        "execution_time REAL, ",                    # execution time in seconds
        "compiler TEXT, ",                          # compiler information
        "cpp_standard TEXT, ",                      # cpp-standard
        "passed_cases INT, ",                       # number of passed test-cases
        "failed_cases INT, ",                       # number of failed test-cases
        "skipped_cases INT, ",                      # number of skipped test-cases
        "passed_assertions INT, ",                  # number of passed assertions
        "failed_assertions INT",                    # number of failed assertions
        ")"
        )
    cur.execute(''.join(command))
    # copy most recent data from persistent data storage
    cur.execute("ATTACH DATABASE 'TSF/TestResultData.db' AS source")
    command = """
            INSERT INTO test_results (
                name, execution_time, compiler, cpp_standard,
                passed_cases, failed_cases, skipped_cases,
                passed_assertions, failed_assertions
            )
            SELECT
                name, execution_time, compiler, cpp_standard,
                passed_cases, failed_cases, skipped_cases,
                passed_assertions, failed_assertions
            FROM source.test_results
            WHERE repo = ? AND run_id = ? AND run_attempt = ?
    """
    cur.execute(command, (repo, run_id, run_attempt))
    conn.commit()
    # detach persistent database
    cur.execute("DETACH DATABASE source")
    # terminate connection to temporary database
    # don't forget to commit the changes
    conn.commit()
    conn.close()

    # terminate connection to persistent database
    # don't forget to commit the changes again, for good measure
    connector.commit()
    connector.close()

  • Description: script, which collects the data produced by ctest in a database

  • website: https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/MemoryEfficientTestResultData.db

https://github.com/eclipse-score/inc_nlohmann_json/blob/save_historical_data/TSF/MemoryEfficientTestResultData.db - the database containing the test results

Fallacies:

None

Graph:

No Image

date-time

JLS-22

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-23 | Reviewed: ⨯ | Score: 0.0#

The Eclipse S-CORE organization mirrors the nlohmann/json project in a github fork.

Supported Requests:

Item

Summary

Score

Status

TA-SUPPLY_CHAIN

All sources and tools for the nlohmann/json library are mirrored in our controlled environment.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json

https://github.com/nlohmann/json - Start-page of the original nlohmann/json project

  • website: https://github.com/eclipse-score/inc_nlohmann_json

https://github.com/eclipse-score/inc_nlohmann_json - Start-page of the mirror of nlohmann/json within Eclipse S-CORE

Fallacies:

None

Graph:

No Image

date-time

JLS-23

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-24 | Reviewed: ⨯ | Score: 0.0#

The nlohmann/json library recognizes malformed JSON and returns an exception.

Supported Requests:

Item

Summary

Score

Status

TA-MISBEHAVIOURS

Prohibited misbehaviours for the nlohmann/json library are identified, and mitigations are specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

Item

Summary

Score

Status

NPF-07.2

The service provided by the nlohmann/json library throws an exception on ill-formed UTF-8 data.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-01

The parsing service provided by the nlohmann/json library throws an exception on ill-formed literal names.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-02

The parsing service provided by the nlohmann/json library throws an exception on ill-formed numbers.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-03

The parsing service provided by the nlohmann/json library throws an exception on ill-formed strings.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-04

The parsing service provided by the nlohmann/json library throws an exception on ill-formed arrays.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-05

The parsing service provided by the nlohmann/json library throws an exception on ill-formed objects.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

TIJ-06

The service provided by the nlohmann/json library recognises ill-formed byte-order marks and throws an exception.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-24

NPF-07.2

TIJ-01

TIJ-02

TIJ-03

TIJ-04

TIJ-05

TIJ-06

2025-11-26 12:04:09

0.00

0.00

0.00

0.00

0.00

0.00

0.00

0.00

2025-11-26 12:52:19.093864

0.00

0.00

0.00

0.00

0.00

0.00

0.00

0.00


JLS-25 | Reviewed: ⨯ | Score: 0.0#

Malicious code changes in nlohmann/json are mitigated by code reviews, adhering to the contribution guidelines and security policy specified by nlohmann/json.

Supported Requests:

Item

Summary

Score

Status

TA-MISBEHAVIOURS

Prohibited misbehaviours for the nlohmann/json library are identified, and mitigations are specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where scores for ‘Security-Policy’ and ‘Code-Review’ reflect this statement.

  • website: https://github.com/nlohmann/json?tab=contributing-ov-file#readme

https://github.com/nlohmann/json?tab=contributing-ov-file#readme - Contribution Guidelines for nlohmann/json, where it is indirectly indicated that all changes are reviewed.

Fallacies:

None

Graph:

No Image

date-time

JLS-25

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-26 | Reviewed: ⨯ | Score: 0.0#

Any failed CI pipeline executions in the master branch of the nlohmann/json repository are analyzed and fixed.

Supported Requests:

Item

Summary

Score

Status

TA-ANALYSIS

Collected data from tests and monitoring of deployed software in eclipse-score/inc_nlohmann_json is analysed according to specified objectives.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • failures on branch master of nlohmann/json

0 workflows failed on branch master of nlohmann/json

Fallacies:

None

Graph:

No Image

date-time

JLS-26

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-27 | Reviewed: ⨯ | Score: 0.0#

The test coverage for this version of nlohmann/json is monitored using Coveralls and is not decreasing over time, unless reasonably justified.

Supported Requests:

Item

Summary

Score

Status

TA-BEHAVIOURS

Expected or required behaviours for the nlohmann/json library are identified, specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
✔ Link Reviewed

Supporting Items:

None

References:

None

Fallacies:

None

Graph:

No Image

date-time

JLS-27

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-28 | Reviewed: ⨯ | Score: 0.0#

Outstanding bugs and misbehaviours are triaged in the nlohmann/json repository.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/discussions/4967

https://github.com/nlohmann/json/discussions/4967 - Discussion in nlohmann/json showing that no triage processes for bugs are currently in place

Fallacies:

None

Graph:

No Image

date-time

JLS-28

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-29 | Reviewed: ⨯ | Score: 0.0#

Known bugs, misbehaviours and CVEs are analyzed and either fixed or mitigated in the nlohmann/json repository.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/releases/tag/v3.12.0

https://github.com/nlohmann/json/releases/tag/v3.12.0 - release notes for v3.12.0, listing bugs, CVEs and warnings which were either fixed or mitigated since last release

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where scores for ‘Vulnerabilities’, ‘Pinned-Dependencies’ and ‘Dangerous-Workflow’ support this statement.

Fallacies:

None

Graph:

No Image

date-time

JLS-29

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-30 | Reviewed: ⨯ | Score: 0.0#

Outstanding CVEs are analyzed within eclipse-score/inc_nlohmann_json to determine whether they can be dismissed, and/or are relevant for S-CORE’s use cases of the nlohmann/json library.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where score for ‘Vulnerabilities’ shows that there are no outstanding CVEs.

  • website: https://github.com/nlohmann/json/discussions/4975

https://github.com/nlohmann/json/discussions/4975 - Screenshot of dismissed code scanning alerts, which can also be dismissed in S-CORE.

Fallacies:

None

Graph:

No Image

date-time

JLS-30

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-31 | Reviewed: ⨯ | Score: 0.0#

The nlohmann/json repository uses a static code analysis tool.

Supported Requests:

Item

Summary

Score

Status

TA-MISBEHAVIOURS

Prohibited misbehaviours for the nlohmann/json library are identified, and mitigations are specified, verified and validated based on analysis.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where score for ‘SAST’ supports this statement.

Fallacies:

None

Graph:

No Image

date-time

JLS-31

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-32 | Reviewed: ⨯ | Score: 0.0#

All pull requests to the develop branch in the nlohmann/json repository trigger a request for review from Niels Lohmann (@nlohmann).

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/blob/develop/.github/CODEOWNERS

https://github.com/nlohmann/json/blob/develop/.github/CODEOWNERS - CODEOWNERS file specifying that changes to any file requests @nlohmann for code review in case of a pull request

Fallacies:

None

Graph:

No Image

date-time

JLS-32

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-33 | Reviewed: ⨯ | Score: 0.0#

Outstanding CVEs are triaged in the nlohmann/json repository.

Supported Requests:

Item

Summary

Score

Status

TA-FIXES

In the nlohmann/json repository, known bugs or misbehaviours are analysed and triaged, and critical fixes or mitigations are implemented or applied.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://github.com/nlohmann/json/security/advisories/new

https://github.com/nlohmann/json/security/advisories/new - the vulnerability reporting template used in nlohmann/json, which includes a severity section and CVSS scoring

Fallacies:

None

Graph:

No Image

date-time

JLS-33

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-34 | Reviewed: ⨯ | Score: 0.0#

The nlohmann/json library has no external components or dependencies besides the C++ standard components.

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • List of included libraries for: single_include/nlohmann/json.hpp

    • Description: file containing all include occurrences of the score-project.

    #include <algorithm>
    #include <cstddef>
    #include <functional>
    #include <initializer_list>
        #include <iosfwd>
    #include <iterator>
    #include <memory>
    #include <string>
    #include <utility>
    #include <vector>
    #include <utility>
    #include <algorithm>
    #include <array>
    #include <forward_list>
    #include <iterator>
    #include <map>
        #include <optional>
    #include <string>
    #include <tuple>
    #include <type_traits>
    #include <unordered_map>
    #include <utility>
    #include <valarray>
    #include <cstddef>
    #include <exception>
        #include <numeric>
    #include <stdexcept>
    #include <string>
    #include <vector>
    #include <array>
    #include <cstddef>
    #include <cstdint>
    #include <string>
    #include <utility>
    #include <type_traits>
        #include <stdint.h>
        #include <stdint.h>
            #include <version>
        #include <cstdlib>
        #include <cassert>
        #include <compare>
    #include <cstddef>
    #include <array>
    #include <cstddef>
    #include <type_traits>
    #include <utility>
    #include <limits>
    #include <string>
    #include <tuple>
    #include <type_traits>
    #include <utility>
    #include <iterator>
        #include <cstdint>
        #include <map>
        #include <memory>
        #include <string>
        #include <vector>
    #include <cstring>
    #include <string>
    #include <utility>
    #include <experimental/filesystem>
    #include <filesystem>
        #include <optional>
    #include <algorithm>
    #include <iterator>
    #include <string>
    #include <tuple>
    #include <type_traits>
    #include <utility>
    #include <valarray>
    #include <vector>
    #include <cstddef>
    #include <iterator>
    #include <tuple>
    #include <utility>
        #include <ranges>
    #include <cstddef>
    #include <string>
    #include <cstdint>
    #include <tuple>
    #include <utility>
    #include <cstdint>
    #include <cstddef>
    #include <functional>
    #include <algorithm>
    #include <array>
    #include <cmath>
    #include <cstddef>
    #include <cstdint>
    #include <cstdio>
    #include <cstring>
    #include <iterator>
    #include <limits>
    #include <string>
    #include <utility>
    #include <vector>
        #include <bit>
    #include <array>
    #include <cstddef>
    #include <cstring>
    #include <iterator>
    #include <memory>
    #include <numeric>
    #include <string>
    #include <type_traits>
    #include <utility>
        #include <cstdio>
        #include <istream>
    #include <cstddef>
    #include <string>
    #include <type_traits>
    #include <utility>
    #include <vector>
    #include <array>
    #include <clocale>
    #include <cstddef>
    #include <cstdio>
    #include <cstdlib>
    #include <initializer_list>
    #include <string>
    #include <utility>
    #include <vector>
    #include <cstdint>
    #include <utility>
    #include <string>
    #include <cmath>
    #include <cstdint>
    #include <functional>
    #include <string>
    #include <utility>
    #include <vector>
    #include <cstddef>
    #include <limits>
    #include <iterator>
    #include <type_traits>
    #include <cstddef>
    #include <iterator>
    #include <utility>
    #include <type_traits>
    #include <algorithm>
    #include <cctype>
    #include <cerrno>
    #include <cstdlib>
        #include <iosfwd>
    #include <limits>
    #include <numeric>
    #include <string>
    #include <utility>
    #include <vector>
    #include <initializer_list>
    #include <utility>
    #include <algorithm>
    #include <array>
    #include <map>
    #include <cmath>
    #include <cstdint>
    #include <cstring>
    #include <limits>
    #include <string>
    #include <utility>
    #include <vector>
    #include <algorithm>
    #include <cstddef>
    #include <iterator>
    #include <memory>
    #include <string>
    #include <vector>
        #include <ios>
        #include <ostream>
    #include <algorithm>
    #include <array>
    #include <clocale>
    #include <cmath>
    #include <cstddef>
    #include <cstdint>
    #include <cstdio>
    #include <limits>
    #include <string>
    #include <iomanip>
    #include <type_traits>
    #include <utility>
    #include <array>
    #include <cmath>
    #include <cstdint>
    #include <cstring>
    #include <limits>
    #include <type_traits>
    #include <functional>
    #include <initializer_list>
    #include <iterator>
    #include <memory>
    #include <stdexcept>
    #include <type_traits>
    #include <utility>
    #include <vector>
            #include <any>
        #include <string_view>
    

Fallacies:

None

Graph:

No Image

date-time

JLS-34

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00


JLS-35 | Reviewed: ⨯ | Score: 0.0#

Pull requests in the nlohmann/json repository are merged only after running CI-tests and successfully passing the pipeline.

Supported Requests:

Item

Summary

Score

Status

TA-UPDATES

nlohmann/json library components, configurations and tools are updated under specified change and configuration management controls.

0.00

⨯ Item Reviewed
⨯ Link Reviewed

Supporting Items:

None

References:

  • website: https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson

https://scorecard.dev/viewer/?uri=github.com%2Fnlohmann%2Fjson - OpenSSF Scorecard Report for nlohmann/json, where score for ‘CI-Tests’ supports this statement

  • website: https://github.com/nlohmann/json/pulls?q=is%3Apr+is%3Aclosed+review%3Aapproved

https://github.com/nlohmann/json/pulls?q=is%3Apr+is%3Aclosed+review%3Aapproved - All approved pull requests in the nlohmann/json repository, with the results of the CI pipeline executions.

Fallacies:

None

Graph:

No Image

date-time

JLS-35

2025-11-26 12:04:09

0.00

2025-11-26 12:52:19.093864

0.00