cursor-gen-0.4.0.0: test/Cursor/Simple/Tree/InsertSpec.hs
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Cursor.Simple.Tree.InsertSpec
( spec,
)
where
import Cursor.Simple.Tree hiding (TreeCursor)
import Cursor.Simple.Tree.Gen ()
import Cursor.Tree.Types
import Data.Tree
import Test.Hspec
import Test.Validity
spec :: Spec
spec = do
describe "treeCursorInsert" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorInsert @Bool @Bool
it "inserts the element" pending
describe "treeCursorInsertAndSelect" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorInsertAndSelect @Bool
it "inserts and select the element" pending
describe "treeCursorInsertNodeSingleAndSelect" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorInsertNodeSingleAndSelect @Bool
it "inserts and select the element" pending
describe "treeCursorInsertNodeAndSelect" $ do
it "produces valids on valids" $ producesValid3 $ treeCursorInsertNodeAndSelect @Bool
it "inserts and select the element" pending
describe "treeCursorAppend" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorAppend @Bool @Bool
it "appends the element" pending
describe "treeCursorAppendAndSelect" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorAppendAndSelect @Bool
it "appends and select the element" pending
describe "treeCursorAppendNodeSingleAndSelect" $ do
it "produces valids on valids" $ producesValid2 $ treeCursorAppendNodeSingleAndSelect @Bool
it "appends and select the element" pending
describe "treeCursorAppendNodeAndSelect" $ do
it "produces valids on valids" $ producesValid3 $ treeCursorAppendNodeAndSelect @Bool
it "appends and select the element" pending
describe "treeCursorAddChildAtPos" $ do
it "produces valid cursors " $ producesValid3 $ treeCursorAddChildAtPos @Bool @Bool
it "adds a tree at the given index in the children of the current node" pending
describe "treeCursorAddChildAtStart" $ do
it "produces valid cursors " $ producesValid2 $ treeCursorAddChildAtStart @Bool @Bool
it "adds a tree at the start of the children of the current node" pending
describe "treeCursorAddChildAtEnd" $ do
it "produces valid cursors " $ producesValid2 $ treeCursorAddChildAtEnd @Bool @Bool
it "adds a tree at the end of the children of the current node" pending
describe "treeCursorAddChildAtPosAndSelect" $ do
it "produces valid cursors " $ producesValid3 $ treeCursorAddChildAtPosAndSelect @Bool
it "adds a tree at the given index in theAndSelect children of the current node" pending
describe "treeCursorAddChildAtStartAndSelect" $ do
it "producesAndSelect valid cursors " $ producesValid2 $ treeCursorAddChildAtStartAndSelect @Bool
it "adds a tree at the start of the children of the current node" pending
describe "treeCursorAddChildAtEndAndSelect" $ do
it "produces valid cursors " $ producesValid2 $ treeCursorAddChildAtEndAndSelect @Bool
it "adds a tree at the end of the children of the current node" pending
describe "treeCursorAddChildNodeSingleAtPosAndSelect" $ it "produces valid cursors" $ producesValid3 (treeCursorAddChildNodeSingleAtPosAndSelect @Bool)
describe "treeCursorAddChildNodeSingleAtStartAndSelect" $ it "produces valid cursors" $ producesValid2 (treeCursorAddChildNodeSingleAtStartAndSelect @Bool)
describe "treeCursorAddChildNodeSingleAtEndAndSelect" $ it "produces valid cursors" $ producesValid2 (treeCursorAddChildNodeSingleAtEndAndSelect @Bool)
describe "treeCursorAddChildNodeAtPosAndSelect" $ it "produces valid cursors" $ forAllValid $ producesValid3 . (treeCursorAddChildNodeAtPosAndSelect @Bool)
describe "treeCursorAddChildNodeAtStartAndSelect" $ do
it "produces valid cursors" $ producesValid3 (treeCursorAddChildNodeAtStartAndSelect @Bool)
it "works for this example" $
let tc =
TreeCursor
{ treeAbove =
Just
TreeAbove
{ treeAboveLefts = map makeCTree [Node "1" [], Node "2" []],
treeAboveAbove = Nothing,
treeAboveNode = "bar",
treeAboveRights = map makeCTree [Node "3" [], Node "4" []]
},
treeCurrent = "baz",
treeBelow = makeCForest [Node "a" [], Node "b" []]
}
tc' =
TreeCursor
{ treeAbove =
Just
TreeAbove
{ treeAboveLefts = [],
treeAboveAbove =
Just
TreeAbove
{ treeAboveLefts = map makeCTree [Node "1" [], Node "2" []],
treeAboveAbove = Nothing,
treeAboveNode = "bar",
treeAboveRights = map makeCTree [Node "3" [], Node "4" []]
},
treeAboveNode = "baz",
treeAboveRights = map makeCTree [Node "a" [], Node "b" []]
},
treeCurrent = "new",
treeBelow = makeCForest []
}
in treeCursorAddChildNodeAtStartAndSelect "new" [] tc `shouldBe` tc'
describe "treeCursorAddChildNodeAtEndAndSelect" $ do
it "produces valid cursors" $ producesValid3 (treeCursorAddChildNodeAtEndAndSelect @Bool)
it "works for this example" $
let tc =
TreeCursor
{ treeAbove =
Just
TreeAbove
{ treeAboveLefts = map makeCTree [Node "1" [], Node "2" []],
treeAboveAbove = Nothing,
treeAboveNode = "bar",
treeAboveRights = map makeCTree [Node "3" [], Node "4" []]
},
treeCurrent = "baz",
treeBelow = makeCForest [Node "a" [], Node "b" []]
}
tc' =
TreeCursor
{ treeAbove =
Just
TreeAbove
{ treeAboveLefts = map makeCTree [Node "b" [], Node "a" []],
treeAboveAbove =
Just
TreeAbove
{ treeAboveLefts = map makeCTree [Node "1" [], Node "2" []],
treeAboveAbove = Nothing,
treeAboveNode = "bar",
treeAboveRights = map makeCTree [Node "3" [], Node "4" []]
},
treeAboveNode = "baz",
treeAboveRights = []
},
treeCurrent = "new",
treeBelow = makeCForest []
}
in treeCursorAddChildNodeAtEndAndSelect "new" [] tc `shouldBe` tc'