Need help with ihct?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ollelogdahl
154 Stars 5 Forks MIT License 109 Commits 1 Opened issues

Description

'I Hate C Testing': A minimal testing framework for C.

Services available

!
?

Need anything else?

Contributors list

# 256,942
c-sharp
unlicen...
graphic...
C
96 commits
# 7,583
chalk
cpp17
node-js
vercel
1 commit
# 157,083
C
Shell
micropr...
verilog
1 commit

ihct

'I Hate C Testing': a minimal testing framework for C

Olle Lögdahl, 13 December 2020

make docs licence issues sloc


ihct is a minimal C unit-testing framework. Intended for light unit testing, and focusing on development speed. Looking for more features, so please give any suggestions.

Installation & Usage

See documentation

To use this framework, simply include

ihct.h
in your project and link to the library. Everything else happens automatically. The following code should get you started.
#include 

IHCT_TEST(arithmetic_basic) { int a = 13; IHCT_ASSERT(a + 2 == 15); IHCT_ASSERT(a * 2 == 26); } IHCT_TEST(string_basic) { char *s1 = "abba"; IHCT_ASSERT_STR(s1, "abba"); }

int main(int argc, char **argv) { return IHCT_RUN(argc, argv); } </ihct.h>

To fully install the library, run:

bash
mkdir build
cd build
cmake .. && make -j4
sudo make install

See

ex.c
for an extended example. Note that tests are created as it's own executable, and therefore needs an entrypoint. The example
ex.c
can be compiled and executed by running:
bash
mkdir build
cd build
cmake .. && make -j4
./example

Why?

I have for a long time been stuck at unit testing in plain C. Many modern solutions use C++ as a test environment for C, but I wanted something more lightweight, that i can quickly get up to speed with. I decided to write my own test framework with two things in mind: development speed and minimalism. To improve development speed, all test functions are automatically included into the runner, and the library interface is kept minimal. It requires no dependencies other than a POSIX compliant OS, and compiles on all GNU C99 POSIX compatible compilers. The library also implements some safety to tests, catching fatal signals and hung functions.


Features

  • Basic test units
  • Basic asserts
  • Automatic test loader
  • Catching fatal signals (SEGFAULTS etc.) in tests (no line number, but sets them as failed).
  • Catching hung tests (again, no line number).

Self tests can be run along with own tests by adding compiler flag

-DIHCT_SELF_TEST
. (This may be very redundant; just see it as more examples :-) )

all macros (

IHCT_TEST
,
IHCT_ASSERT
etc.) can be shortened to remove the
IHCT
prefix, by defining
IHCT_SHORT
before including the header file.

Compatability notes

  • Since it requires
    __attribute__((constructor))
    it is not compilable with MSVC.
  • Since it uses pthreads and signals, it is POSIX (again, not sure it works with Windows).

Links

  • Repository
  • For reporting errors, visit Issue Tracker!
  • Related Projects:
    • cheat by Guillermo "Tordek" Freschi and Sampsa "Tuplanolla" Kiiskinen

Licensing

This project, and all code it contains, is licensed under the MIT License and can be read here.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.