[PATCH] test: Add unit test for mieq
Peter Hutterer
peter.hutterer at who-t.net
Thu Oct 20 23:11:20 PDT 2011
On Wed, Oct 19, 2011 at 10:55:46AM -0700, Jeremy Huddleston wrote:
>
> On Oct 18, 2011, at 10:03 PM, Peter Hutterer wrote:
>
> > On Mon, Oct 17, 2011 at 11:59:38PM -0700, Jeremy Huddleston wrote:
> >>
> >> Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
> >> ---
> >>
> >> The comments only really make sense wrt the mieq changes that I have pending, but the test should work regardless.
> >>
> >> test/input.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >> 1 files changed, 69 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/test/input.c b/test/input.c
> >> index a483957..5125dd7 100644
> >> --- a/test/input.c
> >> +++ b/test/input.c
> >> @@ -40,6 +40,7 @@
> >> #include "dixgrabs.h"
> >> #include "eventstr.h"
> >> #include "inpututils.h"
> >> +#include "mi.h"
> >> #include "assert.h"
> >>
> >> /**
> >> @@ -1592,6 +1593,73 @@ dix_double_fp_conversion(void)
> >> }
> >> }
> >>
> >> +/* The mieq test verifies that events added to the queue come out in the same
> >> + * order that they went in.
> >> + */
> >> +static uint32_t mieq_test_event_last_processed;
> >> +
> >> +static void
> >> +mieq_test_event_handler(int screenNum, InternalEvent *ie, DeviceIntPtr dev) {
> >> + RawDeviceEvent *e = (RawDeviceEvent *)ie;
> >> +
> >> + assert(e->type == ET_RawMotion);
> >> + assert(e->flags > mieq_test_event_last_processed);
> >> + mieq_test_event_last_processed = e->flags;
> >> +}
> >> +
> >> +static void _mieq_test_generate_events(uint32_t start, uint32_t count) {
> >> + count += start;
> >> + while (start < count) {
> >> + RawDeviceEvent e = {0};
> >> + e.header = ET_Internal;
> >> + e.type = ET_RawMotion;
> >> + e.length = sizeof(e);
> >> + e.time = GetTimeInMillis();
> >> + e.flags = start;
> >> +
> >> + mieqEnqueue(NULL, (InternalEvent*)&e);
> >> +
> >> + start++;
> >> + }
> >> +}
> >> +
> >> +#define mieq_test_generate_events(c) { _mieq_test_generate_events(next, c); next += c; }
> >> +
> >> +static void
> >> +mieq_test(void) {
> >> + uint32_t next = 1;
> >> +
> >> + mieq_test_event_last_processed = 0;
> >> + mieqInit();
> >> + mieqSetHandler(ET_RawMotion, mieq_test_event_handler);
> >> +
> >> + /* Enough to fit the buffer but trigger a grow */
> >> + mieq_test_generate_events(180);
> >> +
> >> + /* We should resize to 512 now */
> >> + mieqProcessInputEvents();
> >
> > "should" could be tested against with an assert. a simple
> > assert(miEventQueue->nevents == 512) would do here.
> > likewise, you can test for the right number of dropped events.
> > other than that, the output looks correct.
> >
> > I'd like to see an extra test that just tests mieqGrowQueue and makes sure
> > it is sane.
>
> Yeah, I thought about doing that, but it would require a redesign of
> mieq.c to expose internals, something I'm not keen on doing in a patch to
> add this test case.
>
> If you really want to do that, we should do it in 2 separate commits, one
> to rework mieq.c to expose that functionality, and one to add that to this
> test.
yeah, fair enough.
>
> > it's too easy to mix up the argument and the global
> > mieqEventQueue because chances are they're the same in virtually all cases.
> > A simple test that doesn't sue mieqEventQueue as argument would help there.
>
> I agree, but can we do that separately due to the reasons above?
sure. rev-by for the mieq set currently on your master
ccfc873671f48780adb64080f606c20543d3fbf3
Cheers,
Peter
More information about the xorg-devel
mailing list