-- | This module provides functions to test Braun trees for invariants -- and properties. module Data.Tree.Braun.Sized.Properties where import qualified Data.Tree.Braun.Properties as Unsized import Data.Tree.Braun.Sized import Data.Foldable import Data.List (sortBy) import Data.Functor.Classes -- | Returns True iff the stored size in the Braun tree is its actual -- size. validSize :: Braun a -> Bool validSize (Braun n xs) = n == length xs -- | Returns True iff the tree is a proper Braun tree. isBraun :: Braun a -> Bool isBraun (Braun _ xs) = Unsized.isBraun xs -- | Returns True iff the elements of the tree are in order. inOrder :: (a -> a -> Ordering) -> Braun a -> Bool inOrder cmp b = liftCompare cmp (sortBy cmp xs) xs == EQ where xs = toList b