/* * Copyright 2013 (c) Anna Schumaker. */ #include #include #include #include "test.h" static Queue *Q_NULL = NULL; static Track *TRACK_NULL = NULL; static void test_init() { unsigned int val; File f("deck", 0); std::list::iterator it; test_equal(deck :: next(), TRACK_NULL); test :: cp_data_dir(); tagdb :: init(); library :: init(); deck :: init(); test_equal(library :: get_queue()->has_flag(Q_RANDOM), true); test_equal(deck :: get_queues().size(), (size_t)2); it = deck :: get_queues().begin(); test_equal(it->size(), (unsigned)4); for (unsigned int i = 0; i < 4; i++) test_equal((*it)[i]->id, i); it++; test_equal(it->size(), (unsigned)5); for (unsigned int i = 0; i < 5; i++) test_equal((*it)[i]->id, i + 4); /* * Test that we saved the deck in the new format */ f.open(OPEN_READ); test_equal(f.get_version(), (unsigned)1); f >> val; /* number of queues */ test_equal(val, (unsigned)2); for (unsigned int i = 0; i < 2; i++) { f >> val; /* queues[i].flags */ test_equal(val, (unsigned)1); f >> val; /* queues[i].size */ test_equal(val, 4 + i); for (unsigned int j = 0; j < 4 + i; j++) { f >> val; test_equal(val, (4 * i) + j); } } f.close(); } static unsigned int n = 0; static void on_queue_removed(Queue *queue) { n++; } static void test_create_mv_destroy() { Queue *q1, *q2; q1 = deck :: create(true); test_not_equal(q1, Q_NULL); test_equal(q1->has_flag(Q_ENABLED), true); test_equal(q1->has_flag(Q_RANDOM), true); test_equal(deck :: index(q1), (unsigned)2); q2 = deck :: create(false); test_not_equal(q2, Q_NULL); test_equal(q2->has_flag(Q_ENABLED), true); test_equal(q2->has_flag(Q_RANDOM), false); test_equal(deck :: index(q2), (unsigned)3); 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); get_callbacks()->on_pq_removed = on_queue_removed; deck :: destroy(q1); test_equal(n, (unsigned)1); test_equal(deck :: index(q1), (unsigned)3); test_equal(deck :: index(q2), (unsigned)2); deck :: destroy(q2); test_equal(n, (unsigned)2); test_equal(deck :: index(q2), (unsigned)2); } static void test_next_prev() { std::list::iterator it = deck :: get_queues().begin(); Queue *q = deck :: get_queue(); Queue *q0 = &(*it++); Queue *q1 = &(*it++); q0->unset_flag(Q_RANDOM); for (unsigned int i = 0; i < 4; i++) q0->add(tagdb :: lookup(i)); test_not_equal(q, Q_NULL); test_equal(q->size(), (unsigned)0); test_equal(deck :: prev(), TRACK_NULL); for (unsigned int i = 0; i < 2; i++) { test_equal(deck :: next()->id, (unsigned)0); test_equal(deck :: next()->id, (unsigned)1); test_equal(deck :: next()->id, (unsigned)2); test_equal(deck :: next()->id, (unsigned)3); test_equal(q->size(), (unsigned)4); } for (unsigned int i = 0; i < 2; i++) { if (i == 1) test_equal(deck :: prev()->id, (unsigned)3); test_equal(deck :: prev()->id, (unsigned)2); test_equal(deck :: prev()->id, (unsigned)1); test_equal(deck :: prev()->id, (unsigned)0); } test_equal(deck :: get_queues().size(), (size_t)1); test_equal(deck :: index(q1), (unsigned)0); q1->unset_flag(Q_ENABLED); library :: get_queue()->unset_flag(Q_RANDOM); test_equal(q1->size(), (unsigned)5); deck :: next(); test_equal(q1->size(), (unsigned)5); q1->set_flag(Q_ENABLED); for (unsigned int i = 0; i < 5; i++) deck :: next(); test_equal(deck :: get_queues().size(), (size_t)0); } int main(int argc, char **argv) { run_test("Deck Init Test", test_init); run_test("Deck Create, Move and Destroy Test", test_create_mv_destroy); run_test("Deck Next and Prev Test", test_next_prev); return 0; }