{-# LANGUAGE BangPatterns #-}
+
-- | The Misc module contains helper functions that seem out of place
-- anywhere else.
-module Misc
+--
+module Misc (
+ all_equal,
+ disjoint,
+ factorial,
+ flatten,
+ misc_properties,
+ misc_tests,
+ transpose_xz )
where
-import qualified Data.Vector as V (Vector, elem, empty, filter)
-import Test.Framework (Test, testGroup)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.Framework.Providers.QuickCheck2 (testProperty)
-import Test.HUnit (Assertion, assertEqual)
-import Test.QuickCheck
+import qualified Data.Vector as V ( Vector, elem, empty, filter )
+import Test.Framework ( Test, testGroup )
+import Test.Framework.Providers.HUnit ( testCase )
+import Test.Framework.Providers.QuickCheck2 ( testProperty )
+import Test.HUnit ( Assertion, assertEqual )
+import Test.QuickCheck ( Property, (==>) )
-- | The standard factorial function. See
-- Only used in tests.
--
all_equal :: (Eq a) => [a] -> Bool
-all_equal xs =
- all (== first_element) other_elements
- where
- first_element = head xs
- other_elements = tail xs
+all_equal [] = True -- Vacuously
+all_equal (x:xs) = all (== x) xs
+
-- | Returns 'True' if the vectors xs and ys are disjoint, 'False'