ocarina/tests/core/deck.cpp

154 lines
4.0 KiB
C++
Raw Normal View History

/*
* Copyright 2013 (c) Anna Schumaker.
*/
#include <core/deck.h>
extern "C" {
#include <core/filter.h>
#include <core/tags/tags.h>
}
#include <core/library.h>
#include "test.h"
static queue *Q_NULL = NULL;
static struct track *TRACK_NULL = NULL;
static void test_init()
{
unsigned int val;
file f;
std::list<TempQueue>::iterator it;
test_equal(deck :: next(), TRACK_NULL);
test_cp_data_dir();
filter_init();
tags_init();
collection_init(NULL);
deck :: init(NULL, NULL);
test_equal(queue_has_flag(collection_get_queue(), Q_RANDOM), true);
test_equal(deck :: get_queues().size(), (size_t)2);
it = deck :: get_queues().begin();
test_equal(queue_size(&(*it)), (unsigned)4);
for (unsigned int i = 0; i < 4; i++)
test_equal(queue_at(&(*it), i)->tr_dbe.dbe_index, i);
it++;
test_equal(queue_size(&(*it)), (unsigned)5);
for (unsigned int i = 0; i < 5; i++)
test_equal(queue_at(&(*it), i)->tr_dbe.dbe_index, i + 4);
/*
* Test that we saved the deck in the new format
*/
file_init(&f, "deck", 0);
file_open(&f, OPEN_READ);
test_equal(file_version(&f), (unsigned)1);
file_readf(&f, "%u", &val);
test_equal(val, (unsigned)2);
for (unsigned int i = 0; i < 2; i++) {
file_readf(&f, "%u", &val); /* queues[i].flags */
test_equal(val, (unsigned)1);
file_readf(&f, "%u", &val); /* queues[i].size */
test_equal(val, 4 + i);
for (unsigned int j = 0; j < 4 + i; j++) {
file_readf(&f, "%u", &val);
test_equal(val, (4 * i) + j);
}
}
file_close(&f);
}
static void test_create_mv_destroy()
{
queue *q1, *q2;
q1 = deck :: create(true, NULL);
test_not_equal(q1, Q_NULL);
test_equal(queue_has_flag(q1, Q_ENABLED), true);
test_equal(queue_has_flag(q1, Q_RANDOM), true);
test_equal(deck :: index(q1), (unsigned)2);
test_equal(deck :: get(2), q1);
q2 = deck :: create(false, NULL);
test_not_equal(q2, Q_NULL);
test_equal(queue_has_flag(q2, Q_ENABLED), true);
test_equal(queue_has_flag(q2, Q_RANDOM), false);
test_equal(deck :: index(q2), (unsigned)3);
test_equal(deck :: get(3), q2);
deck :: move(q1, 3);
test_equal(deck :: index(q1), (unsigned)3);
deck :: move(q1, 3);
test_equal(deck :: index(q1), (unsigned)3);
deck :: move(q1, 2);
test_equal(deck :: index(q1), (unsigned)2);
deck :: destroy(q1);
test_equal(deck :: index(q1), (unsigned)3);
test_equal(deck :: index(q2), (unsigned)2);
deck :: destroy(q2);
test_equal(deck :: index(q2), (unsigned)2);
test_equal(deck :: get(3), Q_NULL);
}
static void test_next_prev()
{
std::list<TempQueue>::iterator it = deck :: get_queues().begin();
queue *q = deck :: get_queue();
queue *q0 = deck :: get(0);
queue *q1 = deck :: get(1);
queue_unset_flag(q0, Q_RANDOM);
for (unsigned int i = 0; i < 4; i++)
queue_add(q0, track_get(i));
test_not_equal(q, Q_NULL);
test_equal(queue_size(q), (unsigned)0);
test_equal(deck :: prev(), TRACK_NULL);
for (unsigned int i = 0; i < 2; i++) {
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)0);
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)1);
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)2);
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)3);
test_equal(queue_size(q), (unsigned)4);
}
for (unsigned int i = 0; i < 2; i++) {
if (i == 1)
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)3);
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)2);
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)1);
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)0);
}
test_equal(deck :: get_queues().size(), (size_t)1);
test_equal(deck :: index(q1), (unsigned)0);
queue_unset_flag(q1, Q_ENABLED);
queue_unset_flag(collection_get_queue(), Q_RANDOM);
test_equal(queue_size(q1), (unsigned)5);
deck :: next();
test_equal(queue_size(q1), (unsigned)5);
queue_set_flag(q1, Q_ENABLED);
for (unsigned int i = 0; i < 5; i++)
deck :: next();
test_equal(deck :: get_queues().size(), (size_t)0);
}
DECLARE_UNIT_TESTS(
UNIT_TEST("Deck Init", test_init),
UNIT_TEST("Deck Create, Move, and Destroy", test_create_mv_destroy),
UNIT_TEST("Deck Next and Prev", test_next_prev),
);