読者です 読者をやめる 読者になる 読者になる

ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

CLML のテストを俯瞰してみる。

Common Lisp CLML

今回は CLML のテストを眺めてみます。

github.com

全体

システムは test/clmcl-test.asd で定義されている。

./test/src/ にテストが配置されています。

テストのファイルは全てこのディレクトリに配置されています。

これより下の文章でファイル名のみの場合はこのディレクトリに配置されているものとします。

パッケージは二つ。

  • clml.test-environment
  • clml.test

clml.test-environment は システムを定義する用っぽいので、実質 clml.test 一つです。

package.lisp で定義されています。

テストの方法

テストは lisp-unit を利用しています。

README.md にあるように以下の三行でテストできます。
run-all-tests を実行すると現在定義されている全てのテストが実行れます。

(ql:quickload :clml.test :verbose t)
(in-package :clml.test)
(run-all-tests)

個別にテスト

個別にテストを実行したい場合は以下のようにします。

(run-tests '(matrix-vecs-conversion-test  matrix-transpose-test)

matrix-vecs-conversion-testmatrix-transpose-test は個別のテストです。 lisp-unitdefine-test で定義しています。

各トピック事にまとまった単位でテスト

clml ではテストをトピックごとにまとめたものがあります。
これをここではテスト・グループとします。

このテスト・グループ毎にテストを実行することもできます。

実行方法は以下のとおりです。

(run-tests *clustering-tests*)

テスト・グループ

テスト・グループは十三種類定義されています。

テスト・グループ は test-groups.lisp で定義されています。

group comment description
*statistics-tests* -
*decision-tree-tests* -
*clustering-tests* -
*time-series-tests* -
*svm-tests* -
*classifiers-tests* -
*association-rule-tests* o error result key is cons not string
*som-tests* -
*text-tests* -
*pca-tests* o takes too long
*hjs-tests* -
*nonparametric-tests* -
*nearest-search* -

上記の全てのテスト・グループが *all-tests* というテスト・グループにまとめて登録されています。
run-all-tests では (run-tests *all-tests*) とやっています。
そのため全てのテストが実行されます。

ただし現状(2016/09/19)テストが通らないものはコメント・アウトされています。
上記表の comment 列が o のものがそれです。

テスト

テストは全部で五十五個。

テストはコメント化されていて実行されないものがあります。
以下表の c 列参照。

  • cg となっているテストはテスト・グループでコメント・アウトされているもの。
  • cc となっているテストはテスト・コード(define-testしているところ)がコメント・アウトされているもの。
group test file c description
*association-rule-tests* test-sample-assoc test-assoc.lisp -
*classifiers-tests* multi-linear-regression-case test-linear-regression.lisp -
simple-linear-regression-case test-linear-regression.lisp -
test-nbayes test-nbayes.lisp -
test-sample-linear-regression test-linear-regression.lisp -
*clustering-tests* test-hc test-hc.lisp - ccl の場合は実行しない。
test-nmf test-nmf.lisp -
test-random-w test-spectral-clustering.lisp -
test-sample-cluster-validation test-cluster-validation.lisp -
test-sample-k-means test-k-means.lisp -
test-sample-optics test-optics.lisp -
test-sample-spectral-clustering test-spectral-clustering.lisp -
test-sample-w test-spectral-clustering.lisp -
*decision-tree-tests* test-decision-tree test-decision-tree.lisp -
test-random-forest test-random-forest.lisp -
*hjs-tests* matrix-m*m-test test-matrix.lisp -
matrix-transpose-test test-matrix.lisp -
matrix-vecs-conversion-test test-matrix.lisp -
test-fill-rem test-missing-value.lisp -
test-ps test-missing-value.lisp cg error
test-sample-read-data test-read-data.lisp -
test-spline test-missing-value.lisp cg error
*nearest-search* test-sample-k-nn test-k-nn.lisp -
*nonparametric-tests* test-sample-dpm test-dpm.lisp cg
test-sample-hdp-lda test-hdp-lda.lisp cg
*pca-tests* test-sample-pca test-pca.lisp cga
*som-tests* test-sample-som test-som.lisp -
*statistics-tests* test-sample-stat test-stat.lisp -
*svm-tests* smo.svm test-smo-svm.lisp -
svm.smo.kernels test-smo-svm.lisp -
test-one-class-svm test-one-class-svm.lisp -
test-pwss3-kernels test-pwss3-svm.lisp -
test-pwss3-svm test-pwss3-svm.lisp cg
test-sample-svm test-svm.lisp -
test-svr test-svr.lisp -
test-wss3-kernels test-wss3-svm.lisp -
test-wss3-svm test-wss3-svm.lisp -
*text-tests* test-sample-text-utils test-text-utils.lisp -
*time-series-tests* test-changefinder test-changefinder.lisp -
test-sample-expl-smthing test-expl-smthing.lisp -
test-sample-ts-ar test-ts-ar.lisp -
test-sample-ts-read-data test-ts-read-data.lisp -
test-sample-ts-stat test-ts-stat.lisp -
test-sample-ts-stsp test-ts-stsp.lisp -
test-ts-anomaly-detection-data test-ts-anomaly-detection.lisp -
test-ts-anomaly-detection-db-detector test-ts-anomaly-detection.lisp cg
test-ts-anomaly-detection-eec-detector test-ts-anomaly-detection.lisp cg
test-ts-anomaly-detection-periodic-detector test-ts-anomaly-detection.lisp cg
test-ts-anomaly-detection-snn test-ts-anomaly-detection.lisp -
test-ts-burst-detection test-ts-burst-detection.lisp -
--- eigen test-spectral-clustering.lisp cc
--- test-classifier-bc test-classifier.lisp -
--- test-classifier-german test-classifier.lisp -
--- test-classifier-spam test-classifier.lisp -
--- test-interp-outlier test-missing-value.lisp -

テストの状況

全テストを実行してみた。

コメントされているところとテスト通らないやつは同じですね。

あと一番時間がかかる test-sample-pca はコメントになっていますね。

group test result c time total passed failed errors missing
*association-rule-tests* test-sample-assoc x cga 0.500 0 0 0 1 0
*classifiers-tests* multi-linear-regression-case o - 0.140 14 14 0 0 0
simple-linear-regression-case o - 0.031 8 8 0 0 0
test-nbayes o - 0.328 14 14 0 0 0
test-sample-linear-regression o - 0.031 1 1 0 0 0
*clustering-tests* test-hc o - 0.031 14 14 0 0 0
test-nmf o - 9.500 25 25 0 0 0
test-random-w o - 42.984 500 500 0 0 0
test-sample-cluster-validation o - 0.093 6 6 0 0 0
test-sample-k-means o - 1.390 1,9951 1,9951 0 0 0
test-sample-optics o - 0.031 1 1 0 0 0
test-sample-spectral-clustering o - 0.013 4 4 0 0 0
test-sample-w o - 0.026 6 6 0 0 0
*decision-tree-tests* test-decision-tree o - 0.543 8 8 0 0 0
test-random-forest o - 90.921 8 8 0 0 0
*hjs-tests* matrix-m*m-test o - 0.156 3 3 0 0 0
matrix-transpose-test o - 0.031 6 6 0 0 0
matrix-vecs-conversion-test o - 0.484 2 2 0 0 0
test-fill-rem o - 0.015 5 5 0 0 0
test-ps o cg 0.031 10 10 0 0 0
test-sample-read-data o - 0.156 479 479 0 0 0
test-spline x cg 0.031 3 3 0 1 0
*nearest-search* test-sample-k-nn o - 0.937 0 0 0 0 1
nonparametric-tests test-sample-dpm x cg 5.578 0 0 0 1 0
test-sample-hdp-lda x cg 0.171 0 0 0 1 0
pca-tests test-sample-pca o cga 262.125 605 605 0 0 0
som-tests test-sample-som o - 6.062 22 22 0 0 0
statistics-tests test-sample-stat o - 0.093 31 31 0 0 0
svm-tests smo.svm o - 0.796 8 8 0 0 0
svm.smo.kernels o - 0.031 6 6 0 0 0
test-one-class-svm o - 0.078 4 4 0 0 0
test-pwss3-kernels o - 0.046 6 6 0 0 0
test-pwss3-svm x cg 4.203 9 9 0 1 0
test-sample-svm o - 0.015 0 0 0 0 0
test-svr o - 1.718 6 6 0 0 0
test-wss3-kernels o - 0.046 6 6 0 0 0
test-wss3-svm o - 0.125 9 9 0 0 0
text-tests test-sample-text-utils o - 0.015 2 2 0 0 0
time-series-tests test-changefinder o - 0.359 102 102 0 0 0
test-sample-expl-smthing o - 0.359 7 7 0 0 0
test-sample-ts-ar o - 0.968 10 10 0 0 0
test-sample-ts-read-data o - 0.062 1 1 0 0 0
test-sample-ts-stat o - 0.015 0 0 0 0 0
test-sample-ts-stsp o - 0.953 1 1 0 0 0
test-ts-anomaly-detection-data o - 0.140 2 2 0 0 0
ntest-ts-anomaly-detection-db-detector x cg 0.031 0 0 0 1 0
test-ts-anomaly-detection-eec-detector x cg 0.109 111 0 111 1 0
test-ts-anomaly-detection-periodic-detector x cg 0.031 84 27 57 0 0
test-ts-anomaly-detection-snn o - 0.015 20 20 0 0 0
test-ts-burst-detection o - 0.015 7 7 0 0 0
--- eigen --- cc --- --- --- --- --- ---
--- test-classifier-bc o - 0.125 6 6 0 0 0
--- test-classifier-german o - 32.250 3 3 0 0 0
--- test-classifier-spam o - 71.875 6 6 0 0 0
--- test-interp-outlier o - 0.031 2 2 0 0 0

test-utils.lisp にテストのユーティリティが定義されています。

おわり

テスト割と動きますが結構コードが汚ないし、重複多めで読みづらいです。

また実行時に警告も表示されるものがあります。

整理が必要ですね。

でも結構動きます。