partially testing run_test()
This commit is contained in:
123
test/util.c
Normal file
123
test/util.c
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
|
||||
9unit
|
||||
Copyright (C) Jonathan Lamothe <jonathan@jlamothe.net>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../9unit.h"
|
||||
#include "util.h"
|
||||
|
||||
// Local Types
|
||||
|
||||
typedef struct CompareInts CompareInts;
|
||||
|
||||
struct CompareInts
|
||||
{
|
||||
const char *context;
|
||||
int expected;
|
||||
int actual;
|
||||
};
|
||||
|
||||
// Local Prototypes
|
||||
|
||||
// compare the run value of two states
|
||||
static void compare_run(
|
||||
TestState *,
|
||||
const char *,
|
||||
const char *,
|
||||
const TestState *,
|
||||
const TestState *
|
||||
);
|
||||
|
||||
// compare two ints
|
||||
static void compare_ints(
|
||||
TestState *,
|
||||
const char *,
|
||||
int,
|
||||
int
|
||||
);
|
||||
|
||||
decl_test(compare_ints_test);
|
||||
|
||||
// Public Functions
|
||||
|
||||
void
|
||||
compare_states(
|
||||
TestState *s,
|
||||
const char *prefix,
|
||||
const char *context,
|
||||
const TestState *expected,
|
||||
const TestState *actual
|
||||
)
|
||||
{
|
||||
compare_run(s, prefix, context, expected, actual);
|
||||
}
|
||||
|
||||
// Local Functions
|
||||
|
||||
static void
|
||||
compare_run(
|
||||
TestState *s,
|
||||
const char *prefix,
|
||||
const char *context,
|
||||
const TestState *expected,
|
||||
const TestState *actual
|
||||
)
|
||||
{
|
||||
char full_context[STR_BUF_SIZE];
|
||||
print(prefix);
|
||||
print("run\n");
|
||||
snprintf(full_context, STR_BUF_SIZE, "%s run:", context);
|
||||
compare_ints(s, full_context, expected->run, actual->run);
|
||||
}
|
||||
|
||||
static void
|
||||
compare_ints(
|
||||
TestState *s,
|
||||
const char *context,
|
||||
int expected,
|
||||
int actual
|
||||
)
|
||||
{
|
||||
void *old_ptr = s->ptr;
|
||||
CompareInts ci;
|
||||
ci.context = context;
|
||||
ci.expected = expected;
|
||||
ci.actual = actual;
|
||||
s->ptr = &ci;
|
||||
run_test(s, compare_ints_test);
|
||||
s->ptr = old_ptr;
|
||||
}
|
||||
|
||||
def_test(compare_ints_test, s)
|
||||
{
|
||||
const CompareInts *ci = s->ptr;
|
||||
if (ci->actual == ci->expected) return test_success;
|
||||
char str[STR_BUF_SIZE];
|
||||
append_test_log(s, ci->context);
|
||||
snprintf(str, STR_BUF_SIZE, "\texpected: %d", ci->expected);
|
||||
append_test_log(s, str);
|
||||
snprintf(str, STR_BUF_SIZE, "\tactual: %d", ci->actual);
|
||||
append_test_log(s, str);
|
||||
return test_failure;
|
||||
}
|
||||
|
||||
//jl
|
||||
Reference in New Issue
Block a user