skip to main content

Scheme tips and tricks

Unit testing in Scheme

published icon  |  category icon programming

tags icon scheme Unit Testing

Variable arguments

Bron: http://www.cs.utexas.edu/ftp/garbage/cs345/schintro-v14/schintro_68.html

(define (stack . args)
  (display args))

(define (plus a b)
  (stack a b)
  (+ a b))
  
(plus 1 2)

Print in een lijst (1 2) af. In scheme is het mogelijk om args op te splitsen, alles dat na de “.” komt, wordt samengenomen als een lijst in een speciale variabele die de rest van de argumenten binnen pakt. Je kan dus ook x aantal argumenten “vast” zetten en de rest laten opvangen door een lijst. display print alles in lijst vorm af.

Conditional Expressions and Predicates

Debugging purposes
  • (display arg) print argument in de *scheme* buffer af. (pakt een lijst binnen: bvb (display '("bezig met afdrukken van " arg1 arg2))
  • (newline) maakt een nieuwe lijn in diezelfde buffer.
de ‘undefined’ variabele

Een conditional operator die door alle gevallen heen valt (zoals een switch zonder default), retourneert de variabele unspecific. Dit is een reserved keyword:

(load "./test-manager/load.scm")

(in-test-group conditionals
 (define x 0)
 (define-test (case-fall-through-returns-undefined)
   (assert-equals unspecific
		  (cond ((< x 0) 1)
			((> x 0) 1)))
   ))

(run-registered-tests)

Het is niet mogelijk om die variabele te overschrijven met (define unspecific 8934), volgende fout wordt dan gegenereerd: “Premature reference to reserved name: unspecific.”

Implementaties

Testen schrijven

Testing framework: Zie http://web.mit.edu/~axch/www/testing-1.2.html

Inladen test-manager & testen definen en kunnen wrappen in elkaar à-la Jasmine in JS:

(load "./test-manager/load.scm")

(in-test-group my-first-tests

  (in-test-group getallekes
    
	 (define-test (add-simple-numbers)
	   (assert-equals (my-add 1 2) 3)))
	   
	(in-test-group meer-getallekes
	 (define-test (add-more-complex-numbers)
	   (assert-equals (my-add 3 7) 10))))

(run-registered-tests)

Achteraf altijd run-registered-tests evalueren, in de default scheme editor wordt dan de test output getoond. (Default editor = scheme*, gewoon enter drukken bij open doen nieuwe editor)

A photo of Me!

I'm Wouter Groeneveld, a level 35 Brain Baker, and I love the smell of freshly baked thoughts (and bread) in the morning. I sometimes convince others to bake their brain (and bread) too.

If you found this article amusing and/or helpful, you can buy me a coffee - although I'm more of a tea fan myself. I also like to hear your feedback via Mastodon or e-mail. Thanks!