Skip to content

Latest commit

 

History

History
193 lines (146 loc) · 10.5 KB

README.md

File metadata and controls

193 lines (146 loc) · 10.5 KB

Portable Testsuite to check a C / C++ Compiler and standard runtime libraries

Many compiler and the related standard libraries provide tests, but they are not easy usable as portable/standalone conformance check for other compiler or for other runtime library implementations.

Goals for stdtests

  • A reusable license
  • Only needs a Compiler and a posix shell to run the testsuite
  • Portable: Works on many systems with many compiler and runtime libraries
  • Check C Compiler and the C Runtime library
  • Check the POSIX Runtime library
  • Check C++ Compiler and the C++ Runtime library
  • Create a nice Table from multiple Results

Expected usecase

  • Extract the testsuite
  • configure the testsuite to test a compiler / runtime library for a given standard
  • make: run the testsuite and generate a result file
  • make table: generate a table for multiple results

Example usage

  • std: newest
  • Compiler: tcc
  • runtime-library: system-default
mkdir results
cd results
CC=tcc ../configure --disable-c++
make
  • Now there should be an document with the results of the current test

Portability

  • Current tested environments

    Target OS tested Compiler
    Linux tcc / gcc / g++ / owcc / clang / zig cc / zig c++
    Windows x86_64-win32-tcc / x86_64-w64-mingw32-gcc / x86_64-w64-mingw32-g++
  • Hints / Links for later use:

    • With many years delay, a command line switch arrived in MSVC 2015 Update 3 for selecting the c++ version

Checking C Compiler and the C Runtime library

STD C2y C23 C17 C11 C99 C95 (C90+AMD1) C89/C90 / ANSI-C

Checking POSIX Runtime library

Currently, POSIX.1-2024 ist referenced. Older versions will follow.

Checking C++ Compiler and the C++ Runtime library

STD C++2c C++23 C++20 C++17 C++14 C++11 C++03 C++98

Some examples of other tables with Features or Test-Results

Some links to compiler / library tests

Name URL
clang test top dir
gcc test top dir
mcpp preprocessor
musl libc-tests
glibc libc

C Reference Documentation

Released C Standards

std __STDC_VERSION__ Latest Draft Release
C2y N/A N3301 N/A
C23 202311 N3096 ISO/IEC 9899:2024
C17 201710 N2176 ISO/IEC 9899:2018
C11 201112 N1570 ISO/IEC 9899:2011
C99 199901 N1256 ISO/IEC 9899:1999
C95 199409 c89_na1: c94 ISO/IEC 9899:1990/AMD1:1995
C90 not defined Missing ISO/IEC 9899:1990
C89 not defined c89 draft ANSI X3.159-1989

POSIX Reference Documentation

POSIX (Portable Operating System Interface) specifies many parts of an Operating System.

Interesting for this project is the API part of the Base Specification.

Released versions

The Open Group Base Specification is also released as the Single UNIX Specification and also released as the ISO/IEC 9945-1 standard.

_POSIX_VERSION _XOPEN_VERSION The Open Group Base Specification View Downloads
202405 800 POSIX.1-2024, Issue 8, 2024 Edition View online [Downloads N/A yet]
200809 700 POSIX.1-2017, Issue 7, 2018 Edition View online susv4-2018
200809 700 POSIX.1-2008, Issue 7, 2016 Edition View online susv4tc2
200809 700 POSIX.1-2008, Issue 7, 2013 Edition View online susv4tc1
200809 700 POSIX.1-2008, Issue 7, 2008 Edition View online susv4
200112 600 POSIX.1-2001, Issue 6, 2004 Edition View online susv3
199506 POSIX.1-1996
199009 POSIX.1-1990
198808 POSIX.1-1988

C++ Reference Documentation

Released C++ Standards

std __cplusplus Latest Draft Release
C++26 N/A N4993 N/A
C++23 202302 N4950 ISO/IEC 14882:2023
C++20 202002 N4849 ISO/IEC 14882:2020
C++17 201703 N4659 ISO/IEC 14882:2017
C++14 201402 N3797 ISO/IEC 14882:2014
C++11 201103 N3242 ISO/IEC 14882:2011
C++03 200300 c++03 final ISO/IEC 14882:2003
C++98 199711 nr. unknown ISO/IEC 14882:1998

Maintainer Mode hints

  • use 'bootstrap' to regenerate the build system files
  • use 'configure' with "--enable-maintainer-mode" to rebuild all programs all tests groups are enabled by default:
    • C
    • C++ (alias names: cxx / cplusplus)
    • posix
    • libc
    • libc++ (alias name: libcxx)