-- | test all the diffent classes of a Foundation's collection class
--
-- * testEqualityProperties
-- * testOrderingProperties
-- * testIsListPropertyies
-- * testMonoidProperties
-- * testCollectionProperties
-- * testSequentialProperties
--
collectionProperties :: forall collection
                      . ( Sequential collection
                        , Typeable collection, Typeable (Element collection)
                        , Eq collection,   Eq (Element collection)
                        , Show collection, Show (Element collection)
                        , Ord collection,  Ord (Element collection)
                        )
                     => String
                     -> Proxy collection
                     -> Gen (Element collection)
                     -> Test
collectionProperties name proxy genElement = Group name
    [ testEqualityProperties   proxy genElement
    , testOrderingProperties   proxy genElement
    , testIsListPropertyies    proxy genElement
    , testMonoidProperties     proxy genElement
    , testCollectionProperties proxy genElement
    , testSequentialProperties proxy genElement
    ]
collectionProperties :: forall collection
                      . ( Sequential collection
                        , Typeable collection, Typeable (Element collection)
                        , Eq collection,   Eq (Element collection)
                        , Show collection, Show (Element collection)
                        , Ord collection,  Ord (Element collection)
                        )
                     => String
                     -> Proxy collection
                     -> Gen (Element collection)
                     -> Test
collectionProperties name proxy genElement = Group name
    [ testEqualityProperties   proxy genElement
    , testOrderingProperties   proxy genElement
    , testIsListPropertyies    proxy genElement
    , testMonoidProperties     proxy genElement
    , testCollectionProperties proxy genElement
    , testSequentialProperties proxy genElement
    ]
collectionProperties name proxy genElement = Group name
    [ testEqualityProperties   proxy genElement
    , testOrderingProperties   proxy genElement
    , testIsListPropertyies    proxy genElement
    , testMonoidProperties     proxy genElement
    , testCollectionProperties proxy genElement
    , testSequentialProperties proxy genElement
    ]