core/queue: Fix queue random and selection test

6.4.8 changed how random tracks are selected, but never updated the unit
test.  This patch fixes the unit test, and makes a few changes to make
sure the right tracks are getting selected.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-03-27 12:19:28 -04:00
parent cf861473df
commit 711eb67f44
3 changed files with 40 additions and 29 deletions

View File

@ -166,11 +166,13 @@ void queue_updated(struct queue *queue, struct track *track)
}
}
void queue_selected(struct queue *queue, unsigned int index)
struct track *queue_selected(struct queue *queue, unsigned int index)
{
if (index > queue_size(queue))
return NULL;
if (queue->q_cur.it_pos != index)
_q_iter_set(&queue->q_tracks, &queue->q_cur, index);
__queue_selected(queue);
return __queue_selected(queue);
}
struct track *queue_next(struct queue *queue)

View File

@ -104,7 +104,7 @@ void queue_updated(struct queue *, struct track *);
/* Called to tell the queue that a specific index has been selected. */
void queue_selected(struct queue *, unsigned int);
struct track *queue_selected(struct queue *, unsigned int);
/* Called to pick the next track from the queue. */
struct track *queue_next(struct queue *);

View File

@ -259,6 +259,7 @@ static void test_rand_select()
for (i = 0; i < 13; i++)
queue_add(&q, track_get(i));
queue_sort(&q, COMPARE_TRACK, true);
/*
* The comments below use the following notation:
@ -267,53 +268,61 @@ static void test_rand_select()
* [val]: The value picked by q.next().
*/
/* rand() = 2, q = { <>, 0, [1], 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 1);
/* rand() = 2, q = { <>, 1, [2], 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 } */
test_equal(queue_next(&q)->tr_track, 2);
test_equal(queue_size(&q), 12);
/* select = 6, q = { <0>, 2, 3, 4, 5, 6, (7), 8, 9, 10, 11, 12 } */
queue_selected(&q, 6);
/* select = 6, q = { <1>, 3, 4, 5, 6, 7, (8), 9, 10, 11, 12, 13 } */
test_equal(queue_selected(&q, 6)->tr_track, 8);
test_equal(queue_size(&q), 11);
/* rand() = 3, q = { 0, 2, 3, 4, 5, <6>, 8, 9, [10], 11, 12 } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 10);
/* rand() = 2, q = { 1, 3, 4, 5, 6, <7>, 9, 10, [11], 12, 13 } */
test_equal(queue_next(&q)->tr_track, 11);
test_equal(queue_size(&q), 10);
/* select = 7, q = { 0, 2, 3, 4, 5, 6, 8, (<9>), 11, 12 } */
queue_selected(&q, 7);
/* select = 7, q = { 1, 3, 4, 5, 6, 7, 9, (<10>), 12, 13 } */
test_equal(queue_selected(&q, 7)->tr_track, 10);
test_equal(queue_size(&q), 9);
/* rand() = 4, q = { 0, 2, 3, 4, 5, 6, <8>, [11], 12 } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 11);
/* rand() = 4, q = { 1, [3], 4, 5, 6, 7, <9>, 12, 13 } */
test_equal(queue_next(&q)->tr_track, 3);
test_equal(queue_size(&q), 8);
/* select = 2, q = { 0, 2, (3), 4, 5, 6, <8>, 12 } */
queue_selected(&q, 2);
/* select = 2, q = { <1>, 4, (5), 6, 7, 9, 12, 13 } */
test_equal(queue_selected(&q, 2)->tr_track, 5);
test_equal(queue_size(&q), 7);
/* rand() = 1, q = { 0, <2>, [4], 5, 6, 8, 12 } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 4);
/* rand() = 5, q = { 1, <4>, 6, 7, 9, 12, [13] } */
test_equal(queue_next(&q)->tr_track, 13);
test_equal(queue_size(&q), 6);
/* select = 1, q = { 0, <2>, 5, 6, 8, (12) } */
queue_selected(&q, 5);
/* select = 1, q = { 1, (4), 6, 7, 9, <12> } */
test_equal(queue_selected(&q, 1)->tr_track, 4);
test_equal(queue_size(&q), 5);
/* rand() = 1, q = { [0], 2, 5, 6, <8>, } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 0);
/* rand() = 2, q = { <1>, 6, [7], 9, 12 } */
test_equal(queue_next(&q)->tr_track, 7);
test_equal(queue_size(&q), 4);
/* rand() = 1, q = { <>, [2], 5, 6, 8, } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 2);
/* rand() = 1, q = { 1, <6>, [9], 12 } */
test_equal(queue_next(&q)->tr_track, 9);
test_equal(queue_size(&q), 3);
/* select = 1, q = { <>, 5, (6), 8, } */
queue_selected(&q, 1);
/* select = 1, q = { 1, (<6>), 12 } */
test_equal(queue_selected(&q, 1)->tr_track, 6);
test_equal(queue_size(&q), 2);
/* rand() = 1, q = { <5>, [8], } */
test_equal(queue_next(&q)->tr_dbe.dbe_index, 8);
/* rand() = 1, q = { <1>, [12] } */
test_equal(queue_next(&q)->tr_track, 12);
test_equal(queue_size(&q), 1);
/* select = 1, q = { <[5]> } */
queue_selected(&q, 0);
/* select = 0, q = { <1> } */
test_equal(queue_selected(&q, 0)->tr_track, 1);
test_equal(queue_size(&q), 0);
/* q = { } */
test_equal((void *)queue_next(&q), NULL);
test_equal((void *)queue_selected(&q, 3), NULL);
queue_deinit(&q);
}