TCK Results
===========

As required by the
[Eclipse Foundation Technology Compatibility Kit License](https://www.eclipse.org/legal/tck.php),
following is a summary of the TCK results for releases of Jakarta JSON Processing.

# 2.0.0 Certification Request

- Product Name, Version and download URL (if applicable)\
  [Eclipse JSON Processing 2.0.0](../index.html)
- Specification Name, Version and download URL\
  [Jakarta JSON Processing 2.0](https://jakarta.ee/specifications/jsonp/2.0/)
- TCK Version, digital SHA-256 fingerprint and download URL\
  [Jakarta JSON Processing TCK 2.0.0](https://download.eclipse.org/ee4j/jakartaee-tck/jakartaee9-eftl/staged-900/jakarta-jsonp-tck-2.0.0.zip), SHA-256: 437b2958159be2deceda795dfc86689142882364d6218ff1ac4cc7b47720351a
- Public URL of TCK Results Summary\
  [TCK results summary](jakarta-json-processing-2.0.html)
- Any Additional Specification Certification Requirements\
  None
- Java runtime used to run the implementation\
  Oracle JDK 1.8.0_191
- Summary of the information for the certification environment, operating system, cloud, ...\
  Linux CentOS 7

Test results:

```
[javatest.batch] Number of Tests Passed      = 169
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```

# 1.1.5 Certification Request

- Organization Name ("Organization") and, if applicable, URL\
  Eclipse Foundation
- Product Name, Version and download URL (if applicable)\
  [Eclipse JSON Processing 1.1.5](../index.html)
- Specification Name, Version and download URL\
  [Jakarta JSON Processing 1.1](https://jakarta.ee/specifications/jsonp/1.1/)
- TCK Version, digital SHA-256 fingerprint and download URL\
  [Jakarta JSON Processing TCK 1.1.0](http://download.eclipse.org/ee4j/jakartaee-tck/jakartaee8-eftl/promoted/eclipse-jsonp-tck-1.1.0.zip), SHA-256: 6b0ee9bfba9c72f9a78d9c074f8c4014c8fccfb57e43302dc8ad64378fc9a29c
- Public URL of TCK Results Summary\
  [TCK results summary](jakarta-json-processing-1.1.html)
- Any Additional Specification Certification Requirements\
  None
- Java runtime used to run the implementation\
  Oracle JDK 1.8.0_191
- Summary of the information for the certification environment, operating system, cloud, ...\
  Linux

Test results:

```
[javatest.batch] Number of Tests Passed      = 169
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```
