{-# language PatternSynonyms #-}
module CodeWorld.Test (
NormalizedPicture,
Drawable(..),
someCircle,
someSolidCircle,
someSquare,
someRectangle,
someTallRectangle,
someWideRectangle,
someSolidSquare,
someSolidRectangle,
someTallSolidRectangle,
someWideSolidRectangle,
someCurve,
someSolidCurve,
someColor,
rotatedHalf,
rotatedQuarter,
rotatedThreeQuarters,
rotatedUpToFull,
larger,
largerX,
largerY,
smaller,
smallerX,
smallerY,
contains,
count,
getColor,
getRotation,
getExactRotation,
getScalingFactors,
getExactScalingFactors,
getTranslation,
getExactTranslation,
getReflectionAngle,
getExactReflectionAngle,
getCircleRadius,
getExactCircleRadius,
getRectangleLengths,
getExactRectangleLengths,
getExactPointList,
Size,
ShapeKind,
Angle,
Factor,
Position,
AbsPoint,
AbsColor,
isSameColor,
equalColorCustom,
RelativePicSpec,
SpatialQuery,
isSouthOf,
isNorthOf,
isWestOf,
isEastOf,
isSouthEastOf,
isSouthWestOf,
isNorthEastOf,
isNorthWestOf,
isBelow,
isAbove,
isLeftOf,
isRightOf,
atSamePosition,
Components,
PicPredicate,
containsElem,
containsElems,
containsExactElems,
thisOften,
atLeast,
atMost,
inRangeOf,
hasRelation,
(<||>),
option,
options,
ifThen,
oneOf,
evaluatePred,
evaluatePreds,
getComponents,
findMaybe,
findMaybeAnd,
findMaybeActual,
findMaybeActualAnd,
findAll,
findAllAnd,
findAllActual,
findAllActualAnd,
Picture (
Rectangle,
ThickRectangle,
SolidRectangle,
Circle,
ThickCircle,
SolidCircle,
Polygon,
SolidPolygon,
ThickPolygon,
Polyline,
ThickPolyline,
Sector,
Arc,
ThickArc,
Curve,
ThickCurve,
ClosedCurve,
SolidClosedCurve,
ThickClosedCurve,
Lettering,
StyledLettering,
Color,
Translate,
Scale,
Dilate,
Rotate,
Reflect,
Clip,
Pictures,
And,
CoordinatePlane,
Logo,
Blank
),
hasInnerPicture,
innerPicture,
isIn,
normalize,
toConcretePicture,
reduce,
reduceNoOrder,
wasTranslatedBy,
wasScaledBy,
wasRotatedBy,
irregularSamples,
samplesUntil,
testCSE,
Point,
Vector,
translatedPoint,
rotatedPoint,
reflectedPoint,
scaledPoint,
dilatedPoint,
vectorLength,
vectorDirection,
vectorSum,
vectorDifference,
scaledVector,
rotatedVector,
Font(..),
TextStyle(..),
Color,
Colour,
red,
green,
yellow,
black,
white,
blue,
orange,
brown,
pink,
purple,
grey,
gray,
mixed,
lighter,
light,
darker,
dark,
brighter,
bright,
duller,
dull,
translucent,
assortedColors,
hue,
saturation,
luminosity,
alpha,
) where
import Data.Text (Text)
import CodeWorld.Tasks.API (Drawable(..))
import CodeWorld.Tasks.Color (
Color,
Colour,
red,
green,
yellow,
black,
white,
blue,
orange,
brown,
pink,
purple,
grey,
gray,
mixed,
lighter,
light,
darker,
dark,
brighter,
bright,
duller,
dull,
translucent,
assortedColors,
hue,
saturation,
luminosity,
alpha,
)
import CodeWorld.Tasks.Types (Font(..), TextStyle(..))
import CodeWorld.Test.Abstract (
larger,
largerX,
largerY,
rotatedHalf,
rotatedQuarter,
rotatedThreeQuarters,
rotatedUpToFull,
smaller,
smallerX,
smallerY,
someCircle,
someColor,
someCurve,
someRectangle,
someSolidCircle,
someSolidCurve,
someSolidRectangle,
someSolidSquare,
someSquare,
someTallRectangle,
someTallSolidRectangle,
someWideRectangle,
someWideSolidRectangle,
)
import CodeWorld.Test.AbsTypes (
Position,
Size,
Angle,
Factor,
AbsColor,
ShapeKind,
AbsPoint,
isSameColor,
equalColorCustom,
)
import CodeWorld.Test.Animation (
samplesUntil,
irregularSamples,
)
import CodeWorld.Test.Normalize (
NormalizedPicture,
contains,
count,
getColor,
getRotation,
getExactRotation,
getScalingFactors,
getExactScalingFactors,
getTranslation,
getExactTranslation,
getReflectionAngle,
getExactReflectionAngle,
getCircleRadius,
getExactCircleRadius,
getRectangleLengths,
getExactRectangleLengths,
getExactPointList,
toConcretePicture,
)
import CodeWorld.Test.Relative as Relative (
Components,
RelativePicSpec,
SpatialQuery,
isSouthOf,
isNorthOf,
isWestOf,
isEastOf,
isSouthEastOf,
isSouthWestOf,
isNorthEastOf,
isNorthWestOf,
isBelow,
isAbove,
isLeftOf,
isRightOf,
atSamePosition,
)
import CodeWorld.Sharing.Feedback (testCSE)
import CodeWorld.Test.Solution (
PicPredicate,
containsElem,
containsElems,
containsExactElems,
evaluatePred,
evaluatePreds,
hasRelation,
(<||>),
option,
options,
ifThen,
thisOften,
atLeast,
atMost,
inRangeOf,
oneOf,
findMaybe,
findAll,
findAllAnd,
findMaybeAnd,
findAllActual,
findMaybeActual,
findAllActualAnd,
findMaybeActualAnd,
getComponents,
)
import CodeWorld.Tasks.VectorSpace (
Point,
Vector,
translatedPoint,
rotatedPoint,
reflectedPoint,
scaledPoint,
dilatedPoint,
vectorLength,
vectorDirection,
vectorSum,
vectorDifference,
scaledVector,
rotatedVector,
wasTranslatedBy,
wasScaledBy,
wasRotatedBy,
)
import CodeWorld.Tasks.Picture (
Picture(..),
toInterface,
hasInnerPicture,
innerPicture,
isIn,
)
import Data.List (sort)
import qualified CodeWorld.Tasks.Picture as P
normalize :: Picture -> NormalizedPicture
normalize :: Picture -> NormalizedPicture
normalize = Picture -> NormalizedPicture
forall a. Drawable a => Picture -> a
toInterface
reduce :: Picture -> Picture
reduce :: Picture -> Picture
reduce = NormalizedPicture -> Picture
toConcretePicture (NormalizedPicture -> Picture)
-> (Picture -> NormalizedPicture) -> Picture -> Picture
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Picture -> NormalizedPicture
forall a. Drawable a => Picture -> a
toInterface
reduceNoOrder :: Picture -> Picture
reduceNoOrder :: Picture -> Picture
reduceNoOrder Picture
p = case Picture -> Picture
reduce Picture
p of
PRec (P.Pictures [Picture]
ps) -> ReifyPicture Picture -> Picture
PRec (ReifyPicture Picture -> Picture)
-> ReifyPicture Picture -> Picture
forall a b. (a -> b) -> a -> b
$ [Picture] -> ReifyPicture Picture
forall a. [a] -> ReifyPicture a
P.Pictures ([Picture] -> ReifyPicture Picture)
-> [Picture] -> ReifyPicture Picture
forall a b. (a -> b) -> a -> b
$ [Picture] -> [Picture]
forall a. Ord a => [a] -> [a]
sort [Picture]
ps
Picture
rp -> Picture
rp
pattern Rectangle :: Double -> Double -> Picture
pattern $mRectangle :: forall {r}. Picture -> (Double -> Double -> r) -> ((# #) -> r) -> r
Rectangle x y <- PRec (P.Rectangle x y)
pattern ThickRectangle :: Double -> Double -> Double -> Picture
pattern $mThickRectangle :: forall {r}.
Picture -> (Double -> Double -> Double -> r) -> ((# #) -> r) -> r
ThickRectangle t x y <- PRec (P.ThickRectangle t x y)
pattern SolidRectangle :: Double -> Double -> Picture
pattern $mSolidRectangle :: forall {r}. Picture -> (Double -> Double -> r) -> ((# #) -> r) -> r
SolidRectangle x y <- PRec (P.SolidRectangle x y)
pattern Circle :: Double -> Picture
pattern $mCircle :: forall {r}. Picture -> (Double -> r) -> ((# #) -> r) -> r
Circle r <- PRec (P.Circle r)
pattern ThickCircle :: Double -> Double -> Picture
pattern $mThickCircle :: forall {r}. Picture -> (Double -> Double -> r) -> ((# #) -> r) -> r
ThickCircle t r <- PRec (P.ThickCircle t r)
pattern SolidCircle :: Double -> Picture
pattern $mSolidCircle :: forall {r}. Picture -> (Double -> r) -> ((# #) -> r) -> r
SolidCircle r <- PRec (P.SolidCircle r)
pattern Polygon :: [Point] -> Picture
pattern $mPolygon :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
Polygon ps <- PRec (P.Polygon ps)
pattern SolidPolygon :: [Point] -> Picture
pattern $mSolidPolygon :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
SolidPolygon ps <- PRec (P.SolidPolygon ps)
pattern ThickPolygon :: Double -> [Point] -> Picture
pattern $mThickPolygon :: forall {r}.
Picture -> (Double -> [Point] -> r) -> ((# #) -> r) -> r
ThickPolygon t ps <- PRec (P.ThickPolygon t ps)
pattern Polyline :: [Point] -> Picture
pattern $mPolyline :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
Polyline ps <- PRec (P.Polyline ps)
pattern ThickPolyline :: Double -> [Point] -> Picture
pattern $mThickPolyline :: forall {r}.
Picture -> (Double -> [Point] -> r) -> ((# #) -> r) -> r
ThickPolyline t ps <- PRec (P.ThickPolyline t ps)
pattern Sector :: Double -> Double -> Double -> Picture
pattern $mSector :: forall {r}.
Picture -> (Double -> Double -> Double -> r) -> ((# #) -> r) -> r
Sector a1 a2 r <- PRec (P.Sector a1 a2 r)
pattern Arc :: Double -> Double -> Double -> Picture
pattern $mArc :: forall {r}.
Picture -> (Double -> Double -> Double -> r) -> ((# #) -> r) -> r
Arc a1 a2 r <- PRec (P.Arc a1 a2 r)
pattern ThickArc :: Double -> Double -> Double -> Double -> Picture
pattern $mThickArc :: forall {r}.
Picture
-> (Double -> Double -> Double -> Double -> r) -> ((# #) -> r) -> r
ThickArc t a1 a2 r <- PRec (P.ThickArc t a1 a2 r)
pattern Curve :: [Point] -> Picture
pattern $mCurve :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
Curve ps <- PRec (P.Curve ps)
pattern ThickCurve :: Double -> [Point] -> Picture
pattern $mThickCurve :: forall {r}.
Picture -> (Double -> [Point] -> r) -> ((# #) -> r) -> r
ThickCurve t ps <- PRec (P.ThickCurve t ps)
pattern ClosedCurve :: [Point] -> Picture
pattern $mClosedCurve :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
ClosedCurve ps <- PRec (P.ClosedCurve ps)
pattern SolidClosedCurve :: [Point] -> Picture
pattern $mSolidClosedCurve :: forall {r}. Picture -> ([Point] -> r) -> ((# #) -> r) -> r
SolidClosedCurve ps <- PRec (P.SolidClosedCurve ps)
pattern ThickClosedCurve :: Double -> [Point] -> Picture
pattern $mThickClosedCurve :: forall {r}.
Picture -> (Double -> [Point] -> r) -> ((# #) -> r) -> r
ThickClosedCurve t ps <- PRec (P.ThickClosedCurve t ps)
pattern Lettering :: Text -> Picture
pattern $mLettering :: forall {r}. Picture -> (Text -> r) -> ((# #) -> r) -> r
Lettering t <- PRec (P.Lettering t)
pattern StyledLettering :: TextStyle -> Font -> Text -> Picture
pattern $mStyledLettering :: forall {r}.
Picture -> (TextStyle -> Font -> Text -> r) -> ((# #) -> r) -> r
StyledLettering ts f t <- PRec (P.StyledLettering ts f t)
pattern Color :: Color -> Picture -> Picture
pattern $mColor :: forall {r}. Picture -> (Color -> Picture -> r) -> ((# #) -> r) -> r
Color c p <- PRec (P.Color c p)
pattern Translate :: Double -> Double -> Picture -> Picture
pattern $mTranslate :: forall {r}.
Picture -> (Double -> Double -> Picture -> r) -> ((# #) -> r) -> r
Translate x y p <- PRec (P.Translate x y p)
pattern Scale :: Double -> Double -> Picture -> Picture
pattern $mScale :: forall {r}.
Picture -> (Double -> Double -> Picture -> r) -> ((# #) -> r) -> r
Scale fac1 fac2 p <- PRec (P.Scale fac1 fac2 p)
pattern Dilate :: Double -> Picture -> Picture
pattern $mDilate :: forall {r}.
Picture -> (Double -> Picture -> r) -> ((# #) -> r) -> r
Dilate fac p <- PRec (P.Dilate fac p)
pattern Rotate :: Double -> Picture -> Picture
pattern $mRotate :: forall {r}.
Picture -> (Double -> Picture -> r) -> ((# #) -> r) -> r
Rotate a p <- PRec (P.Rotate a p)
pattern Reflect :: Double -> Picture -> Picture
pattern $mReflect :: forall {r}.
Picture -> (Double -> Picture -> r) -> ((# #) -> r) -> r
Reflect a p <- PRec (P.Reflect a p)
pattern Clip :: Double -> Double -> Picture -> Picture
pattern $mClip :: forall {r}.
Picture -> (Double -> Double -> Picture -> r) -> ((# #) -> r) -> r
Clip x y p <- PRec (P.Clip x y p)
pattern Pictures :: [Picture] -> Picture
pattern $mPictures :: forall {r}. Picture -> ([Picture] -> r) -> ((# #) -> r) -> r
Pictures ps <- PRec (P.Pictures ps)
pattern And :: Picture -> Picture -> Picture
pattern $mAnd :: forall {r}.
Picture -> (Picture -> Picture -> r) -> ((# #) -> r) -> r
And p1 p2 <- PRec (P.And p1 p2)
pattern CoordinatePlane :: Picture
pattern $mCoordinatePlane :: forall {r}. Picture -> ((# #) -> r) -> ((# #) -> r) -> r
CoordinatePlane <- PRec P.CoordinatePlane
pattern Logo :: Picture
pattern $mLogo :: forall {r}. Picture -> ((# #) -> r) -> ((# #) -> r) -> r
Logo <- PRec P.Logo
pattern Blank :: Picture
pattern $mBlank :: forall {r}. Picture -> ((# #) -> r) -> ((# #) -> r) -> r
Blank <- PRec P.Blank