0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SILVER HAIRED LISP (自作Lisp)の単体テスト

0
Posted at

はじめに

SILVER HAIRED LISP は、common lispの入門書に書いているぐらいのコードなら、そのまま動く事を目標にしているLispです。

common lispにとって、clojureより覚えやすい「Javaで実装されたlisp」になる事とも言えます。

私は、common lispのサブセットがないか探していたのですが、見つかりませんでした。

私が一番気に入ったのは、uLispというマイコン用のlisp実装です。
この中に、lispで書かれた単体テストコードがありました。
しかも MITライセンス。ありがたや感謝しかない。

単体テスト

JUnit的な単体テストを行うため、独自の構文があります。

上記にある mitディレクトの 内容をカレントディレクトリにおいてください。

Windowsの場合: winshl.cmdを実行して SHLISPを起動します

cl-user >> (test-file "mit/ulisp32.txt")

{:test-success 292 :test-fail ("test-336") :test-debugger nil}
java.util.Collections.UnmodifiableMap

テスト結果は、 テスト成功が 292件、 失敗したテストが、"test-336" 。
もしデバッガーが起動するような状態になった時は、:test-debugger の後ろに何かが表示されます。

mitディレクトリについて

マイコン用にcommon lispのサブセットを開発している uLispというサイトがあります。
その中に、テストコードがありましたので、それを参考にさせてもらっています。

以下の2ファイルが、uLispのサイトから取得したファイルです。

  • LICENSE.txt
  • ulisp_20260528.txt

ただし、ulisp_20260528.txtのファイルをそのまま実行すると、どのテストが失敗したのか
わかりにくかったため、独自のテスト構文を作ってテストする事にしました。

書き直したファイルは以下になります。

  • ulisp32.txt

オリジナルファイルの一番最後にある #| bit arrays |# については、本Lispではまだ実装が出来ていないため省略しています。

(assert-true  "テスト名"  S式)

S式の実行結果が偽以外ならテスト成功です。
なお本Lispでの偽は、 Lispのシンボルのnilまたは、Javaのnullが偽になります。

(assert-false  "テスト名"  S式)

S式の実行結果が偽ならテスト成功です。

test-fileの実行中に、デバッガーが起動してテストが停止するのが嫌だった為、
test-fileの実行中は、デバッガーを起動しない事にしました。

インフォメーション
ulisp32.txtの中を見れば、どれくらいの関数が実装されているか、わかります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?