From a1e88494b677ae67db0ee6864a3b03c2c0a9cb9d Mon Sep 17 00:00:00 2001 From: Kaloyan Stoykov Date: Fri, 8 Mar 2024 19:30:16 +0100 Subject: [PATCH] Feat: CreditCard.elm and screenshot of tests --- wk3/src/CreditCard.elm | 55 ++++++++++++++++++++++++++++++++++++ wk3/src/TestsCreditCard.png | Bin 0 -> 6654 bytes 2 files changed, 55 insertions(+) create mode 100644 wk3/src/TestsCreditCard.png diff --git a/wk3/src/CreditCard.elm b/wk3/src/CreditCard.elm index 2277a20..163a0b8 100644 --- a/wk3/src/CreditCard.elm +++ b/wk3/src/CreditCard.elm @@ -37,8 +37,10 @@ doubleSecond xs = case xs of [] -> [] + -- A case where the first two items are extracted and ys is used for recursion y :: z :: ys -> y :: z * 2 :: doubleSecond ys + -- Base recursive case y :: ys -> y :: doubleSecond ys @@ -205,6 +207,59 @@ creditcards = [ 4716347184862961, -- collecting results for printing: +testToDigitsUnevenNumberedString: Bool +testToDigitsUnevenNumberedString = (toDigits "379055805946370" == [3,7,9,0,5,5,8,0,5,9,4,6,3,7,0]) + +testToDigitEvenNumberedString: Bool +testToDigitEvenNumberedString = (toDigits "4716347184862961" == [4,7,1,6,3,4,7,1,8,4,8,6,2,9,6,1]) + + +testToDigitRevUneven: Bool +testToDigitRevUneven = (toDigitsRev "345763240913232" == [2,3,2,3,1,9,0,4,2,3,6,7,5,4,3]) + +testToDigitRevEven: Bool +testToDigitRevEven = (toDigitsRev "4716347184862961" == [1,6,9,2,6,8,4,8,1,7,4,3,6,1,7,4]) + + +testDoubleSecondEven: Bool +testDoubleSecondEven = (doubleSecond [4,7,1,6,3,4,7,1,8,4,8,6,2,9,6,1] == [4,14,1,12,3,8,7,2,8,8,8,12,2,18,6,2]) + + +testDoubleSecondUneven: Bool +testDoubleSecondUneven = (doubleSecond [3,4,5,7,6,3,2,4,0,9,1,3,2,3,2] == [3,8,5,14,6,6,2,8,0,18,1,6,2,6,2]) + + +testSumDigitsUneven: Bool +testSumDigitsUneven = (sumDigits [3,8,5,14,6,6,2,8,0,18,1,6,2,6,2] == 69) + +testSumDigitsEven: Bool +testSumDigitsEven = (sumDigits [4,14,1,12,3,8,7,2,8,8,8,12,2,18,6,2] == 79) + + +-- Test a valid card +testIsValid: Bool +testIsValid = (isValid "4716347184862961" == True ) + +-- Test an invald card +testIsNOTvalid: Bool +testIsNOTvalid = (isValid "4532899082537349" == False) + + +testNumValid: Bool +testNumValid = (numValid ["4532899082537349", "4485429517622493", "4320635998241421", "4929778869082405", "5256283618614517" ] == 2) + + +testNumValidNoValidCards: Bool +testNumValidNoValidCards = (numValid ["5567798501168013", "4532818294886666"] == 0) + + +testExampleCreditCards: Bool +testExampleCreditCards = (countValidCards creditcards == 94) + +allTests: List Bool +allTests = [testToDigitsUnevenNumberedString, testToDigitEvenNumberedString, testToDigitRevUneven, testToDigitRevEven, testDoubleSecondEven, testDoubleSecondUneven, testSumDigitsUneven, testSumDigitsEven, testIsValid, testIsNOTvalid, testNumValid, testNumValidNoValidCards, testExampleCreditCards] + + my_results = [ "calculations:", diff --git a/wk3/src/TestsCreditCard.png b/wk3/src/TestsCreditCard.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f4043d352327a172c2106583164ddc1ac386bf GIT binary patch literal 6654 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 HuzT@ee|