summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDon Stewart <dons@cse.unsw.edu.au>2007-04-29 05:58:23 +0200
committerDon Stewart <dons@cse.unsw.edu.au>2007-04-29 05:58:23 +0200
commit67b421d09c4a2aba4f3175c7771ff4724aa66334 (patch)
tree9ab4e188588c6abdf9bd09abd3bfc3b3df62d3cf /tests
parentb510eb1321800274da9d6e38ec89ced9c46b8430 (diff)
downloadmetatile-67b421d09c4a2aba4f3175c7771ff4724aa66334.tar
metatile-67b421d09c4a2aba4f3175c7771ff4724aa66334.zip
add fromList to Properties.hs
darcs-hash:20070429035823-9c5c1-37dc9df3086bb7672eeea83e4add3aeb4ffa0bd4
Diffstat (limited to 'tests')
-rw-r--r--tests/Properties.hs21
1 files changed, 20 insertions, 1 deletions
diff --git a/tests/Properties.hs b/tests/Properties.hs
index c55a632..83aba87 100644
--- a/tests/Properties.hs
+++ b/tests/Properties.hs
@@ -15,12 +15,31 @@ import Test.QuickCheck hiding (promote)
import System.IO
import System.Random
import Text.Printf
-import Data.List (nub,sort,group,sort,intersperse)
+import Data.List (nub,sort,group,sort,intersperse,genericLength)
import Data.Map (keys,elems)
-- ---------------------------------------------------------------------
-- QuickCheck properties for the StackSet
+
+-- | fromList. Build a new StackSet from a list of list of elements,
+-- keeping track of the currently focused workspace, and the total
+-- number of workspaces. If there are duplicates in the list, the last
+-- occurence wins.
+fromList :: (Integral i, Integral j, Ord a) => (i, Int,[[a]]) -> StackSet i j a
+fromList (_,_,[]) = error "Cannot build a StackSet from an empty list"
+
+fromList (n,m,xs) | n < 0 || n >= genericLength xs
+ = error $ "Cursor index is out of range: " ++ show (n, length xs)
+ | m < 1 || m > genericLength xs
+ = error $ "Can't have more screens than workspaces: " ++ show (m, length xs)
+
+fromList (o,m,xs) = view o $ foldr (\(i,ys) s ->
+ foldr (\a t -> insert a i t) s ys)
+ (empty (length xs) m) (zip [0..] xs)
+
+-- ---------------------------------------------------------------------
+
-- | Height of stack 'n'
height :: Int -> T -> Int
height i w = length (index i w)