diff options
| -rw-r--r-- | AufgabeFFP7.hs | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/AufgabeFFP7.hs b/AufgabeFFP7.hs index 13f1448..fc9d594 100644 --- a/AufgabeFFP7.hs +++ b/AufgabeFFP7.hs | |||
| @@ -2,7 +2,7 @@ module AufgabeFFP7 | |||
| 2 | where | 2 | where |
| 3 | 3 | ||
| 4 | import Data.Char | 4 | import Data.Char |
| 5 | import Data.List hiding ((\\)) | 5 | import Data.List hiding ((\\), insert) |
| 6 | import Test.QuickCheck | 6 | import Test.QuickCheck |
| 7 | 7 | ||
| 8 | type Buffer = (Int, String) | 8 | type Buffer = (Int, String) |
| @@ -47,33 +47,66 @@ atRight (cur, buf) = cur >= length buf | |||
| 47 | type BufferI = (String, String) | 47 | type BufferI = (String, String) |
| 48 | 48 | ||
| 49 | -- the empty buffer | 49 | -- the empty buffer |
| 50 | --TODO emptyI :: BufferI | 50 | emptyI :: BufferI |
| 51 | emptyI = ("", "") | ||
| 51 | 52 | ||
| 52 | -- insert character before cursor | 53 | -- insert character before cursor |
| 53 | --TODO insertI :: Char -> BufferI -> BufferI | 54 | insertI :: Char -> BufferI -> BufferI |
| 55 | insertI c (beforeC, afterC) = ([c] ++ beforeC, afterC) | ||
| 54 | 56 | ||
| 55 | -- delete character before cursor | 57 | -- delete character before cursor |
| 56 | --TODO deleteI :: BufferI -> BufferI | 58 | --TODO deleteI :: BufferI -> BufferI |
| 57 | 59 | ||
| 58 | -- move cursor left one character | 60 | -- move cursor left one character |
| 59 | --TODO leftI :: BufferI -> BufferI | 61 | leftI :: BufferI -> BufferI |
| 62 | leftI ([], afterC) = ([], afterC) | ||
| 63 | leftI (last:beforeC, afterC) = (beforeC, [last] ++ afterC) | ||
| 60 | 64 | ||
| 61 | -- move cursor right one character | 65 | -- move cursor right one character |
| 62 | --TODO rightI :: BufferI -> BufferI | 66 | --TODO rightI :: BufferI -> BufferI |
| 63 | 67 | ||
| 64 | -- is cursor at left end? | 68 | -- is cursor at left end? |
| 65 | --TODO atLeftI :: BufferI -> Bool | 69 | atLeftI :: BufferI -> Bool |
| 70 | atLeftI ([], _) = True | ||
| 71 | atLeftI (_, _) = False | ||
| 66 | 72 | ||
| 67 | -- is cursor at right end? | 73 | -- is cursor at right end? |
| 68 | --TODO atRightI :: BufferI -> Bool | 74 | atRightI :: BufferI -> Bool |
| 75 | atRightI (_, []) = True | ||
| 76 | atRightI (_, _) = False | ||
| 77 | |||
| 69 | 78 | ||
| 70 | -------------------------------------------------------------------------------- | 79 | -------------------------------------------------------------------------------- |
| 71 | 80 | ||
| 72 | --TODO retrieve :: BufferI -> Buffer | 81 | retrieve :: BufferI -> Buffer |
| 82 | retrieve (beforeC, afterC) = (length beforeC, (reverse beforeC) ++ afterC) | ||
| 73 | 83 | ||
| 74 | -------------------------------------------------------------------------------- | 84 | -------------------------------------------------------------------------------- |
| 75 | 85 | ||
| 76 | --TODO: quicheck stuff | 86 | -- quickcheck Buffer == BufferI |
| 87 | |||
| 88 | bufEqual :: BufferI -> Buffer -> Bool | ||
| 89 | bufEqual bi b = (retrieve bi) == b | ||
| 90 | |||
| 91 | -- generator for equal data | ||
| 92 | genEqualBuf :: Gen(Buffer, BufferI) | ||
| 93 | genEqualBuf = do s <- arbitrary ; c <- choose (0, length s) ; return ( (c, s), revFst (splitAt c s) ) | ||
| 94 | where | ||
| 95 | revFst = \(a, b) -> (reverse a, b) | ||
| 96 | |||
| 97 | instance Arbitrary Char where | ||
| 98 | arbitrary = elements $ ['a'..'z'] ++ ['A'..'Z'] | ||
| 99 | |||
| 100 | -- naive insert test, will exhaust | ||
| 101 | prop_insert :: BufferI -> Buffer -> Char -> Property | ||
| 102 | prop_insert bi b c = bufEqual bi b | ||
| 103 | ==> bufEqual (insertI c bi) (insert c b) | ||
| 104 | |||
| 105 | -- use equal data generator | ||
| 106 | prop_insert2 :: Char -> Property | ||
| 107 | prop_insert2 c = | ||
| 108 | forAll (genEqualBuf) $ \(b, bi) -> bufEqual (insertI c bi) (insert c b) | ||
| 109 | |||
| 77 | 110 | ||
| 78 | -------------------------------------------------------------------------------- | 111 | -------------------------------------------------------------------------------- |
| 79 | 112 | ||
