フォロー頂いた事項を試してみた
モチ切れ状態、と威張っていても仕方ないので rui314 さんにフォロー頂いたソレを試してみた。ぢつは eunit の動かし方が微妙で (を
フォロー頂いた事項を盛り込んでみたのが以下。(tut0.erl)
-module(tut0). -export([test/2]). -export([run_test/0]). test(_, 0) -> 1; test(X, Y) when Y rem 2 == 0 -> S = fun(N) -> N * N end, S(test(X, Y div 2)); test(X, Y) -> X * test(X, Y - 1). run_test() -> 1 = tut0:test(2, 0), 2 = tut0:test(2, 1), 256 = tut0:test(2, 8), io:format(" TEST OK~n").
# 実装微妙ですがご勘弁下さひ。
で、まず erl なソレで確認 (実はいくつか不備があって動かなかったのですが、その経緯というか試行錯誤は略
$ erl Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.2 (abort with ^G) 1> c(tut0). {ok,tut0} 2> tut0:run_test(). TEST OK ok 3> BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution a $
動いたんでご教示頂いたコマンドを試してみた。
$ erl +K true -noshell -s tut0 run_test -s init stop TEST OK $
をー、と言いつつ特にコマンドオプションで何を指定しているのか不明 (特に最後のソレが一番微妙)。ドキュメント類に目を通してチェキ入れてみます。(とほほほ
追記
コメントへのリプライは別途として、試験が失敗したソレを試すのを忘れてた。
-module(tut0). -export([test/2]). -export([run_test/0]). test(_, 0) -> 1; test(X, Y) when Y rem 2 == 0 -> S = fun(N) -> N * N end, S(test(X, Y div 2)); test(X, Y) -> X * test(X, Y - 1). run_test() -> 1 = tut0:test(2, 1), 2 = tut0:test(2, 1), 256 = tut0:test(2, 8), io:format(" TEST OK~n").
当たり前ですが試験はパスしません (2 の 1 乗は 2)。これを試験するとどうなるか。最初はコンパイルせずに試験を動かしてパスしてました。コマンドラインからのコンパイルは別途確認として、erl でコンパイルした後にコマンドラインから実行したソレが以下。
$ erl +K true -noshell -s tut0 run_test -s init stop {"init terminating in do_boot",{{badmatch,2},[{tut0,run_test,0},{init,start_it,1},{init,start_em,1}]}} Crash dump was written to: erl_crash.dump init terminating in do_boot () $
rui314 さんから頂いたナニによる -s init stop を略して、な実行をためしてみたいんですが、もう限界。別途確認してみます。どうもありがとうございました。> rui314 さん
追記
む。これってコンパイルなソレが略されてるような気が。(気のせいッスか?