packages feed

large-anon-0.3.0: test/Test/Sanity/Regression.hs

{-# LANGUAGE OverloadedLabels #-}

{-# OPTIONS_GHC -fplugin=Data.Record.Anon.Plugin #-}

module Test.Sanity.Regression (tests) where

import Test.Tasty
import Test.Tasty.HUnit

import Data.Record.Anon.Simple

{-------------------------------------------------------------------------------
  Top-level
-------------------------------------------------------------------------------}

-- | Sets for specific bugs
tests :: TestTree
tests = testGroup "Test.Sanity.Regression" [
      testGroup "issue146" [
          testCase "get_insert_anon"                      test_get_insert_anon
        , testCase "get_insert_applyPending_insert_empty" test_get_insert_applyPending_insert_empty
        , testCase "get_insert_insert_empty"              test_get_insert_insert_empty
        , testCase "get_applyPending_insert_empty"        test_get_applyPending_insert_empty
        , testCase "get_insert_empty"                     test_get_insert_empty
        ]
    ]

{-------------------------------------------------------------------------------
  Issue #146
-------------------------------------------------------------------------------}

-- | The issue as reported
--
-- The bug caused this test to segfault.
test_get_insert_anon :: Assertion
test_get_insert_anon =
    assertEqual "" "field1" $
        get #field1
      $ insert #field2 "field2"
      $ ANON { field1 = "field1" }

-- | Manual expansion of ANON
--
-- The bug caused this test to segfault.
test_get_insert_applyPending_insert_empty :: Assertion
test_get_insert_applyPending_insert_empty =
    assertEqual "" "field1" $
        get #field1
      $ insert #field2 "field2"
      $ applyPending
      $ insert #field1 "field1"
      $ empty

-- | Omit call to 'applyPending'
--
-- This test was not affected by the bug.
test_get_insert_insert_empty :: Assertion
test_get_insert_insert_empty =
    assertEqual "" "field1" $
        get #field1
      $ insert #field2 "field2"
      $ insert #field1 "field1"
      $ empty

-- | Only single insert, but still call applyPending
--
-- This test was not affected by the bug.
test_get_applyPending_insert_empty :: Assertion
test_get_applyPending_insert_empty =
    assertEqual "" "field1" $
        get #field1
      $ applyPending
      $ insert #field1 "field1"
      $ empty

-- | Simplest form: just a get after an insert
--
-- This test was not affected by the bug.
test_get_insert_empty :: Assertion
test_get_insert_empty =
    assertEqual "" "field1" $
        get #field1
      $ insert #field1 "field1"
      $ empty