diff options
Diffstat (limited to 'xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m')
-rw-r--r-- | xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m b/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m new file mode 100644 index 000000000..057cad9da --- /dev/null +++ b/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m @@ -0,0 +1,295 @@ +/* + * Copyright 1990, 1991 by the Massachusetts Institute of Technology and + * UniSoft Group Limited. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the names of MIT and UniSoft not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. MIT and UniSoft + * make no representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * $XConsortium$ + */ +>>TITLE XParseGeometry CH10 +int +XParseGeometry(parsestring, x_return, y_return, width_return, height_return) +char *parsestring; +int *x_return; +int *y_return; +>># Documentation says 'int' for the width and height. Changed to unsigned +>># here to match the header prototype which is consistant with the +>># use of unsigned for other width and height parameters. +unsigned int *width_return; +unsigned int *height_return; +>>ASSERTION Good A +>># +>># .Ds +>># [=][<width>x<height>][{+-}<xoffset>{+-}<yoffset>], +>># [=][<\fIwidth\fP>x<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>] +>># .De +>># +When the +.A parsestring +argument is a string of the form +.Ds +[=][<\fIwidth\fP>x<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>] +.De +then a call to xname returns a bitwise OR of +.S "WidthValue | HeightValue" , +.S "XValue | YValue" , +.S XNegative +or +.S YNegative +depending on whether the height and width are specified, whether the offsets are specified +and on the sign of the specified offsets respectively. +>>STRATEGY +For geometry strings covering each case of interest + Parse string with xname. + Verify that correct flags are set. + For each value + If corresponding flag is set + Verify that value is set correctly. + else + Verify that value is unchanged. +>>CODE +#define DEFV 123 +static struct list { + char *pstr; /* Parse string */ + int flags; /* returned flags */ + int x; + int y; + unsigned int width; + unsigned int height; +} list[] = { + {"=10x20", WidthValue|HeightValue, DEFV, DEFV, 10, 20}, + {"=+10+20", XValue|YValue, 10, 20, DEFV, DEFV}, + {"=1x2-10-20", WidthValue|HeightValue|XValue|YValue|XNegative|YNegative, -10, -20, 1, 2}, + {"=1x2-0-0", WidthValue|HeightValue|XValue|YValue|XNegative|YNegative, 0, 0, 1, 2}, + {"=10x20+2-3", WidthValue|HeightValue|XValue|YValue|YNegative, 2, -3, 10, 20} +}; +struct list *lp; +int i; +int xr; +int yr; +unsigned int wr; +unsigned int hr; +int result; + + x_return = &xr; + y_return = &yr; + width_return = ≀ + height_return = &hr; + + /* + * Essentially we run through the list twice, the first time + * without the '=' the second time with. + */ + for(i=0; i < 2*NELEM(list); i++) { + + lp = &list[i%NELEM(list)]; + + /* Set all values to some default */ + xr = yr = wr = hr = DEFV; + + /* Set parse string, and skip the '=' if this is first time through */ + parsestring = lp->pstr; + if (i < NELEM(list)) + parsestring++; + trace("parse string of \"%s\"", parsestring); + result = XCALL; + + if(result != lp->flags) { + report("%s() returned 0x%x instead of 0x%x for parsestring \"%s\".", TestName, result, lp->flags, parsestring); + FAIL; + } else + CHECK; + + if (xr == lp->x) + CHECK; + else if (lp->x == DEFV) { + report("x_return was unexpectedly altered to %d", xr); + FAIL; + } else { + report("Returned x value was %d, expecting %d", xr, lp->x); + FAIL; + } + if (yr == lp->y) + CHECK; + else if (lp->y == DEFV) { + report("y_return was unexpectedly altered to %d", yr); + FAIL; + } else { + report("Returned y value was %d, expecting %d", yr, lp->y); + FAIL; + } + if (wr == lp->width) + CHECK; + else if (lp->width == DEFV) { + report("width_return was unexpectedly altered to %u", wr); + FAIL; + } else { + report("Returned width value was %u, expecting %u", wr, lp->width); + FAIL; + } + if (hr == lp->height) + CHECK; + else if (lp->x == DEFV) { + report("height_return was unexpectedly altered to %u", hr); + FAIL; + } else { + report("Returned height value was %u, expecting %u", hr, lp->height); + FAIL; + } + } + + CHECKPASS(5*2*NELEM(list)); + +>># COMMENT +>># Added the word "just" to this assertion. +>># Cal. +>>ASSERTION Good A +When the +.A parsestring +argument contains just xoffset and yoffset specifications, +then a call to xname returns these values +in the +.A x_return +and +.A y_return +arguments respectively and the +.A width_return +and +.A height_return +arguments are not altered. +>>STRATEGY +Parse the string "+32768-32768" using xname. +Verify that the call returns XValue | YValue | YNegative. +Verify that the x_return argument is set to 32768. +Verify that the y_return argument is set to -32768. +Verify that the width_return argument is unaltered. +Verify that the height_return argument is unaltered. +>>CODE +int xr = -1; +int yr = -1; +int wr = -13; +int hr = -666; +int rres; +int result; + + parsestring = "+32768-32768"; + x_return = &xr; + y_return = &yr; + width_return = (unsigned *)≀ + height_return = (unsigned *)&hr; + + result = XCALL; + if(result != (rres = XValue | YValue | YNegative)) { + report("%s() returned %d instead of %d for parsestring \"%s\".", TestName, result, rres, parsestring); + FAIL; + } else + CHECK; + + if(xr != 32768) { + report("%s() returned %d in x_return instead of %d.", TestName, xr, 32768); + FAIL; + } else + CHECK; + + if(yr != -32768) { + report("%s() returned %d in y_return instead of %d.", TestName, yr, -32768); + FAIL; + } else + CHECK; + + if(wr != -13) { + report("%s() changed the width_return argument.", TestName); + FAIL; + } else + CHECK; + + if(hr != -666) { + report("%s() changed the height_return argument.", TestName); + FAIL; + } else + CHECK; + + CHECKPASS(5); + +>># COMMENT +>># Added the word "just" to this assertion. +>># Cal. +>>ASSERTION Good A +When the +.A parsestring +argument contains just width and height specifications, +then a call to xname returns these values +in the +.A width_return +and +.A height_return +arguments respectively and the +.A x_return +and +.A y_return +arguments are not altered. +>>STRATEGY +Parse the string "16385x33768" using xname. +Verify that the call returns WidthValue | HeightValue. +Verify that the width_return argument is set to 16385. +Verify that the height_return argument is set to 33768. +Verify that the x_return argument is unaltered. +Verify that the y_return argument is unaltered. +>>CODE +int xr = -77; +int yr = -33; +unsigned int wr = 16385; +unsigned int hr = 33768; +int rres; +int result; + + parsestring = "16385x33768"; + x_return = &xr; + y_return = &yr; + width_return = ≀ + height_return = &hr; + + result = XCALL; + if(result != (rres = WidthValue | HeightValue)) { + report("%s() returned %d instead of %d for parsestring \"%s\".", TestName, result, rres, parsestring); + FAIL; + } else + CHECK; + + if(wr != 16385) { + report("%s() returned %u in width_return instead of %d.", TestName, wr, 16385); + FAIL; + } else + CHECK; + + if(hr != 33768) { + report("%s() returned %u in height_return instead of %d.", TestName, hr, 33768); + FAIL; + } else + CHECK; + + if(xr != -77) { + report("%s() changed the x_return argument.", TestName); + FAIL; + } else + CHECK; + + if(yr != -33) { + report("%s() changed the y_return argument.", TestName); + FAIL; + } else + CHECK; + + CHECKPASS(5); + +>># COMMENT +>># Maybe need an assertion which verifies that all 4 of the parameters are set correctly. +>># Cal. |