packages feed

hvega-0.4.0.0: tests/NullTests.hs

{-# LANGUAGE OverloadedStrings #-}

--
-- Based on the Elm VegaLite NullTests.elm as of version 1.12.0
--

module NullTests (testSpecs) where

import Data.Function ((&))
import Graphics.Vega.VegaLite

import Prelude hiding (filter)

testSpecs :: [(String, VegaLite)]
testSpecs = [ ("axis1", axis1)
            , ("scale0", scale0)
            , ("scale1", scale1)
            , ("scale2", scale2)
            , ("scale3", scale3)
            , ("scale4", scale4)
            , ("scale5", scale5)
            , ("filter1", filter1)
            , ("filter2", filter2)
            ]


axis1 :: VegaLite
axis1 =
    let
        dataVals =
            dataFromColumns []
                . dataColumn "x" (Numbers [ 0, 1000, 1000, 0, 0, 1000 ])
                . dataColumn "y" (Numbers [ 1000, 1000, 0, 0, 1000, 0 ])
                . dataColumn "order" (Numbers [1..6])

        enc =
            encoding
                . position X [ PName "x", PmType Quantitative, PAxis [] ]
                . position Y [ PName "y", PmType Quantitative, PAxis [] ]
                . order [ OName "order", OmType Ordinal ]
    in
    toVegaLite [ dataVals [], enc [], mark Line [] ]


scaleEncode :: (VLProperty, VLSpec) -> VegaLite
scaleEncode enc =
    let
        dataVals =
            dataFromColumns []
                . dataColumn "x" (Numbers [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ])
                . dataColumn "y" (Numbers [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ])
                . dataColumn "val" (Numbers [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ])
                . dataColumn "cat" (Strings [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" ])
    in
    toVegaLite [ width 400, height 400, dataVals [], enc, mark Point [] ]


scale0 :: VegaLite
scale0 =
    (encoding
        . position X [ PName "x", PmType Quantitative ]
        . position Y [ PName "y", PmType Quantitative ]
        . color [ MName "val", MmType Ordinal ]
        . size [ MName "val", MmType Quantitative ]
        . shape [ MName "cat", MmType Nominal ]
    )
        []
        & scaleEncode


scale1 :: VegaLite
scale1 =
    (encoding
        . position X [ PName "x", PmType Quantitative, PScale [] ]
        . position Y [ PName "y", PmType Quantitative ]
        . color [ MName "val", MmType Ordinal ]
        . size [ MName "val", MmType Quantitative ]
        . shape [ MName "cat", MmType Nominal ]
    )
        []
        & scaleEncode


scale2 :: VegaLite
scale2 =
    (encoding
        . position X [ PName "x", PmType Quantitative ]
        . position Y [ PName "y", PmType Quantitative, PScale [] ]
        . color [ MName "val", MmType Ordinal ]
        . size [ MName "val", MmType Quantitative ]
        . shape [ MName "cat", MmType Nominal ]
    )
        []
        & scaleEncode


scale3 :: VegaLite
scale3 =
    (encoding
        . position X [ PName "x", PmType Quantitative ]
        . position Y [ PName "y", PmType Quantitative ]
        . color [ MName "val", MmType Ordinal, MScale [] ]
        . size [ MName "val", MmType Quantitative ]
        . shape [ MName "cat", MmType Nominal ]
    )
        []
        & scaleEncode


scale4 :: VegaLite
scale4 =
    (encoding
        . position X [ PName "x", PmType Quantitative ]
        . position Y [ PName "y", PmType Quantitative ]
        . color [ MName "val", MmType Ordinal ]
        . size [ MName "val", MmType Quantitative, MScale [] ]
        . shape [ MName "cat", MmType Nominal ]
    )
        []
        & scaleEncode


scale5 :: VegaLite
scale5 =
    (encoding
        . position X [ PName "x", PmType Quantitative ]
        . position Y [ PName "y", PmType Quantitative ]
        . color [ MName "val", MmType Ordinal ]
        . size [ MName "val", MmType Quantitative ]
        . shape [ MName "cat", MmType Nominal, MScale [] ]
    )
        []
        & scaleEncode


filter1 :: VegaLite
filter1 =
    let
        config =
            configure
                . configuration (RemoveInvalid False)

        enc =
            encoding
                . position X [ PName "IMDB_Rating", PmType Quantitative ]
                . position Y [ PName "Rotten_Tomatoes_Rating", PmType Quantitative ]
                . color
                    [ MDataCondition
                        [ (Expr "datum.IMDB_Rating === null || datum.Rotten_Tomatoes_Rating === null"
                          , [ MString "#ddd" ] )
                        ]
                        [ MString "rgb(76,120,168)" ]
                    ]
    in
    toVegaLite
        [ config []
        , dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
        , mark Point[]
        , enc []
        ]

filter2 :: VegaLite
filter2 =
    let
        config =
            configure
                . configuration (RemoveInvalid False)

        trans =
            transform
                . filter (FValid "IMDB_Rating")
                . filter (FValid "Rotten_Tomatoes_Rating")

        enc =
            encoding
                . position X [ PName "IMDB_Rating", PmType Quantitative ]
                . position Y [ PName "Rotten_Tomatoes_Rating", PmType Quantitative ]
                . color
                    [ MDataCondition
                        [ (Expr "datum.IMDB_Rating === null || datum.Rotten_Tomatoes_Rating === null"
                          , [ MString "#ddd" ])
                        ]
                        [ MString "rgb(76,120,168)" ]
                    ]
    in
    toVegaLite
        [ config []
        , trans []
        , dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
        , mark Point[]
        , enc []
        ]