Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rafael-santiago/cutest

C-Library for unit testing.
https://github.com/rafael-santiago/cutest

c dsl internal-dsl kernel-mode-unit-tests memory-leak-detection minimalist-library suckless unit-testing

Last synced: 3 months ago
JSON representation

C-Library for unit testing.

Awesome Lists containing this project

README

        

# Cutest

Cutest is an acronym that can be understood as ``C`` ``u``nit ``test``.

This library brings a bunch of macros in order to guide the implementation of unit tests for ``C`` projects.

``Cutest`` brings a minimal memory leak detection system (fully working in ``Linux``, ``Windows``, ``FreeBSD``, ``Solaris``, ``NetBSD``, ``MINIX`` and ``OpenBSD``).
You can also use cutest to test kernel mode stuff in ``Linux``, ``FreeBSD``, ``NetBSD`` and ``Windows``.

All supported platforms by this library and other general features are listed on **Table 1**.

On ``Cutest`` is also possible customize the logs generated by your tests if you want to.

**Table 1**: Places where I have been running it. A.k.a. supported platforms. In additional, the compiler/linker options to be passed when using ``cutest`` as your unit testing library.

| **Operating System** | **Has *GNU* Backtracing?** | **Thread safe?** | **Compiler/Linker flags to use (besides ``-lcutest``)** | **Kernel mode** |
|:--------------------:|:--------------------------:|:--------------------:|:---------------------------------------------------------:|:---------------:|
| ``Linux`` | *Yes* | *Yes* | ``-ldl``, ``-lpthread`` | *Yes* |
| ``FreeBSD`` | *Yes* | *Yes* | ``-lexecinfo``, ``-lpthread`` | *Yes* |
| ``NetBSD`` | *Yes* | *Yes* | ``-lexecinfo``, ``-lpthread`` | *Yes* |
| ``OpenBSD`` | *Yes* | *Yes* | ``-lexecinfo``, ``-lpthread`` | *No* |
| ``MINIX`` | *Yes* | *No* | ``-lexecinfo`` | *No* |
| ``Solaris`` | *No* | *Yes* | ``-DNO_CUTEST_BACKTRACING``, ``-lpthread``| *No* |
| ``Windows`` | *Yes* | *Yes* | | *Yes* |

Of course, that it should run in a bunch of ``UNIX`` boxes, however I prefer listing the places where I actually watched it running
and working pretty fine. If there is a specific non-listed platform that you want to use ``cutest``, let me know, maybe I
can adjust the library's build to accomplish your requirements ;)

**Remark**: When using cutest to test kernel mode code you do not need compiler flags because all is available in one single
header file. For more details read the documentation.

## How to build it

To build ``cutest`` is necessary to use my own build system called [hefesto](https://github.com/rafael-santiago/hefesto.git). Being
``Hefesto`` installed in your system all you need to emit on a ``shell`` inside the cutest's ``src`` sub-directory is:

``hefesto``

After the build a file named ``libcutest.a`` that stands for the library will be generated under the path ``src/lib``.
You should use this file and the header ``src/cutest.h`` to develop your further ``unit tests``.

Note that the build was written based on ``GCC``. So, you need to have the ``gcc``/``mingw`` installed (and well exported)
in your system before going ahead.

Maybe you should read the [documentation](https://github.com/rafael-santiago/cutest/blob/master/doc/README.md) before starting.

**Tip**: In case of trying to compile it under a ``UNIX`` environment with no support for ``PTHREADS`` before calling ``hefesto``
you need to edit the file ``src/.ivk`` and add the following ``C Macro`` definition ``-DHAS_NO_PTHREAD`` to ``--cflags`` option:

```
--cflags=-DHAS_NO_PTHREAD
```

### Note for Visual Studio users

If you want to build ``cutest`` under ``MSVC`` you need to invoke ``Hefesto`` as follows:

```
> hefesto --toolset=msvc-c-lib
```

The command above will build ``lib/libcutestmt.lib``.

If you want to build ``lib/libcutestmtd.lib``, use:

```
> hefesto --toolset=msvc-c-lib --compile-model=debug
```

On ``64-bit`` environments ``64-bit`` lib artifacts will be built, for ``32-bit``, use:

```
>hefesto --toolset=msvc-c-lib --cpu-arch=x86
```

After run one of the commands listed above, a file named ``libcutest.lib`` will be generated inside ``src/lib`` path.
Note that use ``cutest`` on ``MSVC`` is a little bit tricky. It envolves composite the ``cutest`` with your current ``msvcrt.lib``
(it explains why the ``cutest.lib`` is so huge).

**Important**: When linking your test artifact. You need to add the following link option: ``/NODEFAULTLIB:MSVCRT,MSVCRTD``.

I have tested it over ``Microsoft Visual Studio 2019``.