4 libtap - Write tests in C
13 int bronze = 1, silver = 2, gold = 3;
14 ok(bronze < silver, "bronze is less than silver");
15 ok(bronze > silver, "not quite");
16 is("gold", "gold", "gold is gold");
17 cmp_ok(silver, "<", gold, "%d <= %d", silver, gold);
18 like("platinum", ".*inum", "platinum matches .*inum");
25 ok 1 - bronze is less than silver
27 # Failed test 'not quite'
28 # at t/synopsis.c line 7.
31 ok 5 - platinum matches .*inum
32 # Looks like you failed 1 test of 5 run.
37 tap is an easy to read and easy to write way of creating tests for
38 your software. This library creates functions that can be used to
39 generate it for your C programs. It is implemented using macros
40 that include file and line info automatically, and makes it so that
41 the format message of each test is optional. It is mostly based on
42 the Test::More Perl module.
52 For more detailed installation instructions (eg, for **Windows**), see `INSTALL`.
60 - plan(SKIP_ALL, fmt, ...)
62 Use this to start a series of tests. When you know how many tests there
63 will be, you can put a number as a number of tests you expect to run. If
64 you do not know how many tests there will be, you can use plan(NO_PLAN)
65 or not call this function. When you pass it a number of tests to run, a
66 message similar to the following will appear in the output:
70 If you pass it SKIP_ALL, the whole test will be skipped.
75 Specify a test. the test can be any statement returning a true or false
76 value. You may optionally pass a format string describing the test.
78 ok(r = reader_new("Of Mice and Men"), "create a new reader");
79 ok(reader_go_to_page(r, 55), "can turn the page");
80 ok(r->page == 55, "page turned to the right one");
84 ok 1 - create a new reader
85 ok 2 - can turn the page
86 ok 3 - page turned to the right one
88 On failure, a diagnostic message will be printed out.
90 not ok 3 - page turned to the right one
91 # Failed test 'page turned to the right one'
92 # at reader.c line 13.
95 - is(got, expected, fmt, ...)
96 - isnt(got, unexpected)
97 - isnt(got, unexpected, fmt, ...)
99 Tests that the string you got is what you expected. with isnt, it is the
102 is("this", "that", "this is that");
106 not ok 1 - this is that
107 # Failed test 'this is that'
113 - cmp_ok(a, op, b, fmt, ...)
115 Compares two ints with any binary operator that doesn't require an lvalue.
116 This is nice to use since it provides a better error message than an
119 cmp_ok(420, ">", 666);
124 # Failed test at cmpok.c line 5.
129 - cmp_mem(got, expected, n)
130 - cmp_mem(got, expected, n, fmt, ...)
132 Tests that the first n bytes of the memory you got is what you expected.
133 NULL pointers for got and expected are handled (if either is NULL,
134 the test fails), but you need to ensure n is not too large.
143 # Failed test at t/cmp_mem.c line 9.
144 # Difference starts at offset 0
148 - like(got, expected)
149 - like(got, expected, fmt, ...)
150 - unlike(got, unexpected)
151 - unlike(got, unexpected, fmt, ...)
153 Tests that the string you got matches the expected extended POSIX regex.
154 unlike is the reverse. These macros are the equivalent of a skip on
157 like("stranger", "^s.(r).*\\1$", "matches the regex");
161 ok 1 - matches the regex
168 Speciy that a test succeeded or failed. Use these when the statement is
169 longer than you can fit into the argument given to an ok() test.
172 - dies_ok(code, fmt, ...)
174 - lives_ok(code, fmt, ...)
176 Tests whether the given code causes your program to exit. The code gets
177 passed to a macro that will test it in a forked process. If the code
178 succeeds it will be executed in the parent process. You can test things
179 like passing a function a null pointer and make sure it doesnt
180 dereference it and crash.
182 dies_ok({abort();}, "abort does close your program");
183 dies_ok({int x = 0/0;}, "divide by zero crash");
184 lives_ok({pow(3.0, 5.0);}, "nothing wrong with taking 3**5");
186 On Windows, these macros are the equivalent of a skip.
190 Summarizes the tests that occurred and exits the main function. If
191 there was no plan, it will print out the number of tests as.
195 It will also print a diagnostic message about how many
198 # Looks like you failed 2 tests of 3 run.
200 If all planned tests were successful, it will return 0. If any
201 test fails, it will return 1. If they all passed, but there
202 were missing tests, it will return 2.
206 print out a message to the tap output on stdout. Each line is
207 preceeded by a "# " so that you know its a diagnostic message.
209 diag("This is\na diag\nto describe\nsomething.");
218 ok() and this function return an int so you can use it like:
220 ok(0) || diag("doh!");
223 - skip(test, n, fmt, ...)
226 Skip a series of n tests if test is true. You may give a reason why you are
227 skipping them or not. The (possibly) skipped tests must occur between the
228 skip and end_skip macros.
244 Specifies a series of tests that you expect to fail because they are not
254 # Failed (TODO) test at todo.c line 7
259 Immediately stops all testing.
261 BAIL_OUT("Can't go no further");
265 Bail out! Can't go no further