module Main.Sample where import Prelude import Test.QuickCheck.Instances import qualified VectorBuilder.Builder as A import qualified Data.Vector as B import qualified Test.Tasty.QuickCheck as C data Sample a = Empty | Singleton a | Vector (Vector a) deriving (Show) toBuilder :: Sample a -> A.Builder a toBuilder = \case Empty -> A.empty Singleton a -> A.singleton a Vector a -> A.vector a toVector :: Sample a -> Vector a toVector = \case Empty -> B.empty Singleton a -> B.singleton a Vector a -> a instance C.Arbitrary a => C.Arbitrary (Sample a) where arbitrary = do constructorIndex <- C.choose (0 :: Int, 2) case constructorIndex of 0 -> return Empty 1 -> C.arbitrary >>= return . Singleton 2 -> C.arbitrary >>= return . Vector