Newer
Older
lambda-avr / lambda-test / scheduler-test.c
/*
 * scheduler-test.c
 *
 *  Created on: 20.03.2016
 *      Author: dode@luniks.net
 */

#include "avrjunit.h"
#include "integers.h"
#include "interrupts.h"
#include "scheduler.h"

/* Module scheduler */

static bool val1 = false;
static bool val2 = false;
static bool val3 = false;
static bool val4 = false;

static void task1(void) {
	val1 = true;
}

static void task2(void) {
	val2 = true;
}

static void task3(void) {
	val3 = true;
}

static void task4(void) {
	val4 = true;
}

static void runAllTasks(void) {
	resetTime();
	// make sure any tasks scheduled by other tests run
	addTime(UINT32_MAX);
	runTasks();
}

static bool testSchedule(void) {

	runAllTasks();
	resetTime();

	assertTrue(scheduleTask(task1, 0));
	assertTrue(scheduleTask(task2, 10));
	assertTrue(scheduleTask(task3, 20));
	assertFalse(scheduleTask(task4, 30));

	return true;
}

static bool testRunTasks(void) {

	resetTime();

	runTasks();
	assertTrue(val1);
	assertFalse(val2);
	assertFalse(val3);
	assertFalse(val4);
	assertTrue(scheduleTask(task4, 30));

	addTime(10);

	runTasks();
	assertTrue(val1);
	assertTrue(val2);
	assertFalse(val3);
	assertFalse(val4);

	addTime(15);

	runTasks();
	assertTrue(val1);
	assertTrue(val2);
	assertTrue(val3);
	assertFalse(val4);

	addTime(30);

	runTasks();
	assertTrue(val1);
	assertTrue(val2);
	assertTrue(val3);
	assertTrue(val4);

	return true;
}

/* Test "class" */
static const char class[] PROGMEM = "scheduler";

/* Test names */
static const char testSchedule_P[] PROGMEM = "testSchedule";
static const char testRunTasks_P[] PROGMEM = "testRunTasks";

/* Tests */
static TestCase const tests[] = {
		{class, testSchedule_P, testSchedule},
		{class, testRunTasks_P, testRunTasks}
};

TestClass schedulerClass = {tests, ARRAY_LENGTH(tests)};