This would be squashed into the other tests. Signed-off-by: Eric Anholt <e...@anholt.net> --- test/sync/sync.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-)
diff --git a/test/sync/sync.c b/test/sync/sync.c index c39774246841..f25d3fa3774a 100644 --- a/test/sync/sync.c +++ b/test/sync/sync.c @@ -38,13 +38,18 @@ static const int64_t some_values[] = { }; static int64_t +pack_sync_value(xcb_sync_int64_t val) +{ + return ((int64_t)val.hi << 32) | val.lo; +} + +static int64_t counter_value(struct xcb_connection_t *c, xcb_sync_query_counter_cookie_t cookie) { xcb_sync_query_counter_reply_t *reply = xcb_sync_query_counter_reply(c, cookie, NULL); - int64_t value = (((int64_t)reply->counter_value.hi << 32) | - reply->counter_value.lo); + int64_t value = pack_sync_value(reply->counter_value); free(reply); return value; @@ -216,6 +221,66 @@ test_change_counter_overflow(xcb_connection_t *c) } } +static void +test_change_alarm_value(xcb_connection_t *c) +{ + xcb_sync_alarm_t alarm = xcb_generate_id(c); + xcb_sync_query_alarm_cookie_t queries[ARRAY_SIZE(some_values)]; + + xcb_sync_create_alarm(c, alarm, 0, NULL); + + for (int i = 0; i < ARRAY_SIZE(some_values); i++) { + uint32_t values[] = { some_values[i] >> 32, some_values[i] }; + + xcb_sync_change_alarm(c, alarm, XCB_SYNC_CA_VALUE, values); + queries[i] = xcb_sync_query_alarm_unchecked(c, alarm); + } + + for (int i = 0; i < ARRAY_SIZE(some_values); i++) { + xcb_sync_query_alarm_reply_t *reply = + xcb_sync_query_alarm_reply(c, queries[i], NULL); + int64_t value = pack_sync_value(reply->trigger.wait_value); + + if (value != some_values[i]) { + fprintf(stderr, "Setting alarm value to %lld returned %lld\n", + (long long)some_values[i], + (long long)value); + exit(1); + } + free(reply); + } +} + +static void +test_change_alarm_delta(xcb_connection_t *c) +{ + xcb_sync_alarm_t alarm = xcb_generate_id(c); + xcb_sync_query_alarm_cookie_t queries[ARRAY_SIZE(some_values)]; + + xcb_sync_create_alarm(c, alarm, 0, NULL); + + for (int i = 0; i < ARRAY_SIZE(some_values); i++) { + uint32_t values[] = { some_values[i] >> 32, some_values[i] }; + + xcb_sync_change_alarm(c, alarm, XCB_SYNC_CA_DELTA, values); + queries[i] = xcb_sync_query_alarm_unchecked(c, alarm); + } + + for (int i = 0; i < ARRAY_SIZE(some_values); i++) { + xcb_sync_query_alarm_reply_t *reply = + xcb_sync_query_alarm_reply(c, queries[i], NULL); + int64_t value = pack_sync_value(reply->delta); + + if (value != some_values[i]) { + fprintf(stderr, "Setting alarm delta to %lld returned %lld\n", + (long long)some_values[i], + (long long)value); + exit(1); + } + free(reply); + } +} + int main(int argc, char **argv) { int screen; @@ -231,6 +296,8 @@ int main(int argc, char **argv) test_set_counter(c); test_change_counter_basic(c); test_change_counter_overflow(c); + test_change_alarm_value(c); + test_change_alarm_delta(c); xcb_disconnect(c); exit(0); -- 2.13.3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel