This repository has been archived on 2021-05-26. You can view files and clone it, but cannot push or open issues or pull requests.
OS/pintos-env/pintos/tests/threads/tests.c

105 lines
2.7 KiB
C
Executable File

#include "tests/threads/tests.h"
#include <debug.h>
#include <string.h>
#include <stdio.h>
struct test
{
const char *name;
test_func *function;
};
static const struct test tests[] =
{
{"alarm-single", test_alarm_single},
{"alarm-multiple", test_alarm_multiple},
{"alarm-simultaneous", test_alarm_simultaneous},
{"alarm-priority", test_alarm_priority},
{"alarm-zero", test_alarm_zero},
{"alarm-negative", test_alarm_negative},
{"priority-change", test_priority_change},
{"priority-donate-one", test_priority_donate_one},
{"priority-donate-multiple", test_priority_donate_multiple},
{"priority-donate-multiple2", test_priority_donate_multiple2},
{"priority-donate-nest", test_priority_donate_nest},
{"priority-donate-sema", test_priority_donate_sema},
{"priority-donate-lower", test_priority_donate_lower},
{"priority-donate-chain", test_priority_donate_chain},
{"priority-fifo", test_priority_fifo},
{"priority-preempt", test_priority_preempt},
{"priority-sema", test_priority_sema},
{"priority-condvar", test_priority_condvar},
{"mlfqs-load-1", test_mlfqs_load_1},
{"mlfqs-load-60", test_mlfqs_load_60},
{"mlfqs-load-avg", test_mlfqs_load_avg},
{"mlfqs-recent-1", test_mlfqs_recent_1},
{"mlfqs-fair-2", test_mlfqs_fair_2},
{"mlfqs-fair-20", test_mlfqs_fair_20},
{"mlfqs-nice-2", test_mlfqs_nice_2},
{"mlfqs-nice-10", test_mlfqs_nice_10},
{"mlfqs-block", test_mlfqs_block},
{"test_hello", test_hello},
{"test_list", test_list},
};
static const char *test_name;
/* Runs the test named NAME. */
void
run_test (const char *name)
{
const struct test *t;
for (t = tests; t < tests + sizeof tests / sizeof *tests; t++)
if (!strcmp (name, t->name))
{
test_name = name;
msg ("begin");
t->function ();
msg ("end");
return;
}
PANIC ("no test named \"%s\"", name);
}
/* Prints FORMAT as if with printf(),
prefixing the output by the name of the test
and following it with a new-line character. */
void
msg (const char *format, ...)
{
va_list args;
printf ("(%s) ", test_name);
va_start (args, format);
vprintf (format, args);
va_end (args);
putchar ('\n');
}
/* Prints failure message FORMAT as if with printf(),
prefixing the output by the name of the test and FAIL:
and following it with a new-line character,
and then panics the kernel. */
void
fail (const char *format, ...)
{
va_list args;
printf ("(%s) FAIL: ", test_name);
va_start (args, format);
vprintf (format, args);
va_end (args);
putchar ('\n');
PANIC ("test failed");
}
/* Prints a message indicating the current test passed. */
void
pass (void)
{
printf ("(%s) PASS\n", test_name);
}