packages feed

vty-5.33: test/VerifyColor240.hs

module VerifyColor240 where

import Data.Word(Word8)
import Verify

import Graphics.Vty.Attributes.Color240(rgbColorToColor240)

oldRgbColorToColor240 :: Integral i => i -> i -> i -> Word8
oldRgbColorToColor240 r g b
    | r < 0 && g < 0 && b < 0 = error "rgbColor with negative color component intensity"
    | r == 8 && g == 8 && b == 8 = 216
    | r == 18 && g == 18 && b == 18 = 217
    | r == 28 && g == 28 && b == 28 = 218
    | r == 38 && g == 38 && b == 38 = 219
    | r == 48 && g == 48 && b == 48 = 220
    | r == 58 && g == 58 && b == 58 = 221
    | r == 68 && g == 68 && b == 68 = 222
    | r == 78 && g == 78 && b == 78 = 223
    | r == 88 && g == 88 && b == 88 = 224
    | r == 98 && g == 98 && b == 98 = 225
    | r == 108 && g == 108 && b == 108 = 226
    | r == 118 && g == 118 && b == 118 = 227
    | r == 128 && g == 128 && b == 128 = 228
    | r == 138 && g == 138 && b == 138 = 229
    | r == 148 && g == 148 && b == 148 = 230
    | r == 158 && g == 158 && b == 158 = 231
    | r == 168 && g == 168 && b == 168 = 232
    | r == 178 && g == 178 && b == 178 = 233
    | r == 188 && g == 188 && b == 188 = 234
    | r == 198 && g == 198 && b == 198 = 235
    | r == 208 && g == 208 && b == 208 = 236
    | r == 218 && g == 218 && b == 218 = 237
    | r == 228 && g == 228 && b == 228 = 238
    | r == 238 && g == 238 && b == 238 = 239
    | r <= 0 && g <= 0 && b <= 0 = 0
    | r <= 0 && g <= 0 && b <= 95 = 1
    | r <= 0 && g <= 0 && b <= 135 = 2
    | r <= 0 && g <= 0 && b <= 175 = 3
    | r <= 0 && g <= 0 && b <= 215 = 4
    | r <= 0 && g <= 0 && b <= 255 = 5
    | r <= 0 && g <= 95 && b <= 0 = 6
    | r <= 0 && g <= 95 && b <= 95 = 7
    | r <= 0 && g <= 95 && b <= 135 = 8
    | r <= 0 && g <= 95 && b <= 175 = 9
    | r <= 0 && g <= 95 && b <= 215 = 10
    | r <= 0 && g <= 95 && b <= 255 = 11
    | r <= 0 && g <= 135 && b <= 0 = 12
    | r <= 0 && g <= 135 && b <= 95 = 13
    | r <= 0 && g <= 135 && b <= 135 = 14
    | r <= 0 && g <= 135 && b <= 175 = 15
    | r <= 0 && g <= 135 && b <= 215 = 16
    | r <= 0 && g <= 135 && b <= 255 = 17
    | r <= 0 && g <= 175 && b <= 0 = 18
    | r <= 0 && g <= 175 && b <= 95 = 19
    | r <= 0 && g <= 175 && b <= 135 = 20
    | r <= 0 && g <= 175 && b <= 175 = 21
    | r <= 0 && g <= 175 && b <= 215 = 22
    | r <= 0 && g <= 175 && b <= 255 = 23
    | r <= 0 && g <= 215 && b <= 0 = 24
    | r <= 0 && g <= 215 && b <= 95 = 25
    | r <= 0 && g <= 215 && b <= 135 = 26
    | r <= 0 && g <= 215 && b <= 175 = 27
    | r <= 0 && g <= 215 && b <= 215 = 28
    | r <= 0 && g <= 215 && b <= 255 = 29
    | r <= 0 && g <= 255 && b <= 0 = 30
    | r <= 0 && g <= 255 && b <= 95 = 31
    | r <= 0 && g <= 255 && b <= 135 = 32
    | r <= 0 && g <= 255 && b <= 175 = 33
    | r <= 0 && g <= 255 && b <= 215 = 34
    | r <= 0 && g <= 255 && b <= 255 = 35
    | r <= 95 && g <= 0 && b <= 0 = 36
    | r <= 95 && g <= 0 && b <= 95 = 37
    | r <= 95 && g <= 0 && b <= 135 = 38
    | r <= 95 && g <= 0 && b <= 175 = 39
    | r <= 95 && g <= 0 && b <= 215 = 40
    | r <= 95 && g <= 0 && b <= 255 = 41
    | r <= 95 && g <= 95 && b <= 0 = 42
    | r <= 95 && g <= 95 && b <= 95 = 43
    | r <= 95 && g <= 95 && b <= 135 = 44
    | r <= 95 && g <= 95 && b <= 175 = 45
    | r <= 95 && g <= 95 && b <= 215 = 46
    | r <= 95 && g <= 95 && b <= 255 = 47
    | r <= 95 && g <= 135 && b <= 0 = 48
    | r <= 95 && g <= 135 && b <= 95 = 49
    | r <= 95 && g <= 135 && b <= 135 = 50
    | r <= 95 && g <= 135 && b <= 175 = 51
    | r <= 95 && g <= 135 && b <= 215 = 52
    | r <= 95 && g <= 135 && b <= 255 = 53
    | r <= 95 && g <= 175 && b <= 0 = 54
    | r <= 95 && g <= 175 && b <= 95 = 55
    | r <= 95 && g <= 175 && b <= 135 = 56
    | r <= 95 && g <= 175 && b <= 175 = 57
    | r <= 95 && g <= 175 && b <= 215 = 58
    | r <= 95 && g <= 175 && b <= 255 = 59
    | r <= 95 && g <= 215 && b <= 0 = 60
    | r <= 95 && g <= 215 && b <= 95 = 61
    | r <= 95 && g <= 215 && b <= 135 = 62
    | r <= 95 && g <= 215 && b <= 175 = 63
    | r <= 95 && g <= 215 && b <= 215 = 64
    | r <= 95 && g <= 215 && b <= 255 = 65
    | r <= 95 && g <= 255 && b <= 0 = 66
    | r <= 95 && g <= 255 && b <= 95 = 67
    | r <= 95 && g <= 255 && b <= 135 = 68
    | r <= 95 && g <= 255 && b <= 175 = 69
    | r <= 95 && g <= 255 && b <= 215 = 70
    | r <= 95 && g <= 255 && b <= 255 = 71
    | r <= 135 && g <= 0 && b <= 0 = 72
    | r <= 135 && g <= 0 && b <= 95 = 73
    | r <= 135 && g <= 0 && b <= 135 = 74
    | r <= 135 && g <= 0 && b <= 175 = 75
    | r <= 135 && g <= 0 && b <= 215 = 76
    | r <= 135 && g <= 0 && b <= 255 = 77
    | r <= 135 && g <= 95 && b <= 0 = 78
    | r <= 135 && g <= 95 && b <= 95 = 79
    | r <= 135 && g <= 95 && b <= 135 = 80
    | r <= 135 && g <= 95 && b <= 175 = 81
    | r <= 135 && g <= 95 && b <= 215 = 82
    | r <= 135 && g <= 95 && b <= 255 = 83
    | r <= 135 && g <= 135 && b <= 0 = 84
    | r <= 135 && g <= 135 && b <= 95 = 85
    | r <= 135 && g <= 135 && b <= 135 = 86
    | r <= 135 && g <= 135 && b <= 175 = 87
    | r <= 135 && g <= 135 && b <= 215 = 88
    | r <= 135 && g <= 135 && b <= 255 = 89
    | r <= 135 && g <= 175 && b <= 0 = 90
    | r <= 135 && g <= 175 && b <= 95 = 91
    | r <= 135 && g <= 175 && b <= 135 = 92
    | r <= 135 && g <= 175 && b <= 175 = 93
    | r <= 135 && g <= 175 && b <= 215 = 94
    | r <= 135 && g <= 175 && b <= 255 = 95
    | r <= 135 && g <= 215 && b <= 0 = 96
    | r <= 135 && g <= 215 && b <= 95 = 97
    | r <= 135 && g <= 215 && b <= 135 = 98
    | r <= 135 && g <= 215 && b <= 175 = 99
    | r <= 135 && g <= 215 && b <= 215 = 100
    | r <= 135 && g <= 215 && b <= 255 = 101
    | r <= 135 && g <= 255 && b <= 0 = 102
    | r <= 135 && g <= 255 && b <= 95 = 103
    | r <= 135 && g <= 255 && b <= 135 = 104
    | r <= 135 && g <= 255 && b <= 175 = 105
    | r <= 135 && g <= 255 && b <= 215 = 106
    | r <= 135 && g <= 255 && b <= 255 = 107
    | r <= 175 && g <= 0 && b <= 0 = 108
    | r <= 175 && g <= 0 && b <= 95 = 109
    | r <= 175 && g <= 0 && b <= 135 = 110
    | r <= 175 && g <= 0 && b <= 175 = 111
    | r <= 175 && g <= 0 && b <= 215 = 112
    | r <= 175 && g <= 0 && b <= 255 = 113
    | r <= 175 && g <= 95 && b <= 0 = 114
    | r <= 175 && g <= 95 && b <= 95 = 115
    | r <= 175 && g <= 95 && b <= 135 = 116
    | r <= 175 && g <= 95 && b <= 175 = 117
    | r <= 175 && g <= 95 && b <= 215 = 118
    | r <= 175 && g <= 95 && b <= 255 = 119
    | r <= 175 && g <= 135 && b <= 0 = 120
    | r <= 175 && g <= 135 && b <= 95 = 121
    | r <= 175 && g <= 135 && b <= 135 = 122
    | r <= 175 && g <= 135 && b <= 175 = 123
    | r <= 175 && g <= 135 && b <= 215 = 124
    | r <= 175 && g <= 135 && b <= 255 = 125
    | r <= 175 && g <= 175 && b <= 0 = 126
    | r <= 175 && g <= 175 && b <= 95 = 127
    | r <= 175 && g <= 175 && b <= 135 = 128
    | r <= 175 && g <= 175 && b <= 175 = 129
    | r <= 175 && g <= 175 && b <= 215 = 130
    | r <= 175 && g <= 175 && b <= 255 = 131
    | r <= 175 && g <= 215 && b <= 0 = 132
    | r <= 175 && g <= 215 && b <= 95 = 133
    | r <= 175 && g <= 215 && b <= 135 = 134
    | r <= 175 && g <= 215 && b <= 175 = 135
    | r <= 175 && g <= 215 && b <= 215 = 136
    | r <= 175 && g <= 215 && b <= 255 = 137
    | r <= 175 && g <= 255 && b <= 0 = 138
    | r <= 175 && g <= 255 && b <= 95 = 139
    | r <= 175 && g <= 255 && b <= 135 = 140
    | r <= 175 && g <= 255 && b <= 175 = 141
    | r <= 175 && g <= 255 && b <= 215 = 142
    | r <= 175 && g <= 255 && b <= 255 = 143
    | r <= 215 && g <= 0 && b <= 0 = 144
    | r <= 215 && g <= 0 && b <= 95 = 145
    | r <= 215 && g <= 0 && b <= 135 = 146
    | r <= 215 && g <= 0 && b <= 175 = 147
    | r <= 215 && g <= 0 && b <= 215 = 148
    | r <= 215 && g <= 0 && b <= 255 = 149
    | r <= 215 && g <= 95 && b <= 0 = 150
    | r <= 215 && g <= 95 && b <= 95 = 151
    | r <= 215 && g <= 95 && b <= 135 = 152
    | r <= 215 && g <= 95 && b <= 175 = 153
    | r <= 215 && g <= 95 && b <= 215 = 154
    | r <= 215 && g <= 95 && b <= 255 = 155
    | r <= 215 && g <= 135 && b <= 0 = 156
    | r <= 215 && g <= 135 && b <= 95 = 157
    | r <= 215 && g <= 135 && b <= 135 = 158
    | r <= 215 && g <= 135 && b <= 175 = 159
    | r <= 215 && g <= 135 && b <= 215 = 160
    | r <= 215 && g <= 135 && b <= 255 = 161
    | r <= 215 && g <= 175 && b <= 0 = 162
    | r <= 215 && g <= 175 && b <= 95 = 163
    | r <= 215 && g <= 175 && b <= 135 = 164
    | r <= 215 && g <= 175 && b <= 175 = 165
    | r <= 215 && g <= 175 && b <= 215 = 166
    | r <= 215 && g <= 175 && b <= 255 = 167
    | r <= 215 && g <= 215 && b <= 0 = 168
    | r <= 215 && g <= 215 && b <= 95 = 169
    | r <= 215 && g <= 215 && b <= 135 = 170
    | r <= 215 && g <= 215 && b <= 175 = 171
    | r <= 215 && g <= 215 && b <= 215 = 172
    | r <= 215 && g <= 215 && b <= 255 = 173
    | r <= 215 && g <= 255 && b <= 0 = 174
    | r <= 215 && g <= 255 && b <= 95 = 175
    | r <= 215 && g <= 255 && b <= 135 = 176
    | r <= 215 && g <= 255 && b <= 175 = 177
    | r <= 215 && g <= 255 && b <= 215 = 178
    | r <= 215 && g <= 255 && b <= 255 = 179
    | r <= 255 && g <= 0 && b <= 0 = 180
    | r <= 255 && g <= 0 && b <= 95 = 181
    | r <= 255 && g <= 0 && b <= 135 = 182
    | r <= 255 && g <= 0 && b <= 175 = 183
    | r <= 255 && g <= 0 && b <= 215 = 184
    | r <= 255 && g <= 0 && b <= 255 = 185
    | r <= 255 && g <= 95 && b <= 0 = 186
    | r <= 255 && g <= 95 && b <= 95 = 187
    | r <= 255 && g <= 95 && b <= 135 = 188
    | r <= 255 && g <= 95 && b <= 175 = 189
    | r <= 255 && g <= 95 && b <= 215 = 190
    | r <= 255 && g <= 95 && b <= 255 = 191
    | r <= 255 && g <= 135 && b <= 0 = 192
    | r <= 255 && g <= 135 && b <= 95 = 193
    | r <= 255 && g <= 135 && b <= 135 = 194
    | r <= 255 && g <= 135 && b <= 175 = 195
    | r <= 255 && g <= 135 && b <= 215 = 196
    | r <= 255 && g <= 135 && b <= 255 = 197
    | r <= 255 && g <= 175 && b <= 0 = 198
    | r <= 255 && g <= 175 && b <= 95 = 199
    | r <= 255 && g <= 175 && b <= 135 = 200
    | r <= 255 && g <= 175 && b <= 175 = 201
    | r <= 255 && g <= 175 && b <= 215 = 202
    | r <= 255 && g <= 175 && b <= 255 = 203
    | r <= 255 && g <= 215 && b <= 0 = 204
    | r <= 255 && g <= 215 && b <= 95 = 205
    | r <= 255 && g <= 215 && b <= 135 = 206
    | r <= 255 && g <= 215 && b <= 175 = 207
    | r <= 255 && g <= 215 && b <= 215 = 208
    | r <= 255 && g <= 215 && b <= 255 = 209
    | r <= 255 && g <= 255 && b <= 0 = 210
    | r <= 255 && g <= 255 && b <= 95 = 211
    | r <= 255 && g <= 255 && b <= 135 = 212
    | r <= 255 && g <= 255 && b <= 175 = 213
    | r <= 255 && g <= 255 && b <= 215 = 214
    | r <= 255 && g <= 255 && b <= 255 = 215
    | otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
                                (fromIntegral r :: Int)
                                (fromIntegral g :: Int)
                                (fromIntegral b :: Int))

sameColor :: Int -> Int -> Int -> Bool
sameColor r g b = oldRgbColorToColor240 r g b == rgbColorToColor240 r g b

genVal :: Gen Int
genVal = chooseInt (0, 255)

sameColorCheck :: Property
sameColorCheck = forAll genVal (\r -> forAll genVal (\g -> forAll genVal (sameColor r g)))

tests :: IO [Test]
tests = return
  [ verify "check rgbColorToColor240 optimization is correct" sameColorCheck
  ]