SensorEventQueue_test.cpp revision 92863c14b7d36f74ec715b45ca6adc8bf95dc87c
1#include <stdio.h>
2#include <stdlib.h>
3#include <hardware/sensors.h>
4#include <pthread.h>
5#include <cutils/atomic.h>
6
7#include "SensorEventQueue.cpp"
8
9// Unit tests for the SensorEventQueue.
10
11// Run it like this:
12//
13// make sensorstests -j32 && \
14// out/host/linux-x86/obj/EXECUTABLES/sensorstests_intermediates/sensorstests
15
16bool checkWritableBufferSize(SensorEventQueue* queue, int requested, int expected) {
17    sensors_event_t* buffer;
18    int actual = queue->getWritableRegion(requested, &buffer);
19    if (actual != expected) {
20        printf("Expected buffer size was %d; actual was %d\n", expected, actual);
21        return false;
22    }
23    return true;
24}
25
26bool checkSize(SensorEventQueue* queue, int expected) {
27    int actual = queue->getSize();
28    if (actual != expected) {
29        printf("Expected queue size was %d; actual was %d", expected, actual);
30        return false;
31    }
32    return true;
33}
34
35bool testSimpleWriteSizeCounts() {
36    printf("TEST testSimpleWriteSizeCounts\n");
37    SensorEventQueue* queue = new SensorEventQueue(10);
38    if (!checkSize(queue, 0)) return false;
39    if (!checkWritableBufferSize(queue, 11, 10)) return false;
40    if (!checkWritableBufferSize(queue, 10, 10)) return false;
41    if (!checkWritableBufferSize(queue, 9, 9)) return false;
42
43    queue->markAsWritten(7);
44    if (!checkSize(queue, 7)) return false;
45    if (!checkWritableBufferSize(queue, 4, 3)) return false;
46    if (!checkWritableBufferSize(queue, 3, 3)) return false;
47    if (!checkWritableBufferSize(queue, 2, 2)) return false;
48
49    queue->markAsWritten(3);
50    if (!checkSize(queue, 10)) return false;
51    if (!checkWritableBufferSize(queue, 1, 0)) return false;
52
53    printf("passed\n");
54    return true;
55}
56
57bool testWrappingWriteSizeCounts() {
58    printf("TEST testWrappingWriteSizeCounts\n");
59    SensorEventQueue* queue = new SensorEventQueue(10);
60    queue->markAsWritten(9);
61    if (!checkSize(queue, 9)) return false;
62
63    // dequeue from the front
64    queue->dequeue();
65    queue->dequeue();
66    if (!checkSize(queue, 7)) return false;
67    if (!checkWritableBufferSize(queue, 100, 1)) return false;
68
69    // Write all the way to the end.
70    queue->markAsWritten(1);
71    if (!checkSize(queue, 8)) return false;
72    // Now the two free spots in the front are available.
73    if (!checkWritableBufferSize(queue, 100, 2)) return false;
74
75    // Fill the queue again
76    queue->markAsWritten(2);
77    if (!checkSize(queue, 10)) return false;
78
79    printf("passed\n");
80    return true;
81}
82
83int main(int argc, char **argv) {
84    if (testSimpleWriteSizeCounts() &&
85            testWrappingWriteSizeCounts()) {
86        printf("ALL PASSED\n");
87    } else {
88        printf("SOMETHING FAILED\n");
89    }
90    return EXIT_SUCCESS;
91}
92