core/queue: Rewrite unit test
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
973dfb3b90
commit
626eb48933
|
@ -157,7 +157,9 @@ struct track *Queue :: next()
|
|||
{
|
||||
struct track *res;
|
||||
|
||||
if (_tracks.size() == 0)
|
||||
if (!(_flags & Q_ENABLED))
|
||||
return NULL;
|
||||
else if (_tracks.size() == 0)
|
||||
return NULL;
|
||||
else if (_tracks.size() == 1)
|
||||
_cur = 0;
|
||||
|
|
|
@ -10,20 +10,17 @@ extern "C" {
|
|||
#include "test.h"
|
||||
|
||||
|
||||
unsigned int count_add = 0;
|
||||
unsigned int count_del = 0;
|
||||
unsigned int count_added = 0;
|
||||
unsigned int count_deleted = 0;
|
||||
unsigned int count_updated = 0;
|
||||
unsigned int last_update = 0;
|
||||
unsigned int expected = 0;
|
||||
struct track *TRACK_NULL = NULL;
|
||||
|
||||
|
||||
static class TestNotifier : public QNotifier {
|
||||
public:
|
||||
TestNotifier() : QNotifier() {}
|
||||
void on_track_added(unsigned int i) { count_add++; }
|
||||
void on_track_removed(unsigned int i) { count_del++; }
|
||||
void on_track_updated(unsigned int i) { count_updated++; last_update = i; }
|
||||
void on_track_added(unsigned int i) { count_added++; }
|
||||
void on_track_removed(unsigned int i) { count_deleted++; }
|
||||
void on_track_updated(unsigned int i) { count_updated++; }
|
||||
} test_notifier;
|
||||
|
||||
|
||||
|
@ -39,255 +36,287 @@ public:
|
|||
};
|
||||
|
||||
|
||||
void test_default()
|
||||
static void __test_init_core()
|
||||
{
|
||||
TestQueue q;
|
||||
struct library *library;
|
||||
|
||||
test_equal(q.get_cur(), (unsigned)-1);
|
||||
test_equal(q.get_flags(), (unsigned)0);
|
||||
test_equal(q.length(), (unsigned)0);
|
||||
test_equal(q.get_sorder().size(), (size_t)0);
|
||||
test_equal(q.next(), (struct track *)NULL);
|
||||
test_equal(q.get_notify(), &test_notifier);
|
||||
}
|
||||
|
||||
void test_constructor()
|
||||
{
|
||||
unsigned int flags = Q_ENABLED | Q_RANDOM;
|
||||
TestQueue q(flags);
|
||||
|
||||
test_equal(q.get_cur(), (unsigned)-1);
|
||||
test_equal(q.get_flags(), flags);
|
||||
test_equal(q.length(), (unsigned)0);
|
||||
test_equal(q.get_sorder().size(), (size_t)0);
|
||||
test_equal(q.next(), (struct track *)NULL);
|
||||
test_equal(q.get_notify(), &test_notifier);
|
||||
}
|
||||
|
||||
void test_flags()
|
||||
{
|
||||
TestQueue q(0);
|
||||
|
||||
test_equal(q.get_flags(), (unsigned)0);
|
||||
|
||||
q.set_flag(Q_ENABLED);
|
||||
test_equal(q.get_flags(), (unsigned)Q_ENABLED);
|
||||
|
||||
q.unset_flag(Q_ENABLED);
|
||||
test_equal(q.get_flags(), (unsigned)0);
|
||||
|
||||
q.set_flag(Q_REPEAT);
|
||||
q.set_flag(Q_RANDOM);
|
||||
test_equal(q.has_flag(Q_ENABLED), false);
|
||||
test_equal(q.has_flag(Q_RANDOM), true);
|
||||
test_equal(q.has_flag(Q_REPEAT), true);
|
||||
test_equal(q.has_flag(Q_NO_SORT), false);
|
||||
}
|
||||
|
||||
|
||||
void test_add_remove()
|
||||
{
|
||||
TestQueue q(0);
|
||||
struct track *track;
|
||||
|
||||
test_cp_data_dir();
|
||||
filter_init();
|
||||
tags_init();
|
||||
|
||||
test_equal(q.length(), expected);
|
||||
test_equal(q.size(), (unsigned)0);
|
||||
|
||||
/* Add tracks */
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
track = track_get(i);
|
||||
expected += track->tr_length;
|
||||
test_loop_equal(q.add(track), i, i);
|
||||
test_loop_equal(count_add, i + 1, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.length(), expected);
|
||||
test_equal(q.size(), (unsigned)24);
|
||||
|
||||
|
||||
/* Add everything again */
|
||||
for (unsigned int i = 24; i < 48; i++) {
|
||||
track = track_get(i - 24);
|
||||
expected += track->tr_length;
|
||||
test_loop_equal(q.add(track), i, i);
|
||||
test_loop_equal(count_add, i + 1, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.length(), expected);
|
||||
test_equal(q.size(), (unsigned)48);
|
||||
|
||||
|
||||
/* Test removing multiple tracks at once */
|
||||
count_del = 0;
|
||||
for (unsigned int i = 0; i < 12; i++) {
|
||||
track = track_get(i);
|
||||
q.del(track);
|
||||
expected -= track->tr_length * 2;
|
||||
test_loop_equal(count_del, (i + 1) * 2, i);
|
||||
}
|
||||
test_equal(q.length(), expected);
|
||||
test_equal(q.size(), (unsigned)24);
|
||||
|
||||
|
||||
/* Test removing tracks one at a time */
|
||||
count_del = 0;
|
||||
for (unsigned int i = 0; i < 12; i++) {
|
||||
expected -= q[23 - i]->tr_length;
|
||||
q.del((unsigned int)(23 - i));
|
||||
test_loop_equal(count_del, (i + 1), i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.length(), expected);
|
||||
test_equal(q.size(), (unsigned)12);
|
||||
|
||||
|
||||
/* Remove remaining tracks */
|
||||
count_del = 0;
|
||||
for (unsigned int i = 0; i < 12; i++) {
|
||||
expected -= q[0]->tr_length;
|
||||
q.del((unsigned int)0);
|
||||
test_loop_equal(count_del, i + 1, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.length(), (unsigned)0);
|
||||
test_equal(q.size(), (unsigned)0);
|
||||
library = library_find("tests/Music");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/02 - Kokiri Forest.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/03 - Hyrule Field.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/04 - Hyrule Castle.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/05 - Lon Lon Ranch.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/06 - Kakariko Village.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/07 - Death Mountain.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/08 - Zora's Domain.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/09 - Gerudo Valley.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/10 - Ganondorf.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/11 - Princess Zelda.ogg");
|
||||
track_add(library, "tests/Music/Hyrule Symphony/12 - Ocarina Medley.ogg");
|
||||
track_add(library,
|
||||
"tests/Music/Hyrule Symphony/13 - The Legend of Zelda Medley.ogg");
|
||||
}
|
||||
|
||||
static void test_fill_q(TestQueue *q)
|
||||
static void __test_deinit_core()
|
||||
{
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
q->add(track_get(i));
|
||||
tags_deinit();
|
||||
filter_deinit();
|
||||
}
|
||||
|
||||
void test_updated()
|
||||
static void test_init()
|
||||
{
|
||||
TestQueue q;
|
||||
unsigned int flags = Q_ENABLED | Q_RANDOM;
|
||||
|
||||
test_equal(q.get_cur(), (unsigned int)-1);
|
||||
test_equal(q.get_flags(), 0);
|
||||
test_equal(q.length(), 0);
|
||||
test_equal(q.get_sorder().size(), (size_t)0);
|
||||
test_equal(q.next(), (struct track *)NULL);
|
||||
test_equal(q.get_notify(), &test_notifier);
|
||||
|
||||
q = TestQueue(flags);
|
||||
test_equal(q.get_cur(), (unsigned int )-1);
|
||||
test_equal(q.get_flags(), flags);
|
||||
test_equal(q.length(), 0);
|
||||
test_equal(q.get_sorder().size(), 0);
|
||||
test_equal(q.next(), (struct track *)NULL);
|
||||
test_equal(q.get_notify(), &test_notifier);
|
||||
}
|
||||
|
||||
static void test_flags()
|
||||
{
|
||||
struct track *track;
|
||||
TestQueue q(0);
|
||||
|
||||
test_fill_q(&q);
|
||||
test_equal(q.get_flags(), 0);
|
||||
test_equal(q.has_flag(Q_ENABLED), false);
|
||||
test_equal(q.has_flag(Q_RANDOM), false);
|
||||
test_equal(q.has_flag(Q_REPEAT), false);
|
||||
test_equal(q.has_flag(Q_NO_SORT), false);
|
||||
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
q.updated(track_get(i));
|
||||
test_loop_equal(last_update, i, i);
|
||||
test_loop_equal(count_updated, i + 1, i);
|
||||
} test_loop_passed();
|
||||
|
||||
track = track_get(0);
|
||||
q.add(track);
|
||||
q.add(track);
|
||||
q.updated(track);
|
||||
test_equal(count_updated, (unsigned)24 + 3);
|
||||
}
|
||||
|
||||
|
||||
unsigned int expected_rand[] = { 1, 4, 8, 13, 19, 3, 14, 16, 20, 2, 11, 17,
|
||||
23, 6, 12, 18, 0, 5, 9, 10, 15, 21, 22, 7 };
|
||||
|
||||
void test_next()
|
||||
{
|
||||
struct track *track;
|
||||
TestQueue q(0);
|
||||
|
||||
test_fill_q(&q);
|
||||
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
track = q.next();
|
||||
test_loop_not_equal(track, NULL, i);
|
||||
test_loop_equal(track->tr_dbe.dbe_index, i % 24, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.size(), (unsigned)0);
|
||||
test_equal(q.length(), 0);
|
||||
test_equal(q.next(), TRACK_NULL);
|
||||
q.set_flag(Q_ENABLED);
|
||||
test_equal(q.get_flags(), Q_ENABLED);
|
||||
|
||||
q.unset_flag(Q_ENABLED);
|
||||
test_equal(q.get_flags(), 0);
|
||||
|
||||
q.set_flag(Q_ENABLED);
|
||||
q.set_flag(Q_RANDOM);
|
||||
random_seed(0);
|
||||
test_fill_q(&q);
|
||||
q.set_flag(Q_REPEAT);
|
||||
q.set_flag(Q_NO_SORT);
|
||||
test_equal(q.has_flag(Q_ENABLED), true);
|
||||
test_equal(q.has_flag(Q_RANDOM), true);
|
||||
test_equal(q.has_flag(Q_REPEAT), true);
|
||||
test_equal(q.has_flag(Q_NO_SORT), true);
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
track = q.next();
|
||||
test_loop_not_equal(track, NULL, i);
|
||||
test_loop_equal(track->tr_dbe.dbe_index, expected_rand[i], i);
|
||||
static void test_stress(unsigned int N)
|
||||
{
|
||||
unsigned int ex_length = 0;
|
||||
unsigned int ex_size = N;
|
||||
struct track *track;
|
||||
unsigned int i;
|
||||
TestQueue q(0);
|
||||
|
||||
count_added = 0;
|
||||
count_deleted = 0;
|
||||
count_updated = 0;
|
||||
__test_init_core();
|
||||
|
||||
/* Queue :: add() */
|
||||
for (i = 0; i < N; i++) {
|
||||
track = track_get(i % 13);
|
||||
ex_length += track->tr_length;
|
||||
test_loop_equal(q.add(track), i, i);
|
||||
test_loop_equal(count_added, i + 1, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.size(), (unsigned)0);
|
||||
test_equal(q.length(), ex_length);
|
||||
test_equal(q.size(), ex_size);
|
||||
|
||||
/* Queue :: del(struct track *) */
|
||||
track = track_get(0);
|
||||
ex_length -= track->tr_length * (N / 13);
|
||||
ex_size -= (N / 13);
|
||||
q.del(track);
|
||||
test_equal(q.length(), ex_length);
|
||||
test_equal(q.size(), ex_size);
|
||||
|
||||
/* Queue :: del(unsigned int) */
|
||||
track = track_get(1);
|
||||
ex_length -= track->tr_length * (N / 13);
|
||||
ex_size -= (N / 13);
|
||||
for (i = 0; i < ex_size; i += 11) {
|
||||
test_loop_equal(q[i], track, i);
|
||||
q.del(i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.length(), ex_length);
|
||||
test_equal(q.size(), ex_size);
|
||||
|
||||
/* Queue :: updated(struct track *) */
|
||||
track = track_get(2);
|
||||
q.updated(track);
|
||||
test_equal(count_updated, N / 13);
|
||||
|
||||
test_equal(q.next(), NULL);
|
||||
test_equal(q.size(), ex_size);
|
||||
|
||||
/* Tracks should not be removed. */
|
||||
q.set_flag(Q_ENABLED);
|
||||
q.set_flag(Q_REPEAT);
|
||||
for (i = 0; i < ex_size; i++) {
|
||||
test_loop_equal(q.next(), track_get((i % 11) + 2), i);
|
||||
q.track_selected(i);
|
||||
test_loop_equal(q.size(), ex_size, i);
|
||||
} test_loop_passed();
|
||||
|
||||
/* Tracks should be removed. */
|
||||
q.unset_flag(Q_REPEAT);
|
||||
for (i = 0; i < ex_size; i++) {
|
||||
test_loop_equal(q.next(), track_get((i % 11) + 2), i);
|
||||
test_loop_equal(q.size(), ex_size - (i + 1), i);
|
||||
} test_loop_passed();
|
||||
|
||||
test_equal(q.size(), 0);
|
||||
test_equal(q.length(), 0);
|
||||
test_equal(q.next(), TRACK_NULL);
|
||||
}
|
||||
|
||||
static void test_basics() { test_stress(13); }
|
||||
static void test_stress_0() { test_stress(0); }
|
||||
static void test_stress_100K() { test_stress(100009); }
|
||||
|
||||
q.set_flag(Q_REPEAT);
|
||||
q.unset_flag(Q_RANDOM);
|
||||
test_fill_q(&q);
|
||||
static void test_rand_select()
|
||||
{
|
||||
TestQueue q(Q_ENABLED | Q_RANDOM);
|
||||
unsigned int i;
|
||||
|
||||
for (unsigned int i = 0; i < 48; i++) {
|
||||
track = q.next();
|
||||
test_loop_not_equal(track, NULL, i);
|
||||
test_loop_equal(track->tr_dbe.dbe_index, i % 24, i);
|
||||
random_seed(0);
|
||||
|
||||
/* Call next() on an empty queue. */
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q.next(), NULL, i);
|
||||
test_loop_equal(q.size(), 0, i);
|
||||
} test_loop_passed();
|
||||
test_equal(q.size(), (unsigned)24);
|
||||
}
|
||||
|
||||
void test_select()
|
||||
{
|
||||
TestQueue q(0);
|
||||
for (i = 0; i < 13; i++)
|
||||
q.add(track_get(i));
|
||||
|
||||
test_fill_q(&q);
|
||||
/*
|
||||
* The comments below use the following notation:
|
||||
* <val>: The value pointed to by q._cur.
|
||||
* (val): The value selected by q.track_selected().
|
||||
* [val]: The value picked by q.next().
|
||||
*/
|
||||
|
||||
test_equal(q.size(), (unsigned)24);
|
||||
q.track_selected(10);
|
||||
test_equal(q.size(), (unsigned)23);
|
||||
test_equal(q.next()->tr_dbe.dbe_index, (unsigned)11);
|
||||
/* rand() = 2, q = { <>, 0, [1], 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 1);
|
||||
|
||||
q.set_flag(Q_REPEAT);
|
||||
/* select = 6, q = { <0>, 2, 3, 4, 5, 6, (7), 8, 9, 10, 11, 12 } */
|
||||
q.track_selected(6);
|
||||
test_equal(q.size(), 11);
|
||||
|
||||
/* rand() = 3, q = { 0, 2, 3, 4, 5, <6>, 8, 9, [10], 11, 12 } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 10);
|
||||
|
||||
/* select = 7, q = { 0, 2, 3, 4, 5, 6, 8, (<9>), 11, 12 } */
|
||||
q.track_selected(7);
|
||||
test_equal(q.size(), 9);
|
||||
|
||||
/* rand() = 4, q = { 0, 2, 3, 4, 5, 6, <8>, [11], 12 } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 11);
|
||||
|
||||
/* select = 2, q = { 0, 2, (3), 4, 5, 6, <8>, 12 } */
|
||||
q.track_selected(2);
|
||||
test_equal(q.size(), 7);
|
||||
|
||||
/* rand() = 1, q = { 0, <2>, [4], 5, 6, 8, 12 } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 4);
|
||||
|
||||
/* select = 1, q = { 0, <2>, 5, 6, 8, (12) } */
|
||||
q.track_selected(5);
|
||||
test_equal(q.size(), 5);
|
||||
|
||||
/* rand() = 1, q = { [0], 2, 5, 6, <8>, } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 0);
|
||||
|
||||
/* rand() = 1, q = { <>, [2], 5, 6, 8, } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 2);
|
||||
|
||||
/* select = 1, q = { <>, 5, (6), 8, } */
|
||||
q.track_selected(1);
|
||||
test_equal(q.size(), 2);
|
||||
|
||||
/* rand() = 1, q = { <5>, [8], } */
|
||||
test_equal(q.next()->tr_dbe.dbe_index, 8);
|
||||
|
||||
/* select = 1, q = { <[5]> } */
|
||||
q.track_selected(0);
|
||||
test_equal(q.size(), (unsigned)22);
|
||||
test_equal(q.next()->tr_dbe.dbe_index, (unsigned)1);
|
||||
test_equal(q.size(), 0);
|
||||
|
||||
/* q = { } */
|
||||
test_equal(q.next(), NULL);
|
||||
}
|
||||
|
||||
|
||||
unsigned int exp_sort_title[] = { 1, 18, 19, 16, 20, 8, 2, 9, 23, 10, 17, 11,
|
||||
3, 21, 4, 0, 5, 22, 6, 12, 7, 13, 14, 15 };
|
||||
unsigned int exp_sort_ye_ti[] = { 0, 3, 2, 1, 7, 6, 5, 4, 11, 10, 9, 8,
|
||||
17, 16, 19, 18, 22, 21, 23, 20, 15, 14, 13, 12 };
|
||||
|
||||
void test_sorting()
|
||||
static void test_sorting()
|
||||
{
|
||||
unsigned int ex_count[] = { 6, 7, 8, 9, 10, 11, 12, 0, 1, 2, 3, 4, 5 };
|
||||
unsigned int ex_title[] = { 6, 9, 8, 3, 2, 5, 1, 4, 11, 10, 12, 0, 7 };
|
||||
unsigned int ex_co_ti[] = { 3, 2, 5, 1, 4, 0, 6, 9, 8, 11, 10, 12, 7 };
|
||||
struct track *track;
|
||||
TestQueue q(0);
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < 13; i++) {
|
||||
track = track_get(i);
|
||||
track->tr_count = (i < 6) ? 4 : 2;
|
||||
q.add(track);
|
||||
}
|
||||
|
||||
q.sort(COMPARE_COUNT, true);
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, ex_count[i], i);
|
||||
} test_loop_passed();
|
||||
|
||||
q.set_flag(Q_NO_SORT);
|
||||
q.sort(COMPARE_TITLE, true);
|
||||
test_equal(q.get_sorder().size(), (size_t)1);
|
||||
test_fill_q(&q);
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, exp_sort_title[i], i);
|
||||
test_loop_passed();
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, ex_count[i], i);
|
||||
} test_loop_passed();
|
||||
|
||||
q.sort(COMPARE_TITLE, false);
|
||||
test_equal(q.get_sorder().size(), (size_t)1);
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, exp_sort_title[23 - i], i);
|
||||
test_loop_passed();
|
||||
q.unset_flag(Q_NO_SORT);
|
||||
q.sort(COMPARE_TITLE, true);
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, ex_title[i], i);
|
||||
} test_loop_passed();
|
||||
|
||||
q.sort(COMPARE_LENGTH, true);
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, i, i);
|
||||
test_loop_passed();
|
||||
q.sort(COMPARE_COUNT, true);
|
||||
q.sort(COMPARE_TITLE, false);
|
||||
q.sort(COMPARE_COUNT, false);
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, ex_co_ti[i], i);
|
||||
} test_loop_passed();
|
||||
|
||||
q.sort(COMPARE_YEAR, true);
|
||||
q.sort(COMPARE_TITLE, false);
|
||||
q.sort(COMPARE_TITLE, false);
|
||||
test_equal(q.get_sorder().size(), (size_t)2);
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, exp_sort_ye_ti[i], i);
|
||||
test_loop_passed();
|
||||
q.sort(COMPARE_ARTIST, true);
|
||||
q.sort(COMPARE_ALBUM, false);
|
||||
q.sort(COMPARE_TRACK, false);
|
||||
q.sort(COMPARE_TRACK, false);
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, 12 - i, i);
|
||||
} test_loop_passed();
|
||||
}
|
||||
|
||||
|
||||
void test_saving()
|
||||
static void test_save_load()
|
||||
{
|
||||
TestQueue q(Q_RANDOM);
|
||||
TestQueue r(0);
|
||||
file f;
|
||||
TestQueue q(Q_RANDOM), r(0);
|
||||
unsigned int i;
|
||||
struct file f;
|
||||
|
||||
test_fill_q(&q);
|
||||
for (i = 0; i < 13; i++)
|
||||
q.add(track_get(i));
|
||||
q.sort(COMPARE_TRACK, true);
|
||||
q.sort(COMPARE_TRACK, false);
|
||||
|
||||
file_init(&f, "test.q", 0);
|
||||
file_open(&f, OPEN_WRITE);
|
||||
|
@ -298,23 +327,24 @@ void test_saving()
|
|||
r.read(f);
|
||||
file_close(&f);
|
||||
|
||||
test_equal(r.has_flag(Q_RANDOM), q.has_flag(Q_RANDOM));
|
||||
test_equal(r.size(), q.size());
|
||||
test_equal(r.has_flag(Q_RANDOM), true);
|
||||
test_equal(r.length(), q.length());
|
||||
test_equal(r.size(), 13);
|
||||
|
||||
for (unsigned int i = 0; i < 24; i++)
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, r[i]->tr_dbe.dbe_index, i);
|
||||
test_loop_passed();
|
||||
for (i = 0; i < 13; i++) {
|
||||
test_loop_equal(q[i]->tr_dbe.dbe_index, 12 - i, i);
|
||||
} test_loop_passed();
|
||||
|
||||
__test_deinit_core();
|
||||
}
|
||||
|
||||
DECLARE_UNIT_TESTS(
|
||||
UNIT_TEST("Queue Default Constructor", test_default),
|
||||
UNIT_TEST("Queue Constructor", test_constructor),
|
||||
UNIT_TEST("Queue Initialization", test_init),
|
||||
UNIT_TEST("Queue Flags", test_flags),
|
||||
UNIT_TEST("Queue Add and Remove", test_add_remove),
|
||||
UNIT_TEST("Queue Track Updated", test_updated),
|
||||
UNIT_TEST("Queue Pick Next Track", test_next),
|
||||
UNIT_TEST("Queue Select Track", test_select),
|
||||
UNIT_TEST("Queue Basics", test_basics),
|
||||
UNIT_TEST("Queue Stress (n = 0)", test_stress_0),
|
||||
UNIT_TEST("Queue Stress (n = 100,000)", test_stress_100K),
|
||||
UNIT_TEST("Queue Random Next and Selection", test_rand_select),
|
||||
UNIT_TEST("Queue Sorting", test_sorting),
|
||||
UNIT_TEST("Queue Save and Load", test_saving),
|
||||
UNIT_TEST("Queue Save and Load", test_save_load),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue