[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