Fix Seminar.switch bug if (i' == j')

This commit is contained in:
David Pätzel 2019-10-19 15:56:44 +02:00
parent 3c1a1a9be6
commit 36999532c2

View File

@ -146,8 +146,12 @@ instance Individual I where
where where
f x v1 v2 i = if i <= x then v1 else v2 f x v1 v2 i = if i <= x then v1 else v2
{-|
Swaps topics at positions 'i'' and 'j'' in the given assignment.
-}
switch :: Int -> Int -> Assignment -> Assignment switch :: Int -> Int -> Assignment -> Assignment
switch i' j' xs switch i' j' xs
| i' == j' = xs
| 0 <= i' && i' < length xs && 0 <= j' && j' < length xs = | 0 <= i' && i' < length xs && 0 <= j' && j' < length xs =
let i = min i' j' let i = min i' j'
j = max i' j' j = max i' j'
@ -159,6 +163,8 @@ switch i' j' xs
in left ++ [(fst ei, snd ej)] ++ middle ++ [(fst ej, snd ei)] ++ right in left ++ [(fst ei, snd ej)] ++ middle ++ [(fst ej, snd ei)] ++ right
| otherwise = xs | otherwise = xs
prop_switch_keepsValid i j xs = valid xs == valid (switch i j xs)
{-| {-|
Whether the given assignment is valid (every student occurs at most once, as Whether the given assignment is valid (every student occurs at most once, as
does every topic). does every topic).