packages feed

halide-haskell-0.0.2.0: test/Language/Halide/BoundaryConditionsSpec.hs

module Language.Halide.BoundaryConditionsSpec (spec) where

import Language.Halide
import Test.Hspec

spec :: Spec
spec = do
  it "extends the domain by repeating the edges" $ do
    let mat :: [[Float]]
        mat = [[1, 2, 3], [4, 5, 6]]
    asBufferParam @2 @Float mat $ \mat' -> do
      [i, j] <- mapM mkVar ["i", "j"]
      extended <- repeatEdge mat'
      f <- define "f" (i, j) $ extended ! (i - 1, j - 1)
      realize f [4, 5] peekToList
        `shouldReturn` [[1, 1, 2, 3, 3], [1, 1, 2, 3, 3], [4, 4, 5, 6, 6], [4, 4, 5, 6, 6]]
  it "extends the domain by filling with a constant value" $ do
    let mat :: [[Float]]
        mat = [[1, 2, 3], [4, 5, 6]]
    asBufferParam @2 @Float mat $ \mat' -> do
      [i, j] <- mapM mkVar ["i", "j"]
      extended <- constantExterior 0 mat'
      f <- define "f" (i, j) $ extended ! (i - 1, j - 1)
      realize f [4, 5] peekToList
        `shouldReturn` [[0, 0, 0, 0, 0], [0, 1, 2, 3, 0], [0, 4, 5, 6, 0], [0, 0, 0, 0, 0]]