Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

テストケース作り #35

Open
aminophen opened this issue Feb 14, 2017 · 12 comments
Open

テストケース作り #35

aminophen opened this issue Feb 14, 2017 · 12 comments

Comments

@aminophen
Copy link
Member

forum:2139 で流したところ、さっそく私個人宛に 2 つ送られてきました。後ほどアップしますが、GitHub の皆様も何か使えそうな .tex ファイルがありましたら送ってください。或いは、テストケースに使えそうな(=改変と再配布が許諾された)適当な tex ファイルをご存知ならば、お知らせください。

@kuroky49
Copy link
Member

ライセンスは調べないといけないかもしれませんが,ptexlive の配布の中に,テストケース(文字が出るかといった単純なものも含む)があります.

LaTeX出力のテストケースで課題があるとすると,何が出力として正しいか(expected)をどう持てば普遍的か,どうやって actual と expected が等しいと自動で判断するか,というところが難しいのが悩みです.

@aminophen
Copy link
Member Author

aminophen commented Feb 14, 2017

ptexlive の配布の中に,テストケース(文字が出るかといった単純なものも含む)があります.

情報ありがとうございます。試しに ptexlive-20110322 を採ってきてみると macro/sample.tex というのがありました。これはアスキーの pLaTeX 2.09 付属のサンプル (\documentstyle) を pLaTeX2e 向け (\documentclass) にいじったものでした。pLaTeX 2.09 の配布条件は

----------------------------------------------------------------------------
● 使用や再配布の注意
----------------------------------------------------------------------------
このパッケージに含まれているファイル(以下、本プログラムと呼ぶ)は、
次の事項を確認のうえ、ご利用ください。

   1. 本プログラムの、日本語化部分に関しては株式会社アスキーおよび株式
      会社インプレスに著作権があります。

   2. その使用が直接的な営利目的(例えば、利用者からプログラムの使用料
      金をとる等)でない限り、どのような方法、目的で使用されてもかまい
      ません。ただし、それにより生じた問題に関しては一切、株式会社アス
      キーおよび株式会社インプレスでは責任を持ちません。

   3. 他者へのコピーは、その行為が営利目的でなく、かつ、本プログラムの
      内容を変更しない場合に限り(漢字コードや改行コードの変換は除きま
      す)、自由に行なって結構です。

   4. 本プログラムの使用または、使用不能から生ずるいかなる損害に関して
      も、株式会社アスキーおよび株式会社インプレスは、一切責任を負わな
      いものとします。

なので(アスキー公式アーカイブの platex209 付属の README.txt より)、改変しなければ再配布可能です。ptexlive は変更してしまっているため、厳密な意味ではライセンスを守っていなかったことになります…が、しょうがない気もします。ptexlive の sample.tex を頂いてよければ、これはぜひ使いたいです。

LaTeX出力のテストケースで課題があるとすると,何が出力として正しいか(expected)をどう持てば普遍的か,どうやって actual と expected が等しいと自動で判断するか,というところが難しいのが悩みです.

互換性を重視して「不変かどうか」を基準にすると話は簡単で、pdvitype を使って DVI の同一性をチェックすることを考えていました。これは TRIP test も同じ方法に基づいているため自然だと思います。pdvitype の出力を比較して diff すればよいはずです。もちろん #32 のように組版結果を変える変更を含むときだけ、pdvitype ではなく“見た目”に頼る必要がありますが。

また、pdvitype だと DVI 出力しか比較できないため、LaTeX2e が採用している「ログレベルでの比較」(regression test) も必要だと思います。LaTeX2e svn に本家のテストケースが多数あるので、これを移植することを考えています。

@kuroky49
Copy link
Member

そういえば,ptexlive のテストケースは,「TeX環境」を提供する側として,正しくコンパイルできたかのほうに主眼が置かれていたかもしれませんね.Makefile を読むと,何をテストケースにしていたかわかりますが,jsclasses.dtx や utf/otf パッケージ関係の適当なファイルもタイプセットしていました.

