Kata de TDD avec Guile et Emacs (String Rotations – 5)

Objectif de cette session : Continuer d'utiliser un peu plus d'outils que Guile (Scheme) et Emacs mettent à disposition (Paredit, Geiser, AC-Geiser, SRFIs) pour accélérer le développement de programmes.

Bon screencast !

Je place le code à la suite pour ceux que ça intéresse :

;;; A string like abc has three rotations: abc, bca, and cab.

;; -*- geiser-scheme-implementation: guile -*-

(define-module (harness-guile)
  #:use-module (srfi srfi-64))

(module-define! (resolve-module '(srfi srfi-64))
		'test-log-to-file #t)

(define EMPTY_STRING "")
(define DUMMY_1CHAR_STRING "a")
(define DUMMY_2CHAR_STRING "ab")

(define (rotations str)
  (if (> (string-length str) 1)
      `(,str ,(string-reverse str))
      `(,str)))

(test-begin "test-suite")

(define (test-equal-batch triples)
  (map (lambda (triple)
	 (let ([test-name (car triple)]
	       [expected (cdr triple)]
	       [effective (car (cddr triple))])
	   (test-equal test-name
		   `(,@(car expected))
		   (rotations effective))))
       triples))

(test-equal-batch
 `(["empty-string" (,EMPTY_STRING) ,EMPTY_STRING]
   ["one-char-string" (,DUMMY_1CHAR_STRING) ,DUMMY_1CHAR_STRING]
   ["two-char-string" ("ab" "ba") ,DUMMY_2CHAR_STRING]
   ["two-char-string-bis" ("bc" "cb") "bc"]
   ["three-char-string" ("abc" "bca" "cab") "abc"]))

(test-end "test-suite")

Merci beaucoup d'avoir regardé ce screencast !

N'hésites pas à me donner ton avis, proposer une idée d'amélioration, laisser un commentaire, ou poser une question via :E-mail: jeremy AT korwin-zmijowski DOT frMastodon: @jeko@framapiaf.orgPeertube: @jeko@video.tedomum.netTwitter: @JeremyKorwin

Abonnes-toi pour ne pas manquer les prochains articles et épisodes:blog via Mastodon @jeko@write.as et RSSscreencast via Peertube @jeko@video.tedomum.net et RSS

Et encore plus important, partages le screencast et dis à tes amis que c'est le meilleur screencast de l'histoire du logiciel libre ! Sans dec'

#kata #tdd #testdrivendevelopment #guile #scheme #emacs #screencast