SICP 함께 공부하기에서 구글 코드에 문제 풀이를 공유할 수 있는 공간을 만들었다. 저장소에 올리기 위해서 전에 풀었던 연습문제 1.3을 TDD를 적용해서 다시 풀어봤다.
Unit Test를 만들기 위해서 컴키드님이 만든 PLT Scheme용 Unit Test Framework을 가지고 왔다. example.scm을 실행해보면 실행환경에 따라서 에러가 나는 경우도 있는데, DrScheme을 사용하는 경우 Language 메뉴에서 Pretty Big을 선택하는 걸로 에러를 피할 수 있었다.
내가 만든 코드는 여기에서도 볼 수 있다.
(load "../misc/sunit.scm")
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (ex1_03 x y z)
(cond ((and (<= x y) (<= x z)) (sum-of-squares y z))
((and (<= y x) (<= y z)) (sum-of-squares x z))
((and (<= z x) (<= z y)) (sum-of-squares x y))))
(define ex1_03-test
(make-testcase
'(assert-true? (= 441 (square 21)))
'(assert-true? (= 49 (square (+ 2 5))))
'(assert-true? (= 81 (square (square 3))))
'(assert-true? (= 25 (sum-of-squares 3 4)))
'(assert-true? (= 25 (ex1_03 2 3 4)))
'(assert-true? (= 25 (ex1_03 3 2 4)))
'(assert-true? (= 25 (ex1_03 3 4 2)))
'(assert-true? (= 20 (ex1_03 4 2 2)))
))
(run ex1_03-test)
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (ex1_03 x y z)
(cond ((and (<= x y) (<= x z)) (sum-of-squares y z))
((and (<= y x) (<= y z)) (sum-of-squares x z))
((and (<= z x) (<= z y)) (sum-of-squares x y))))
(define ex1_03-test
(make-testcase
'(assert-true? (= 441 (square 21)))
'(assert-true? (= 49 (square (+ 2 5))))
'(assert-true? (= 81 (square (square 3))))
'(assert-true? (= 25 (sum-of-squares 3 4)))
'(assert-true? (= 25 (ex1_03 2 3 4)))
'(assert-true? (= 25 (ex1_03 3 2 4)))
'(assert-true? (= 25 (ex1_03 3 4 2)))
'(assert-true? (= 20 (ex1_03 4 2 2)))
))
(run ex1_03-test)
각 문제별로 적당한 Unit Test를 만들어서 공유할 수 있는 방법도 생각해보기.


덧글