-
Notifications
You must be signed in to change notification settings - Fork 165
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
コンパイルテストを導入する #1297
コンパイルテストを導入する #1297
Conversation
❌ Build sakura 1.0.2803 failed (commit bf63cdc893 by @berryzplus) |
✅ Build sakura 1.0.2804 completed (commit 00f221cd07 by @berryzplus) |
✅ Build sakura 1.0.2805 completed (commit 4070be78ea by @berryzplus) |
どれぐらいですか? |
MinGW のビルドに失敗していますが、修正中ですか? |
CMakeがCXXのconfigureを終えるのに必要な時間と同じくらい、環境によります。
MinGW側は何も触っていません。
コメントの中の日本語の読点「、」が「不正な文字」と言われとります。 |
何度か再実行したけどダメでした。 |
✅ Build sakura 1.0.2807 completed (commit c3d0304fe1 by @berryzplus) |
master で失敗しているので #1298 に登録しました。 |
e9dacf3
to
6294d1b
Compare
6294d1b
to
113a704
Compare
❌ Build sakura 1.0.2813 failed (commit bcae454f65 by @berryzplus) |
This reverts commit 113a704.
✅ Build sakura 1.0.2814 completed (commit 57679b22bf by @berryzplus) |
MinGWビルドの問題解消後にrebaseしたので再レビューをお願いします。 Build sakura 1.0.2813 failed (commit bcae454 by @berryzplus) |
@@ -0,0 +1,12 @@ | |||
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
質問。
この targets ファイルってどうやって作りましたか? 手書き?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
質問。
この targets ファイルってどうやって作りましたか? 手書き?
それは企業秘密なんですが・・・(なんでやねん!w
大枠は googletest.targets
のコピーで、手書きです。
googletest.targets
自体は NuGet版GoogleTest
をベースに作っています。
*.targets
自体は *.vcxproj
や *.csproj
と同じ MsBuild
に食わせるプロジェクト構成のXMLです。
質問で訊きたいことが把握できていませんが、それ専用のツールは知らないです。
compile_test( clayoutint_test.cpp.in "a >= b;" "CLayoutInt と CLogicIntを比較することはできない" clayoutint_can_not_be_compare_with_clogicint_greater_or_equal ) | ||
compile_test( clayoutint_test.cpp.in "a == b;" "CLayoutInt と CLogicIntを比較することはできない" clayoutint_can_not_be_compare_with_clogicint_equal ) | ||
compile_test( clayoutint_test.cpp.in "a != b;" "CLayoutInt と CLogicIntを比較することはできない" clayoutint_can_not_be_compare_with_clogicint_not_equal ) | ||
compile_test( clayoutint_test.cpp.in "int c = a;" "CLayoutInt は キャストなしでint型に代入することはできない" clayoutint_can_not_be_assigned_to_int ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
メモ
-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint
-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint
-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_added_by_clogicint
-- Checking clayoutint_can_not_be_added_by_clogicint - done
-- Checking clayoutint_can_not_be_subtracted_by_clogicint
-- Checking clayoutint_can_not_be_subtracted_by_clogicint - done
-- Checking clayoutint_can_not_be_assigned_from_clogicint
-- Checking clayoutint_can_not_be_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal - done
-- Checking clayoutint_can_not_be_assigned_to_int
-- Checking clayoutint_can_not_be_assigned_to_int - done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
メモ
-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint
-- Checking clayoutint_can_not_be_additive_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint
-- Checking clayoutint_can_not_be_subtractive_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_added_by_clogicint
-- Checking clayoutint_can_not_be_added_by_clogicint - done
-- Checking clayoutint_can_not_be_subtracted_by_clogicint
-- Checking clayoutint_can_not_be_subtracted_by_clogicint - done
-- Checking clayoutint_can_not_be_assigned_from_clogicint
-- Checking clayoutint_can_not_be_assigned_from_clogicint - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_than - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_less_or_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_than - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_greater_or_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_equal - done
-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal
-- Checking clayoutint_can_not_be_compare_with_clogicint_not_equal - done
-- Checking clayoutint_can_not_be_assigned_to_int
CMake Error at CMakeLists.txt:29 (message):
Checking clayoutint_can_not_be_assigned_to_int - Failed.
Call Stack (most recent call first):
CMakeLists.txt:45 (compile_test)
レビューありがとうございます。 |
…piletest_of_clayoutint コンパイルテストを導入する
PR の目的
コンパイルテストを導入します。
コンパイルテストは、特定のコード記述がエラーになることを確認する目的のテストです。詳細は経緯に続く・・・。
カテゴリ
PR の背景
#1290 で言及した残課題に対処します。
サクラエディタには
CLayoutInt
とCLogicInt
という特殊なint型
が存在しています。これらの型は相互に変換、代入をした場合にコンパイルエラーになるように作られています。
この仕様(=ビルドエラーになる)を確認するテストは、通常の単体テストでは書けません。
現状、x64対応でこれらの型を改造する必要がありそうだと分かっています。
何か修正を加えた時に既存の仕組みを壊していないことの確認ができるようにするために、コンパイルテストを導入したいです。
最初のコミットでは、分かりやすさのために最も基本的なパターンのみをテストするようにしています。
本来はここに書いてある他10パターンと
CLayoutInt
の特性int型への暗黙変換を許可しない
を全てテストする必要があります。sakura/sakura_core/basis/CStrictInteger.h
Lines 137 to 150 in 819ada7
(このPRに含めてしまうことにしました。)
PR のメリット
こう書いたらエラーになる
のテストを書けるようになります。PR のデメリット (トレードオフとかあれば)
仕様・動作説明
テスト内容
このPRの目的は「ビルドエラーになるはずのコード」のビルドが通ってしまうことの検出です。
意図的にビルドが通るように修正するコミットを積んで検出が行われることを確認します。
確認ができたら、追加コミットをrevertして話を進める予定です。以下の画像が確認結果です。
PR の影響範囲
関連 issue, PR
#1290 CLayoutIntのテストを追加
#1268 CStrictIntegerと整数を比較するグローバル演算子の実装を修正する
参考資料
https://cmake.org/cmake/help/v3.12/command/try_compile.html
https://cmake.org/cmake/help/v3.12/command/configure_file.html
https://docs.microsoft.com/en-us/visualstudio/msbuild/target-element-msbuild
https://cmake.org/cmake/help/v3.12/command/configure_file.html
https://cmake.org/cmake/help/v3.12/command/function.html