2008-02-13
■ [ruby][rspec] 「ANSI Common Lisp」9章のレイトレーサを移植した
わーい動いたよー。
感想
- ソースコードを理解するのに、移植はかなり有効。(全ての行の動作を把握しないと移植できないから)
- CLのletは、初期値がnilでよければ値を省略できるらしい。 (let (a b c) body..) とか
一応ソース。
あと、最初はRspecでテスト書いてたんだけど、途中からやめてしまった。 こっちもせっかくなので貼っておく。
require 'raytra.rb' describe "Fixnum#sq" do it "は、二乗を計算する" do 2.sq.should == 4 -10.sq.should == 100 end end context "Vector" do describe "#mag" do it "は、ベクタの長さを返す" do Vector[1,1,1].mag.should == Math.sqrt(3) end end describe "#unit_vector" do it "は、単位ベクタを返す" do Vector[23,12,47].unit_vector.mag.should == 1 end end end context "Raytra" do describe ".distance" do it "は、二点間の距離を返す" do dist = Raytra.distance(Vector[3,3,3], Vector[2,2,2]) dist.should == Vector[1,1,1].mag end end describe ".minroot" do it "は、二次方程式の小さいほうの実数解を返す" do # xx + 2x + 1 = 0 Raytra.minroot(1, 2, 1).should == -1 end end end
日本語でRSpecを使うときは、「クラス名」「メソッド名」「は、〜する」という書き方が良いみたい。
itを"それ"にしてしまうと、さらに日本語っぽくよめますね。<br>ttp://d.hatena.ne.jp/darashi/20071009/1191898874
そうそう、書いてるとだんだんとitとかdescribeとかの英語が気になってくるんですよね…。