packages feed

pure-noise-0.2.1.1: test/PerlinSpec.hs

module PerlinSpec where

import GHC.Exts (noinline)
import Golden.Util
import Numeric.Noise
import Test.Tasty (TestTree, testGroup)

seed :: Seed
seed = 82384

prop_noise2_normalized :: Double -> Double -> Bool
prop_noise2_normalized x y =
  let n = noise2At perlin2 seed x y
   in n >= -1 && n <= 1

prop_noise2_addition_associative :: Rational -> Rational -> Bool
prop_noise2_addition_associative x y =
  noise2At ((noinline perlin2 + noinline superSimplex2) + noinline openSimplex2) seed x y
    == noise2At (perlin2 + (noinline superSimplex2 + noinline openSimplex2)) seed x y

prop_noise2_addition_commutative :: Rational -> Rational -> Bool
prop_noise2_addition_commutative x y =
  noise2At (noinline perlin2 + noinline superSimplex2) seed x y
    == noise2At (noinline superSimplex2 + noinline perlin2) seed x y

test_golden_perlin :: TestTree
test_golden_perlin =
  testGroup
    "Perlin Golden Tests"
    [ testGroup "2D Grid Tests" perlin2DGridTests
    , testGroup "2D Sparse Tests" perlin2DSparseTests
    , testGroup "3D Grid Tests" perlin3DGridTests
    , testGroup "3D Sparse Tests" perlin3DSparseTests
    ]

perlin2DGridTests :: [TestTree]
perlin2DGridTests = golden2DImageTests "perlin" defaultSeeds perlin2

perlin2DSparseTests :: [TestTree]
perlin2DSparseTests = golden2DSparseTests "perlin" defaultSeeds perlin2

perlin3DGridTests :: [TestTree]
perlin3DGridTests = golden3DImageTests "perlin" defaultSeeds perlin3

perlin3DSparseTests :: [TestTree]
perlin3DSparseTests = golden3DSparseTests "perlin" defaultSeeds perlin3