aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/data
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/data')
-rw-r--r--stdlib/source/test/lux/data/color.lux10
-rw-r--r--stdlib/source/test/lux/data/color/cmyk.lux90
2 files changed, 94 insertions, 6 deletions
diff --git a/stdlib/source/test/lux/data/color.lux b/stdlib/source/test/lux/data/color.lux
index e53d5d0b7..7434e8c15 100644
--- a/stdlib/source/test/lux/data/color.lux
+++ b/stdlib/source/test/lux/data/color.lux
@@ -24,6 +24,7 @@
["[0]" rgb]]]
["[0]" /
["[1][0]" rgb]
+ ["[1][0]" cmyk]
["[1][0]" named]
["[1][0]" terminal]])
@@ -86,18 +87,14 @@
(|> expected /.hsb /.of_hsb
(distance/3 expected)
(f.<= ..rgb_error_margin)))
- (_.coverage [/.CMYK /.cmyk /.of_cmyk]
- (|> expected /.cmyk /.of_cmyk
- (distance/3 expected)
- (f.<= ..rgb_error_margin)))
))
(def transformation
Test
(do random.monad
[colorful (|> ..random
- (random.only (function (_ color) (|> (distance/3 color /.black) (f.>= +100.0))))
- (random.only (function (_ color) (|> (distance/3 color /.white) (f.>= +100.0)))))
+ (random.only (function (_ color) (and (|> (distance/3 color /.black) (f.>= +100.0))
+ (|> (distance/3 color /.white) (f.>= +100.0))))))
mediocre (|> ..random
(random.only (|>> saturation
((function (_ saturation)
@@ -217,6 +214,7 @@
))
/rgb.test
+ /cmyk.test
/named.test
/terminal.test
))))
diff --git a/stdlib/source/test/lux/data/color/cmyk.lux b/stdlib/source/test/lux/data/color/cmyk.lux
new file mode 100644
index 000000000..4a9736762
--- /dev/null
+++ b/stdlib/source/test/lux/data/color/cmyk.lux
@@ -0,0 +1,90 @@
+(.require
+ [library
+ [lux (.except)
+ [abstract
+ [monad (.only do)]
+ [\\specification
+ ["[0]S" equivalence]]]
+ [control
+ ["[0]" try (.use "[1]#[0]" functor)]
+ ["[0]" exception]]
+ [math
+ ["[0]" random (.only Random)]
+ [number
+ ["f" frac]]]
+ [test
+ ["_" property (.only Test)]]]]
+ [\\library
+ ["[0]" / (.only)
+ [//
+ ["[0]" rgb]]]]
+ [//
+ ["[0]T" rgb]])
+
+(def .public value
+ (Random /.Value)
+ (random.one (|>> /.value try.maybe)
+ random.safe_frac))
+
+(def .public random
+ (Random /.CMYK)
+ (do random.monad
+ [cyan ..value
+ magenta ..value
+ yellow ..value
+ key ..value]
+ (in [/.#cyan cyan
+ /.#magenta magenta
+ /.#yellow yellow
+ /.#key key])))
+
+(def .public test
+ Test
+ (<| (_.covering /._)
+ (do [! random.monad]
+ [expected_value ..value
+ expected_rgb rgbT.random
+ expected_cmyk ..random])
+ (all _.and
+ (_.for [/.Value]
+ (all _.and
+ (_.coverage [/.number /.value]
+ (|> expected_value
+ /.number
+ /.value
+ (try#each (|>> /.number
+ (f.= (/.number expected_value))))
+ (try.else false)))
+ (_.coverage [/.least]
+ (when (/.value (f.+ +0.001 (/.number /.least)))
+ {try.#Failure _} false
+ {try.#Success _} true))
+ (_.coverage [/.most]
+ (when (/.value (f.- +0.001 (/.number /.most)))
+ {try.#Failure _} false
+ {try.#Success _} true))
+ (_.coverage [/.invalid]
+ (and (when (/.value (f.- +0.001 (/.number /.least)))
+ {try.#Failure it} (exception.match? /.invalid it)
+ {try.#Success _} false)
+ (when (/.value (f.+ +0.001 (/.number /.most)))
+ {try.#Failure it} (exception.match? /.invalid it)
+ {try.#Success _} false)))
+ ))
+ (_.for [/.CMYK
+ /.#cyan /.#magenta /.#yellow /.#key]
+ (all _.and
+ (_.for [/.equivalence]
+ (equivalenceS.spec /.equivalence ..random))
+
+ (_.coverage [/.cmyk /.rgb]
+ (and (|> expected_rgb
+ /.cmyk
+ /.rgb
+ (at rgb.equivalence = expected_rgb))
+ (|> expected_cmyk
+ /.rgb
+ /.cmyk
+ (at /.equivalence = expected_cmyk))))
+ ))
+ )))