今回は CLML のテストを眺めてみます。
全体
システムは 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-test
と matrix-transpose-test
は個別のテストです。
lisp-unit の define-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
にテストのユーティリティが定義されています。
おわり
テスト割と動きますが結構コードが汚ないし、重複多めで読みづらいです。
また実行時に警告も表示されるものがあります。
整理が必要ですね。
でも結構動きます。