/* * Copyright 2013 (c) Anna Schumaker. */ #include extern "C" { #include #include } #include #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::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::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), );