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とかの英語が気になってくるんですよね…。