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:
parent
cf861473df
commit
711eb67f44
|
@ -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)
|
||||
|
|
|
@ -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 *);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue