From 3b30cce99849246868421294a6b9637b987e43b2 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Sat, 11 Jul 2015 21:53:32 -0700 Subject: [PATCH 1/3] Add test-lens module --- lens/test-util/test-lens.rkt | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lens/test-util/test-lens.rkt diff --git a/lens/test-util/test-lens.rkt b/lens/test-util/test-lens.rkt new file mode 100644 index 0000000..02ba2f1 --- /dev/null +++ b/lens/test-util/test-lens.rkt @@ -0,0 +1,45 @@ +#lang racket + +(require rackunit + fancy-app + "../main.rkt") + +(provide + (contract-out + [check-view (-> lens? any/c any/c void?)] + [check-set (-> lens? any/c any/c any/c void?)] + [check-view-set (-> lens? any/c void?)] + [check-set-view (-> lens? any/c any/c void?)] + [check-set-set (-> lens? any/c any/c any/c void?)] + [test-lens-laws (-> lens? any/c any/c any/c void?)])) + + +(define-check (check-view lens target expected-view) + (check-equal? (lens-view lens target) expected-view)) + +(define-check (check-set lens target new-view expected-new-target) + (check-equal? (lens-set lens target new-view) expected-new-target)) + + +(define-check (check-view-set lens target) + (check-equal? (lens-set lens target (lens-view lens target)) + target + "setting target's view to its own view not equal? to itself")) + +(define-check (check-set-view lens target new-view) + (check-equal? (lens-view lens (lens-set lens target new-view)) + new-view + "view of target after setting it's view not equal? to the set view")) + +(define-check (check-set-set lens target new-view1 new-view2) + (let* ([target* (lens-set lens target new-view1)] + [target** (lens-set lens target* new-view2)]) + (check-equal? (lens-view lens target**) + new-view2 + "view of target after setting it's view twice not equal? to second view"))) + +(define (test-lens-laws lens test-target test-view1 test-view2) + (check-view-set lens test-target) + (check-set-view lens test-target test-view1) + (check-set-view lens test-target test-view2) + (check-set-set lens test-target test-view1 test-view2)) From ece0554d23c6e742db704f822645f765882aa8da Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Sat, 11 Jul 2015 22:02:34 -0700 Subject: [PATCH 2/3] Remove cyclic dependencies for lens testing --- lens/test-util/test-lens.rkt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lens/test-util/test-lens.rkt b/lens/test-util/test-lens.rkt index 02ba2f1..def9054 100644 --- a/lens/test-util/test-lens.rkt +++ b/lens/test-util/test-lens.rkt @@ -2,7 +2,8 @@ (require rackunit fancy-app - "../main.rkt") + "../base/base.rkt" + "../base/view-set.rkt") (provide (contract-out From 5b5955f732890eacd1955f94b08dd3ac07c0ba18 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Sat, 11 Jul 2015 22:02:49 -0700 Subject: [PATCH 3/3] Add example use of lens law testing --- lens/list/car-cdr.rkt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lens/list/car-cdr.rkt b/lens/list/car-cdr.rkt index 4016316..3a17bca 100644 --- a/lens/list/car-cdr.rkt +++ b/lens/list/car-cdr.rkt @@ -7,7 +7,8 @@ (require "../base/main.rkt") (module+ test - (require rackunit)) + (require rackunit + "../test-util/test-lens.rkt")) (define (set-car pair v) @@ -20,5 +21,10 @@ (define cdr-lens (make-lens cdr set-cdr)) (module+ test - (check-equal? (lens-view car-lens '(1 . 2)) 1) - (check-equal? (lens-view cdr-lens '(1 . 2)) 2)) + (check-view car-lens '(1 . 2) 1) + (check-set car-lens '(1 . 2) 'a '(a . 2)) + (test-lens-laws car-lens '(1 . 2) 'a 'b) + + (check-view cdr-lens '(1 . 2) 2) + (check-set cdr-lens '(1 . 2) 'a '(1 . a)) + (test-lens-laws cdr-lens '(1 . 2) 'a 'b))