/* * Copyright 2014 (c) Anna Schumaker. */ #include #include #include #include "test.h" unsigned int count_add = 0; class TestQueue : public Queue { public: TestQueue() : Queue() {} TestQueue(unsigned int f) : Queue(f) {} unsigned int get_cur() { return _cur; } unsigned int get_flags() { return _flags; } unsigned int get_length() { return _length; } std::list get_sorder() { return _sort_order; }; }; void test_default() { TestQueue q; test :: equal(q.get_cur(), (unsigned)-1); test :: equal(q.get_flags(), (unsigned)0); test :: equal(q.get_length(), (unsigned)0); test :: equal(q.get_sorder().size(), (size_t)0); test :: equal(q.next(), (Track *)NULL); } void test_constructor(unsigned int flags) { TestQueue q(flags | (1 << 30)); test :: equal(q.get_cur(), (unsigned)-1); test :: equal(q.get_flags(), flags); test :: equal(q.get_length(), (unsigned)0); test :: equal(q.get_sorder().size(), (size_t)0); test :: equal(q.next(), (Track *)NULL); } 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_cb(Queue *q, unsigned int id) { check_equal(id, count_add); count_add++; } void test_add_remove() { TestQueue q(0); unsigned int expected = 0; get_callbacks()->on_queue_track_add = test_add_cb; test :: begin(); for (unsigned int i = 0; i < 24; i++) { check_equal(q.add(tagdb :: lookup(i)), i); expected += 100 + (i * 10); } test :: success(); test :: equal(q.get_length(), expected); } int main(int argc, char **argv) { test :: cp_library(); tagdb :: init(); run_test("Queue Default Constructor Test", test_default); run_test("Queue Constructor Test", test_constructor, Q_ENABLED | Q_RANDOM); run_test("Queue Flag Test", test_flags); run_test("Queue Add and Remove Test", test_add_remove); return 0; }