packages feed

cube-0.1.0: tests/test.hs

{-#LANGUAGE OverloadedStrings#-}
{-#LANGUAGE FlexibleContexts#-}
{-#LANGUAGE TemplateHaskell#-}
{-#LANGUAGE QuasiQuotes#-}

import Test.Hspec
import Language.Cube

main :: IO ()
main = 
  hspec $ do
    describe "Cube(quoternion)" $ do
      it "dx" $ do
        cube 1 0 0 `shouldBe` dx
      it "dy" $ do
        cube 0 1 0 `shouldBe` dy
      it "dz" $ do
        cube 0 0 1 `shouldBe` dz
      it "dx +  dx" $ do
        dx + dx `shouldBe` cube 2 0 0 
      it "2 * dx" $ do
        2 * dx `shouldBe` cube 2 0 0 
      it "-2 * dx" $ do
        (-2) * dx `shouldBe` cube (-2) 0 0 
      it "route pi/2" $ do
        (dr (pi/2) dz) * dx `shouldBe` cube 0 1 0
      it "route pi" $ do
        (dr (pi) dz) * dx `shouldBe` cube (-1) 0 0
      it "route 3*pi/2" $ do
        (dr (3*pi/2) dz) * dx `shouldBe` cube 0 (-1) 0
      it "route 2*pi" $ do
        (dr (2*pi) dz) * dx `shouldBe` cube 1 0 0
      it "multi" $ do
        dx * dy `shouldBe` dz
      it "multi" $ do
        dy * dx `shouldBe` (-dz)
    describe "Block" $ do
      it "dx" $ do
        block [dx,dx] `shouldBe` block [dx]
      it "dx+dy" $ do
        block [dx] + block [dy] `shouldBe` block [dx,dy]
      it "[dx,dy]-dy" $ do
        block [dx,dy] - block [dy] `shouldBe` block [dx]
      it "convolution(dx * [-2*dx,2*dx])" $ do
        block [dx] * block [-2*dx,2*dx] `shouldBe` block [-dx,3*dx]
    describe "ToSTL" $ do
      it "Block Cube" $ do
        writeFileStl "tmp.stl" (block [dx] :: Block Cube) `shouldReturn` ()
        writeFileStl "house.stl" house `shouldReturn` ()