~jaro/balkon

ref: 14b8c850a92ec30889f388361ed95843a46d55c8 balkon/test/Data/Text/ParagraphLayout/RectSpec.hs -rw-r--r-- 2.3 KiB
14b8c850Jaro Implement unions of lists of rectangles. 1 year, 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
module Data.Text.ParagraphLayout.RectSpec (spec) where

import Data.Int (Int32)

import Test.Hspec
import Data.Text.ParagraphLayout.Internal.Rect

positiveRect :: Rect Int32
positiveRect = Rect 50 (-70) 10 10

negativeRect :: Rect Int32
negativeRect = Rect 80 (-75) (-15) (-15)

spec :: Spec
spec = do
    describe "union of two rects (low X, low Y)" $
        llSpec $ union LL positiveRect negativeRect
    describe "union of two rects (low X, high Y)" $
        lhSpec $ union LH positiveRect negativeRect
    describe "union of two rects (high X, low Y)" $
        hlSpec $ union HL positiveRect negativeRect
    describe "union of two rects (high X, high Y)" $
        hhSpec $ union HH positiveRect negativeRect

llSpec :: Rect Int32 -> SpecWith ()
llSpec r = do
    commonSpec r
    it "has origin at 50,-90" $
        (x_origin r, y_origin r) `shouldBe` (50, -90)
    it "has terminus at 80,-60" $
        (x_terminus r, y_terminus r) `shouldBe` (80, -60)
    it "has size 30,30" $
        (x_size r, y_size r) `shouldBe` (30, 30)

lhSpec :: Rect Int32 -> SpecWith ()
lhSpec r = do
    commonSpec r
    it "has origin at 50,-60" $
        (x_origin r, y_origin r) `shouldBe` (50, -60)
    it "has terminus at 80,-90" $
        (x_terminus r, y_terminus r) `shouldBe` (80, -90)
    it "has size 30,-30" $
        (x_size r, y_size r) `shouldBe` (30, -30)

hlSpec :: Rect Int32 -> SpecWith ()
hlSpec r = do
    commonSpec r
    it "has origin at 80,-90" $
        (x_origin r, y_origin r) `shouldBe` (80, -90)
    it "has terminus at 50,-60" $
        (x_terminus r, y_terminus r) `shouldBe` (50, -60)
    it "has size -30,30" $
        (x_size r, y_size r) `shouldBe` (-30, 30)

hhSpec :: Rect Int32 -> SpecWith ()
hhSpec r = do
    commonSpec r
    it "has origin at 80,-60" $
        (x_origin r, y_origin r) `shouldBe` (80, -60)
    it "has terminus at 50,-90" $
        (x_terminus r, y_terminus r) `shouldBe` (50, -90)
    it "has size -30,-30" $
        (x_size r, y_size r) `shouldBe` (-30, -30)

commonSpec :: Rect Int32 -> SpecWith ()
commonSpec r = do
    it "has minimum coordinates at at 50,-90" $
        (x_min r, y_min r) `shouldBe` (50, -90)
    it "has maximum coordinates at 80,-60" $
        (x_max r, y_max r) `shouldBe` (80, -60)
    it "has absolute size 30,30" $
        (width r, height r) `shouldBe` (30, 30)