Diesmal schreibst du keine Funktionen, sondern Tests für sie. Die Prüfung hat jeweils eine richtige Fassung und einige fehlerhafte: Deine Tests müssen mit der richtigen bestehen und jede fehlerhafte entlarven.
Ein Test sagt, was eine Funktion für einen bestimmten Wert zurückgeben soll, und meldet sich, wenn sie etwas anderes tut:
assert_equal(12, gcd(60, 48)) # erwartet 12 assert_equal(7, gcd(7, 7))
assert_equal(12, gcd(60, 48)) # erwartet 12 assert_equal(7, gcd(7, 7))
assertEqual(12, gcd(60, 48)); // erwartet 12 assertEqual(7, gcd(7, 7));
Zuerst steht, was herauskommen soll, dann der Aufruf. Ein guter Test sucht die Stellen, an denen Fehler wohnen: die Ränder (0, eine leere Liste, das erste und das letzte Element), die Fälle, in denen eine Regel eine Ausnahme hat, und Werte, die nicht ganz gewöhnlich sind (negative Zahlen, zwei gleiche). Ein Test, der nur das Erwartbare prüft, besteht auch mit vielen fehlerhaften Fassungen.
Die Prüfung bringt die Funktion selbst mit; schreib sie nicht hinein, nur die Tests. Meldet die Prüfung, dass eine fehlerhafte Fassung besteht, sagt sie auch, was diese Fassung anders macht.
even(n) soll true zurückgeben, wenn n gerade ist, und sonst false. Schreib Tests, die jede falsche Fassung entlarven: Die Prüfung hat eine richtige und drei, die sich in verschiedenen Fällen irren. Ein Test ist eine Zeile assert_equal(erwartet, ergebnis); der erste steht schon da. Denk an die 0 und an negative Zahlen.
Was macht jede der falschen Fassungen anders? Sie irren sich bei ungeraden Zahlen, bei 0 und negativen Zahlen, oder bei großen Zahlen.
Für jede Art von Zahl ein Test: eine ungerade, die 0, eine negative gerade, eine große gerade.
even(n) soll True zurückgeben, wenn n gerade ist, und sonst False. Schreib Tests, die jede falsche Fassung entlarven: Die Prüfung hat eine richtige und drei, die sich in verschiedenen Fällen irren. Ein Test ist eine Zeile assert_equal(erwartet, ergebnis); der erste steht schon da. Denk an die 0 und an negative Zahlen.
Was macht jede der falschen Fassungen anders? Sie irren sich bei ungeraden Zahlen, bei 0 und negativen Zahlen, oder bei großen Zahlen.
Für jede Art von Zahl ein Test: eine ungerade, die 0, eine negative gerade, eine große gerade.
even(n) soll true zurückgeben, wenn n gerade ist, und sonst false. Schreib Tests, die jede falsche Fassung entlarven: Die Prüfung hat eine richtige und drei, die sich in verschiedenen Fällen irren. Ein Test ist eine Zeile assertEqual(erwartet, ergebnis); der erste steht schon da. Denk an die 0 und an negative Zahlen.
Was macht jede der falschen Fassungen anders? Sie irren sich bei ungeraden Zahlen, bei 0 und negativen Zahlen, oder bei großen Zahlen.
Für jede Art von Zahl ein Test: eine ungerade, die 0, eine negative gerade, eine große gerade.
max_of_two(a, b) soll die größere der beiden Zahlen zurückgeben. Schreib Tests, die jede falsche Fassung entlarven; die Prüfung hat drei. Denk daran, in welcher Reihenfolge die Zahlen kommen können.
Eine Fassung gibt immer die erste Zahl zurück, eine immer die zweite. Wie viele Tests brauchst du, um beide zu erwischen?
max_of_two(a, b) soll die größere der beiden Zahlen zurückgeben. Schreib Tests, die jede falsche Fassung entlarven; die Prüfung hat drei. Denk daran, in welcher Reihenfolge die Zahlen kommen können.
Eine Fassung gibt immer die erste Zahl zurück, eine immer die zweite. Wie viele Tests brauchst du, um beide zu erwischen?
maxOfTwo(a, b) soll die größere der beiden Zahlen zurückgeben. Schreib Tests, die jede falsche Fassung entlarven; die Prüfung hat drei. Denk daran, in welcher Reihenfolge die Zahlen kommen können.
Eine Fassung gibt immer die erste Zahl zurück, eine immer die zweite. Wie viele Tests brauchst du, um beide zu erwischen?
absolute(n) soll den Betrag von n zurückgeben: die Zahl ohne ihr Minus, absolute(-5) ergibt 5. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Welche Arten von Zahlen gibt es für den Betrag? Negative, positive und die 0.
absolute(n) soll den Betrag von n zurückgeben: die Zahl ohne ihr Minus, absolute(-5) ergibt 5. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Welche Arten von Zahlen gibt es für den Betrag? Negative, positive und die 0.
absolute(n) soll den Betrag von n zurückgeben: die Zahl ohne ihr Minus, absolute(-5) ergibt 5. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Welche Arten von Zahlen gibt es für den Betrag? Negative, positive und die 0.
leap_year(year) soll sagen, ob ein Jahr ein Schaltjahr ist: Durch 4 teilbare Jahre sind es, außer die durch 100 teilbaren, außer wieder die durch 400 teilbaren. 2024 ist eins, 1900 nicht, 2000 schon. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Die Regel hat drei Teile. Für jeden Teil ein Jahr, an dem man sieht, ob er beachtet wird: eins durch 4, eins durch 100, eins durch 400.
leap_year(year) soll sagen, ob ein Jahr ein Schaltjahr ist: Durch 4 teilbare Jahre sind es, außer die durch 100 teilbaren, außer wieder die durch 400 teilbaren. 2024 ist eins, 1900 nicht, 2000 schon. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Die Regel hat drei Teile. Für jeden Teil ein Jahr, an dem man sieht, ob er beachtet wird: eins durch 4, eins durch 100, eins durch 400.
leapYear(year) soll sagen, ob ein Jahr ein Schaltjahr ist: Durch 4 teilbare Jahre sind es, außer die durch 100 teilbaren, außer wieder die durch 400 teilbaren. 2024 ist eins, 1900 nicht, 2000 schon. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Die Regel hat drei Teile. Für jeden Teil ein Jahr, an dem man sieht, ob er beachtet wird: eins durch 4, eins durch 100, eins durch 400.
slug(text) soll aus einem Titel eine Adresse machen, wie in den Texten: klein, nur Buchstaben von a bis z und Ziffern, die Wörter mit - verbunden. slug('Hello World!') ergibt 'hello-world'. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung vergisst etwas anderes: groß und klein, Satzzeichen, mehrere Leerzeichen. Ein Titel, in dem alles vorkommt, kann mehrere auf einmal erwischen.
slug(text) soll aus einem Titel eine Adresse machen, wie in den Texten: klein, nur Buchstaben von a bis z und Ziffern, die Wörter mit - verbunden. slug('Hello World!') ergibt 'hello-world'. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung vergisst etwas anderes: groß und klein, Satzzeichen, mehrere Leerzeichen. Ein Titel, in dem alles vorkommt, kann mehrere auf einmal erwischen.
slug(text) soll aus einem Titel eine Adresse machen, wie in den Texten: klein, nur Buchstaben von a bis z und Ziffern, die Wörter mit - verbunden. slug('Hello World!') ergibt 'hello-world'. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung vergisst etwas anderes: groß und klein, Satzzeichen, mehrere Leerzeichen. Ein Titel, in dem alles vorkommt, kann mehrere auf einmal erwischen.
fizzbuzz(n) soll für FizzBuzz zurückgeben, was man bei n sagt, als Text: 'Fizz' bei durch 3 teilbaren, 'Buzz' bei durch 5 teilbaren, 'FizzBuzz' bei durch beide teilbaren, sonst die Zahl als Text. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Vier Arten von Zahlen, vier Antworten. Welche davon prüfst du schon?
fizzbuzz(n) soll für FizzBuzz zurückgeben, was man bei n sagt, als Text: 'Fizz' bei durch 3 teilbaren, 'Buzz' bei durch 5 teilbaren, 'FizzBuzz' bei durch beide teilbaren, sonst die Zahl als Text. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Vier Arten von Zahlen, vier Antworten. Welche davon prüfst du schon?
fizzbuzz(n) soll für FizzBuzz zurückgeben, was man bei n sagt, als Text: 'Fizz' bei durch 3 teilbaren, 'Buzz' bei durch 5 teilbaren, 'FizzBuzz' bei durch beide teilbaren, sonst die Zahl als Text. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Vier Arten von Zahlen, vier Antworten. Welche davon prüfst du schon?
binary_search(numbers, wanted) soll in einer aufsteigend sortierten Liste verschiedener Zahlen den Index von wanted zurückgeben, und nil, wenn die Zahl nicht darin steht. Schreib Tests, die jede der drei falschen Fassungen entlarven. Die Fehler stecken in den Rändern.
Fehler in einer Suche stecken an den Rändern: die erste Zahl, die letzte, eine Liste mit nur einer Zahl, eine Zahl, die fehlt.
binary_search(numbers, wanted) soll in einer aufsteigend sortierten Liste verschiedener Zahlen den Index von wanted zurückgeben, und None, wenn die Zahl nicht darin steht. Schreib Tests, die jede der drei falschen Fassungen entlarven. Die Fehler stecken in den Rändern.
Fehler in einer Suche stecken an den Rändern: die erste Zahl, die letzte, eine Liste mit nur einer Zahl, eine Zahl, die fehlt.
binarySearch(numbers, wanted) soll in einer aufsteigend sortierten Liste verschiedener Zahlen den Index von wanted zurückgeben, und null, wenn die Zahl nicht darin steht. Schreib Tests, die jede der drei falschen Fassungen entlarven. Die Fehler stecken in den Rändern.
Fehler in einer Suche stecken an den Rändern: die erste Zahl, die letzte, eine Liste mit nur einer Zahl, eine Zahl, die fehlt.
merge_sorted(a, b) soll zwei aufsteigend sortierte Listen zu einer sortierten mischen, wie in den Listen: merge_sorted([1, 4], [2, 3]) ergibt [1, 2, 3, 4]. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung scheitert an einer anderen Art von Listen: verschieden lang, ineinander verschränkt, mit einer Zahl in beiden. Ein Test mit allem zugleich erwischt mehrere.
merge_sorted(a, b) soll zwei aufsteigend sortierte Listen zu einer sortierten mischen, wie in den Listen: merge_sorted([1, 4], [2, 3]) ergibt [1, 2, 3, 4]. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung scheitert an einer anderen Art von Listen: verschieden lang, ineinander verschränkt, mit einer Zahl in beiden. Ein Test mit allem zugleich erwischt mehrere.
mergeSorted(a, b) soll zwei aufsteigend sortierte Listen zu einer sortierten mischen, wie in den Listen: mergeSorted([1, 4], [2, 3]) ergibt [1, 2, 3, 4]. Schreib Tests, die jede der drei falschen Fassungen entlarven.
Jede falsche Fassung scheitert an einer anderen Art von Listen: verschieden lang, ineinander verschränkt, mit einer Zahl in beiden. Ein Test mit allem zugleich erwischt mehrere.
Ein Extra für Schnelle: Die Seite ist ohne dieses Kapitel vollständig.
Zwei Katas, die nicht mitzählen.
Diese Fassung von max_of_three(a, b, c) soll die größte der drei Zahlen zurückgeben, hat aber einen Fehler. Finde ihn, indem du einen Test schreibst, an dem sie scheitert und den eine richtige Fassung besteht.
def max_of_three(a, b, c) if a > b && a > c a elsif b > a && b > c b else c end end
Bei verschiedenen Zahlen stimmt sie. Was ist, wenn zwei Zahlen gleich sind?
Diese Fassung von max_of_three(a, b, c) soll die größte der drei Zahlen zurückgeben, hat aber einen Fehler. Finde ihn, indem du einen Test schreibst, an dem sie scheitert und den eine richtige Fassung besteht.
def max_of_three(a, b, c): if a > b and a > c: return a elif b > a and b > c: return b else: return c
Bei verschiedenen Zahlen stimmt sie. Was ist, wenn zwei Zahlen gleich sind?
Diese Fassung von maxOfThree(a, b, c) soll die größte der drei Zahlen zurückgeben, hat aber einen Fehler. Finde ihn, indem du einen Test schreibst, an dem sie scheitert und den eine richtige Fassung besteht.
function maxOfThree(a, b, c) { if (a > b && a > c) return a; else if (b > a && b > c) return b; else return c; }
Bei verschiedenen Zahlen stimmt sie. Was ist, wenn zwei Zahlen gleich sind?
caesar(text, shift) soll verschlüsseln wie in den Texten: Klein- und Großbuchstaben rücken um shift weiter, nach z geht es bei a weiter, auch rückwärts, und alles andere bleibt. Schreib Tests, die jede der vier falschen Fassungen entlarven.
Vier Fehler, vier Fälle, die eine Verschlüsselung beherrschen muss: über z hinaus, Großbuchstaben, rückwärts, alles andere stehen lassen.
caesar(text, shift) soll verschlüsseln wie in den Texten: Klein- und Großbuchstaben rücken um shift weiter, nach z geht es bei a weiter, auch rückwärts, und alles andere bleibt. Schreib Tests, die jede der vier falschen Fassungen entlarven.
Vier Fehler, vier Fälle, die eine Verschlüsselung beherrschen muss: über z hinaus, Großbuchstaben, rückwärts, alles andere stehen lassen.
caesar(text, shift) soll verschlüsseln wie in den Texten: Klein- und Großbuchstaben rücken um shift weiter, nach z geht es bei a weiter, auch rückwärts, und alles andere bleibt. Schreib Tests, die jede der vier falschen Fassungen entlarven.
Vier Fehler, vier Fälle, die eine Verschlüsselung beherrschen muss: über z hinaus, Großbuchstaben, rückwärts, alles andere stehen lassen.