DIRECTORY Imager, Pipal, PipalInt, PipalMask, PipalPaint, PipalReal; TestPipal: CEDAR PROGRAM IMPORTS Imager, PipalInt, PipalMask, PipalPaint, PipalReal = BEGIN IntOperations: PROC ~ {OPEN PipalInt; v1: Vector = [3, -5]; v2: Vector = [7, 13]; i1: Interval = [3, -5]; i2: Interval = [7, 13]; r1: Rectangle = [v1, v2]; r2: Rectangle = [[2, 3], [4, 7]]; t1: Transformation = [v1, rotate270X]; t2: Transformation = [v2, rotate180X]; IF Add[Sub[Add[v1, v2], v1], Neg[v2]] # zeroVector THEN ERROR; IF Min[v1, Max[v1, v2]] # v1 THEN ERROR; IF NOT IsEmptySize[zeroVector] THEN ERROR; IF IsEmptySize[v2] THEN ERROR; IF DoIntervalsIntersect[i1, i2] THEN ERROR; IF IsInsideInterval[i2, i1] THEN ERROR; IF NOT IsInsideInterval[i2, [8, -1]] THEN ERROR; IF NOT IsInsideInterval[i1, i1] THEN ERROR; IF IsInsideInterval[[infinity/2, -infinity], i1] THEN ERROR; IF NOT IsInsideInterval[[-infinity/2, infinity], i1] THEN ERROR; IF NOT IsInsideIntervalNumber[i2, 12] THEN ERROR; IF NOT IsInsideIntervalNumber[i2, 20] THEN ERROR; IF IsInsideIntervalNumber[i2, 21] THEN ERROR; IF IsInsideIntervalNumber[[infinity/2, -infinity], 21] THEN ERROR; IF NOT IsInsideIntervalNumber[[-infinity/2, infinity], 12] THEN ERROR; IF Extend[Translate[r1, v2], 3]#Translate[Extend[r1, 3], v2] THEN ERROR; IF IntersectBox[r1, r1]#r1 THEN ERROR; IF BoundingBox[r1, r1]#r1 THEN ERROR; IF IsEmptyRectangle[r1] THEN ERROR; IF NOT IsEmptyRectangle[Extend[r1, -14]] THEN ERROR; IF NOT DoRectanglesIntersect[r1, r1] THEN ERROR; IF NOT IsInsideRectangle[r1, r1] THEN ERROR; IF NOT IsInsideRectangle[r1, IntersectBox[r1, r2]] THEN ERROR; IF NOT IsInsideRectangle[BoundingBox[r1, r2], r1] THEN ERROR; IF NOT IsInsidePoint[r1, r1.base] THEN ERROR; IF NOT IsInsidePoint[r1, Extremity[r1]] THEN ERROR; [] _ DecomposeRect[r1, r2]; IF NOT IsInsidePoint[r1, Center[r1]] THEN ERROR; IF IntersectBox[r1, fullRectangle]#r1 THEN ERROR; IF BoundingBox[r1, emptyRectangle]#r1 THEN ERROR; IF DoRectanglesIntersect[r1, emptyRectangle] THEN ERROR; IF NOT DoRectanglesIntersect[r1, fullRectangle] THEN ERROR; IF TransformVector[Compose[t1, t2], v1]#TransformVector[t1, TransformVector[t2, v1]] THEN ERROR; IF TransformRectangle[t1, [zeroVector, v1]]#TransformBBox[t1, v1] THEN ERROR; IF TransformRectangle[Compose[t1, t2], r1]#TransformRectangle[t1, TransformRectangle[t2, r1]] THEN ERROR; }; RealOperations: PROC ~ {OPEN PipalReal; v1: Vector = [3, -5]; v2: Vector = [7, 13]; i1: Interval = [3, -5]; i2: Interval = [7, 13]; r1: Rectangle = [v1, v2]; r2: Rectangle = [[2, 3], [4, 7]]; t1: Transformation = IntToRealTransformation[[[3, -5], rotate270X]]; t2: Transformation = IntToRealTransformation[[[7, 13], rotate180X]]; IF Add[Sub[Add[v1, v2], v1], Neg[v2]] # zeroVector THEN ERROR; IF Min[v1, Max[v1, v2]] # v1 THEN ERROR; IF NOT IsEmptySize[zeroVector] THEN ERROR; IF IsEmptySize[v2] THEN ERROR; IF DoIntervalsIntersect[i1, i2] THEN ERROR; IF IsInsideInterval[i2, i1] THEN ERROR; IF NOT IsInsideInterval[i2, [8, -1]] THEN ERROR; IF NOT IsInsideInterval[i1, i1] THEN ERROR; IF IsInsideInterval[[infinity/2, -infinity], i1] THEN ERROR; IF NOT IsInsideInterval[[-infinity/2, infinity], i1] THEN ERROR; IF NOT IsInsideIntervalNumber[i2, 12] THEN ERROR; IF NOT IsInsideIntervalNumber[i2, 20] THEN ERROR; IF IsInsideIntervalNumber[i2, 21] THEN ERROR; IF NOT IsInsideIntervalNumber[[-infinity/2, infinity], 12] THEN ERROR; IF Extend[Translate[r1, v2], 3]#Translate[Extend[r1, 3], v2] THEN ERROR; IF IntersectBox[r1, r1]#r1 THEN ERROR; IF BoundingBox[r1, r1]#r1 THEN ERROR; IF IsEmptyRectangle[r1] THEN ERROR; IF NOT IsEmptyRectangle[Extend[r1, -14]] THEN ERROR; IF NOT DoRectanglesIntersect[r1, r1] THEN ERROR; IF NOT IsInsideRectangle[r1, r1] THEN ERROR; IF NOT IsInsideRectangle[r1, IntersectBox[r1, r2]] THEN ERROR; IF NOT IsInsideRectangle[BoundingBox[r1, r2], r1] THEN ERROR; IF NOT IsInsidePoint[r1, r1.base] THEN ERROR; IF NOT IsInsidePoint[r1, Extremity[r1]] THEN ERROR; [] _ DecomposeRect[r1, r2]; IF NOT IsInsidePoint[r1, Center[r1]] THEN ERROR; IF IntersectBox[r1, fullRectangle]#r1 THEN ERROR; IF BoundingBox[r1, emptyRectangle]#r1 THEN ERROR; IF DoRectanglesIntersect[r1, emptyRectangle] THEN ERROR; IF NOT DoRectanglesIntersect[r1, fullRectangle] THEN ERROR; IF TransformVector[Compose[t1, t2], v1]#TransformVector[t1, TransformVector[t2, v1]] THEN ERROR; IF TransformRectangle[t1, [zeroVector, v1]]#TransformBBox[t1, v1] THEN ERROR; IF TransformRectangle[Compose[t1, t2], r1]#TransformRectangle[t1, TransformRectangle[t2, r1]] THEN ERROR; }; AreaOperations: PROC ~ {OPEN PipalPaint; Signature: PROC [area: Area] RETURNS [sig: REAL _ 0] = { transformation: PipalReal.Transformation _ PipalReal.CreateTransformation[]; SigRect: PipalReal.RectangleProc = { sig _ sig + (rect.size.x+1)*(rect.size.y+1); }; [] _ EnumerateArea[area, SigRect, transformation]; PipalReal.DestroyTransformation[transformation]; }; obj: Pipal.Object _ PipalMask.CreateBrick[[30, 50], Imager.MakeGray[0.5]]; bbox: PipalReal.Rectangle _ PipalReal.BBox[obj, PipalReal.CreateTransformation[]]; area: Area; area1: Area _ ChildArea[obj, bboxChild]; area2: Area _ ChildArea[obj, edgesChild]; IF NOT IsEmptyArea[emptyArea] THEN ERROR; IF IsEmptyArea[fullArea] THEN ERROR; IF IsEmptyArea[area1] THEN ERROR; IF Signature[IntersectArea[area1, area1]]#Signature[area1] THEN ERROR; IF NOT IsEmptyArea[SubArea[area1, area1]] THEN ERROR; IF NOT IsEmptyArea[SubArea[area1, fullArea]] THEN ERROR; IF Signature[IntersectArea[fullArea, area1]]#Signature[area1] THEN ERROR; IF NOT IsEmptyArea[IntersectArea[emptyArea, area1]] THEN ERROR; IF Signature[SubArea[area1, emptyArea]]#Signature[area1] THEN ERROR; IF NOT IsEmptyArea[IntersectArea[emptyArea, emptyArea]] THEN ERROR; IF IsEmptyArea[area2] THEN ERROR; IF NOT IsEmptyArea[SubArea[area2, area2]] THEN ERROR; IF NOT IsEmptyArea[SubArea[area2, fullArea]] THEN ERROR; IF Signature[IntersectArea[fullArea, area2]]#Signature[area2] THEN ERROR; IF NOT IsEmptyArea[IntersectArea[emptyArea, area2]] THEN ERROR; IF Signature[SubArea[area2, emptyArea]]#Signature[area2] THEN ERROR; IF NOT IsEmptyArea[IntersectArea[emptyArea, emptyArea]] THEN ERROR; area _ SubArea[area2, area2]; IF NOT IsEmptyArea[area] THEN ERROR; area _ SubArea[area, area1]; IF NOT IsEmptyArea[area] THEN ERROR; area _ SubArea[area, area1]; IF NOT IsEmptyArea[area] THEN ERROR; }; END. ‚TestPipal.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Bertrand Serlet March 10, 1988 10:35:00 am PST Κx– "cedar" style˜code™Kšœ<™Kšœœœ˜(Kšœœœœ˜*Kšœœœ˜K˜Kšœœœ˜+Kšœœœ˜'Kšœœœœ˜0Kšœœœœ˜+Kšœ/œœ˜Kšœœ,œœ˜=Kšœœœœ˜-Kšœœ"œœ˜3Kšœ˜Kšœœœœ˜0Kšœ$œœ˜1Kšœ$œœ˜1Kšœ+œœ˜8Kšœœ*œœ˜;K˜KšœSœœ˜`Kšœ@œœ˜MKšœ\œœ˜iK˜K˜K˜—šžœœœ ˜'K˜K˜K˜K˜K˜K˜Kšœ˜Kšœ!˜!K˜KšœD˜DKšœD˜DK˜Kšœ1œœ˜>Kšœœœ˜(Kšœœœœ˜*Kšœœœ˜K˜Kšœœœ˜+Kšœœœ˜'Kšœœœœ˜0Kšœœœœ˜+Kšœ/œœ˜Kšœœ,œœ˜=Kšœœœœ˜-Kšœœ"œœ˜3Kšœ˜Kšœœœœ˜0Kšœ$œœ˜1Kšœ$œœ˜1Kšœ+œœ˜8Kšœœ*œœ˜;K˜KšœSœœ˜`Kšœ@œœ˜MKšœ\œœ˜iK˜K˜K˜—šžœœœ ˜(šž œœœœ ˜8KšœL˜Lšžœ˜$Jšœ,˜,Jšœ˜—Jšœ2˜2Kšœ0˜0J˜J˜—JšœJ˜JKšœR˜RKšœ ˜ Kšœ(˜(Kšœ)˜)K˜Kšœœœœ˜)Kšœœœ˜$K˜Kšœœœ˜!Kšœ9œœ˜FKšœœ$œœ˜5Kšœœ'œœ˜8K˜Kšœ<œœ˜IKšœœ.œœ˜?Kšœ7œœ˜DKšœœ2œœ˜CK˜Kšœœœ˜!Kšœœ$œœ˜5Kšœœ'œœ˜8K˜Kšœ<œœ˜IKšœœ.œœ˜?Kšœ7œœ˜DKšœœ2œœ˜CK˜Kšœ˜Kšœœœœ˜$Kšœ˜Kšœœœœ˜$Kšœ˜Kšœœœœ˜$K˜—K˜Kšœ˜K˜—…—Ύ!Έ