@wtsnjp
Copy link

wtsnjp commented Dec 23, 2020

これ2017年と今では少し状況が変わってきているかもしれませんね.一回 CI 追加の提案 (#34) があったのを当時は見送ったようですが,今また GitHub Actions などで設定する方向を議論するための issue を新たに建てるのはどうでしょうか.

関連して,この issue で募集したいテストケースは原則としては tests に置きたいような(相対的に小さな?)文書だと理解していますが,もう少し長さのある「実用的な文書」の組版結果もモニタリングする価値がある気がします.もちろんタイプセット成否だけなのか,ログレベルなのか,DVI レベルなのかは議論の余地があると思いますが.

そういった用途では最近 texjporg が整備しているドキュメント類(例えば ptex-manual)がそのまま使えそうですね.また私が翻訳した日本語版『TeX Live ガイド』もそれなりに分量がある上,図の読み込みなどもしているのでいいテストケースかもしれません(というか私は新しい pLaTeX が出ると手許ではこの文書を使って簡単にテストしています).

これらの外部ドキュメントは tests 以下に置く意義は薄くて,CI で使うテストスクリプトで git clone でもして引っ張ってくる方が理に適っていそうです.

@aminophen
Copy link
Member Author

これ2017年と今では少し状況が変わってきているかもしれませんね.

確かに,そうだと思います。議論は新しい issue を立てなくとも,ここで継続して良いのではないでしょうか(標題と目的は一致していますので)。ちなみに,GitHub の管理者権限がないと Actions も CI も設定できないので,その作業は私以外の誰かが作業する必要があります…(私はメンバー権限なので不可)。

肝心のテストケースについては,「platex/tests の小さいファイル」+「外部のドキュメントソースを git submodule で取ってくる」のほか,以下も作っていましたので,備忘録として:

テスト対象として「タイプセット成否」(エラーが出ないかどうか)は,必要ではありますが十分ではないので,ログもしくは DVI の比較も必要だと思います。ただ,遅々として進まない原因が下記にあります:

  • ログレベルのテストは,実はかなり込み入った知識が必要です。すなわち「何をどの程度詳細にログに出せばいいか」がわからないと,実は何もテストできていないということが有りえます。
  • (u)(p)DVItype の比較ができれば印刷結果の同一性が保証できるのですが,本家 latex3 では使われていないように見えて(PDF 出力が主流だから?),設定方法がよくわかっていません。また,DVI の座標が1spでもずれたら以降全部がずれますので,原因を特定するのがかなり大変だと感じます。

@tamuratak
Copy link

tamuratak commented Mar 21, 2021

LaTeX ファイルを platex-dev でコンパイルして、dvipdfmx で PDF に変換したものを、さらに ImageMagick で PNG ファイルに変換したものと、想定されている PDF ファイルを PNG ファイルに変換したものを比較してテストするサンプルを作ってみました。Web開発で使用されている、reg-cli というブラウザのスクリーンショット同士を比較するソフトを使っています。画像同士が異なる場合、異なっている場所をわかりやすく表示してくれます。

以下を git clone する。

以下を docker pull する。

./reg_cli_sample に移動して以下を実行する。

docker run -i --rm  -v "$PWD":/home/app -w /home/app tamuratak/reg_cli_sample bash script/build_images.sh

そうすると ./tmp 以下に PDF ファイルと PNG ファイルとレポート結果が生成されます。

スクリーンショット 2021-03-21 15 57 36

お役に立てば幸いです。

@aminophen
Copy link
Member Author

@tamuratak ありがとうございます。PNGを重ねた比較という方法は非常に役に立つと思います。ひとつ伺いたいのですが,docker で走る platex-dev のソースコードを更新することは可能でしょうか? 私が docker の作り方を知らないので…。

理由は以下のとおり:「GitHub に置いてある開発版」と「普通に配布されている TeX Live に収録されている -dev 版」では,そのソースコードに時間差が生じます。単にコマンド名を platex-dev に変えるだけではなく,本 GitHub にあるソースコードを pull してから fmtutil-sys を走らせてフォーマット更新したうえでテストが走る仕組みだと,最新開発版のテストに使えるようになります。(もし難しいようでしたら,教えていただいた方法を元に reg-cli をローカルに入れておいて走らせるという活用が考えられます)

@tamuratak
Copy link

docker で走る platex-dev のソースコードを更新することは可能でしょうか?

開発に必要なパッケージ(make や gcc)を更に追加で Docker のイメージにインストールした上で、Docker コンテナ内で platex のソースコードをビルドして、Docker コンテナ内の TeX Live に対してインストール( make install)するのが良いと思います。

開発版の platex をビルドして、すでにインストールされている TeX Live のファイルに上書きする方法(make installだけで十分?)を分かっていないのですが、教えていただければ私の手元で試してみます。

@aminophen
Copy link
Member Author

aminophen commented Mar 25, 2021

開発版の platex をビルドして、すでにインストールされている TeX Live のファイルに上書きする方法

make install したあとで fmtutil-sys --byfmt platex-dev していただければと思います。ただ,更新されたかどうかの確認は難しいかもしれません。(開発版だからといって,起動時のフォーマットの日付 pLaTeX2e <2020/10/01> based on LaTeX2e <........> の表示が更新されるわけではないので。)

@aminophen
Copy link
Member Author

現在の TeX Live 2020 最新版(本日朝に frozen すなわち凍結されました)において一般配布されている「LaTeX2e の開発版 + pLaTeX2e」であれば,以下の表示になるはずです。

pLaTeX2e <2020-10-01>+2 based on LaTeX2e <2021-05-01> pre-release-2

となるはずです。この状態でこちらの投稿にあるソースコードを platex-dev で処理するとエラーが出るはずです。一方,本 GitHub で配布している pLaTeX2e の開発版 master をインストールしてフォーマット作成 (fmtutil-sys --byfmt platex-dev) すればエラーが消えると思います。現在の確認方法としてはそれが良いと思います。

@tamuratak
Copy link

tamuratak commented Mar 25, 2021

以下のような Dockerfile で上記の LaTeX ファイルをコンパイルすることができました。

$  cat t.tex 
\documentclass{tarticle}
\begin{document}
\RawShipout\hbox{\yoko ABC}
\end{document}%
                              
$ docker run -i --rm  -v "$PWD":/home/app -w /home/app tamuratak/platex_dev platex-dev -halt-on-error t.tex
This is e-pTeX, Version 3.14159265-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2020) (preloaded format=platex-dev)
 restricted \write18 enabled.
entering extended mode
(./t.tex
pLaTeX2e <2020-10-01>+2 (based on LaTeX2e <2021-05-01> pre-release-2 (develop 2
021-3-25 branch))
L3 programming layer <2021-02-18> (/root/texmf/tex/platex/base/tarticle.cls
Document Class: tarticle 2020/09/30 v1.8f Standard pLaTeX class
(/root/texmf/tex/platex/base/tsize10.clo)
(/root/texmf/tex/platex/base/plext.sty))
(/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
(./t.aux) 《縦組モード》 [1] (./t.aux) )
Output written on t.dvi (1 page, 208 bytes).
Transcript written on t.log.

上の例では GitHub から pull していますが、現在作業中のローカルのファイルから同様の Docker のイメージを作るには、

docker build -t tamuratak/platex_dev -f docker/Dockerfile .

を実行します。

@aminophen
Copy link
Member Author

おぉ,これはよいです。最近少々忙しくて開発環境にいないのですが,後日時間ができたときに触ってみます。大変ありがとうございます。

あとは,コーナーケースを突いたテスト用 LaTeX ファイルを色々と準備することも力を入れないといけないですね。確認が目視より自動化されるだけでありがたいですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants