"No","テストID","対象ファイル","対象クラス/関数","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-MTL-001","src/Avalonia.Metal/IMetalDevice.cs","IMetalDevice","Device","正常系","Deviceプロパティが有効なIntPtrを返すこと","IMetalDeviceの実装クラスがインスタンス化済み","なし","IntPtr.Zero以外の有効なポインタが返却される","高","Metalデバイスハンドルの取得"
"2","UT-MTL-002","src/Avalonia.Metal/IMetalDevice.cs","IMetalDevice","CommandQueue","正常系","CommandQueueプロパティが有効なIntPtrを返すこと","IMetalDeviceの実装クラスがインスタンス化済み","なし","IntPtr.Zero以外の有効なポインタが返却される","高","Metalコマンドキューハンドルの取得"
"3","UT-MTL-003","src/Avalonia.Metal/IMetalDevice.cs","IMetalDevice","Device","異常系","デバイス初期化前にDeviceプロパティにアクセスした場合","デバイスが未初期化","なし","IntPtr.Zeroが返却される、または例外がスローされる","中","未初期化状態のエラーハンドリング"
"4","UT-MTL-004","src/Avalonia.Metal/IMetalDevice.cs","IMetalDevice","CommandQueue","異常系","デバイス初期化前にCommandQueueプロパティにアクセスした場合","デバイスが未初期化","なし","IntPtr.Zeroが返却される、または例外がスローされる","中","未初期化状態のエラーハンドリング"
"5","UT-MTL-005","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurface","CreateMetalRenderTarget","正常系","有効なIMetalDeviceでレンダーターゲットが作成されること","IMetalPlatformSurfaceの実装クラスがインスタンス化済み","有効なIMetalDeviceインスタンス","IMetalPlatformSurfaceRenderTargetインスタンスが返却される","高","レンダーターゲット作成の基本機能"
"6","UT-MTL-006","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurface","CreateMetalRenderTarget","異常系","nullのdeviceが渡された場合","IMetalPlatformSurfaceの実装クラスがインスタンス化済み","device=null","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"7","UT-MTL-007","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurface","CreateMetalRenderTarget","異常系","無効なデバイスが渡された場合","IMetalPlatformSurfaceの実装クラスがインスタンス化済み","無効なIMetalDeviceインスタンス（Device=IntPtr.Zero）","適切な例外がスローされる","中","無効デバイスのエラーハンドリング"
"8","UT-MTL-008","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderTarget","BeginRendering","正常系","レンダリングセッションが正常に開始されること","IMetalPlatformSurfaceRenderTargetの実装クラスがインスタンス化済み","なし","IMetalPlatformSurfaceRenderingSessionインスタンスが返却される","高","レンダリングセッション開始の基本機能"
"9","UT-MTL-009","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderTarget","BeginRendering","異常系","既にDisposeされた後にBeginRenderingを呼び出した場合","Dispose()が呼び出し済み","なし","ObjectDisposedExceptionがスローされる","中","Dispose後のアクセス制御"
"10","UT-MTL-010","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderTarget","Dispose","正常系","リソースが正常に解放されること","IMetalPlatformSurfaceRenderTargetの実装クラスがインスタンス化済み","なし","例外がスローされずにリソースが解放される","高","IDisposableの実装確認"
"11","UT-MTL-011","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderTarget","Dispose","正常系","Disposeを複数回呼び出しても例外がスローされないこと","IMetalPlatformSurfaceRenderTargetの実装クラスがインスタンス化済み","Dispose()を2回呼び出し","例外がスローされない","中","冪等性の確認"
"12","UT-MTL-012","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Texture","正常系","Textureプロパティが有効なIntPtrを返すこと","レンダリングセッションが開始済み","なし","IntPtr.Zero以外の有効なポインタが返却される","高","テクスチャハンドルの取得"
"13","UT-MTL-013","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Size","正常系","Sizeプロパティが有効なPixelSizeを返すこと","レンダリングセッションが開始済み","なし","Width > 0 かつ Height > 0 のPixelSizeが返却される","高","サイズ情報の取得"
"14","UT-MTL-014","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Scaling","正常系","Scalingプロパティが有効なスケール値を返すこと","レンダリングセッションが開始済み","なし","0より大きいdouble値が返却される","中","スケーリング情報の取得"
"15","UT-MTL-015","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Scaling","境界値","Scalingプロパティが1.0（等倍）を返す場合","レンダリングセッションが開始済み、スケーリングなし","なし","1.0が返却される","低","標準スケーリングの確認"
"16","UT-MTL-016","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Scaling","境界値","Scalingプロパティが2.0（Retinaディスプレイ）を返す場合","レンダリングセッションが開始済み、2xスケーリング","なし","2.0が返却される","低","高DPIスケーリングの確認"
"17","UT-MTL-017","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","IsYFlipped","正常系","IsYFlippedプロパティが正しいbool値を返すこと","レンダリングセッションが開始済み","なし","true または false が返却される","中","Y軸反転フラグの取得"
"18","UT-MTL-018","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Dispose","正常系","セッションリソースが正常に解放されること","レンダリングセッションが開始済み","なし","例外がスローされずにリソースが解放される","高","IDisposableの実装確認"
"19","UT-MTL-019","src/Avalonia.Metal/IMetalDevice.cs","IMetalPlatformSurfaceRenderingSession","Dispose","正常系","Disposeを複数回呼び出しても例外がスローされないこと","レンダリングセッションが開始済み","Dispose()を2回呼び出し","例外がスローされない","中","冪等性の確認"
"20","UT-MTL-020","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SupportedImageHandleTypes","正常系","サポートされている画像ハンドルタイプの一覧が返却されること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","なし","空でないIReadOnlyList<string>が返却される","高","サポートタイプ一覧の取得"
"21","UT-MTL-021","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SupportedImageHandleTypes","境界値","サポートされている画像ハンドルタイプが空の場合","外部画像インポートがサポートされていない環境","なし","空のIReadOnlyList<string>が返却される","中","サポートなしの場合の確認"
"22","UT-MTL-022","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SupportedSemaphoreTypes","正常系","サポートされているセマフォタイプの一覧が返却されること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","なし","空でないIReadOnlyList<string>が返却される","高","サポートタイプ一覧の取得"
"23","UT-MTL-023","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SupportedSemaphoreTypes","境界値","サポートされているセマフォタイプが空の場合","外部セマフォがサポートされていない環境","なし","空のIReadOnlyList<string>が返却される","中","サポートなしの場合の確認"
"24","UT-MTL-024","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","DeviceLuid","正常系","DeviceLuidプロパティが有効なbyte配列を返すこと","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","なし","有効なbyte[]が返却される","中","デバイスLUIDの取得"
"25","UT-MTL-025","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","DeviceLuid","正常系","DeviceLuidプロパティがnullを返す場合","LUIDがサポートされていない環境","なし","nullが返却される","中","LUIDなしの場合の確認"
"26","UT-MTL-026","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","GetSynchronizationCapabilities","正常系","有効なハンドルタイプで同期機能が取得できること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","imageHandleType=""IOSurface""","CompositionGpuImportedImageSynchronizationCapabilitiesが返却される","高","同期機能の取得"
"27","UT-MTL-027","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","GetSynchronizationCapabilities","異常系","nullのハンドルタイプが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","imageHandleType=null","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"28","UT-MTL-028","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","GetSynchronizationCapabilities","異常系","サポートされていないハンドルタイプが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","imageHandleType=""UnsupportedType""","適切な例外がスローされる、またはデフォルト値が返却される","中","不正入力のエラーハンドリング"
"29","UT-MTL-029","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","ImportImage","正常系","有効なハンドルとプロパティで画像がインポートできること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIPlatformHandle、有効なPlatformGraphicsExternalImageProperties","IMetalExternalTextureインスタンスが返却される","高","外部画像インポートの基本機能"
"30","UT-MTL-030","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","ImportImage","異常系","nullのハンドルが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","handle=null","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"31","UT-MTL-031","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","ImportImage","異常系","無効なハンドルが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","無効なIPlatformHandle","適切な例外がスローされる","中","無効ハンドルのエラーハンドリング"
"32","UT-MTL-032","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","ImportSharedEvent","正常系","有効なハンドルで共有イベントがインポートできること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIPlatformHandle","IMetalSharedEventインスタンスが返却される","高","共有イベントインポートの基本機能"
"33","UT-MTL-033","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","ImportSharedEvent","異常系","nullのハンドルが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","handle=null","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"34","UT-MTL-034","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitWait","正常系","有効なイベントと待機値でSubmitWaitが正常に実行されること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、waitForValue=100","例外がスローされずに処理が完了する","高","待機サブミットの基本機能"
"35","UT-MTL-035","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitWait","異常系","nullのイベントが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","event=null、waitForValue=100","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"36","UT-MTL-036","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitWait","境界値","waitForValueが0の場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、waitForValue=0","例外がスローされずに処理が完了する","中","最小値境界のテスト"
"37","UT-MTL-037","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitWait","境界値","waitForValueがulong.MaxValueの場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、waitForValue=ulong.MaxValue","例外がスローされずに処理が完了する","低","最大値境界のテスト"
"38","UT-MTL-038","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitSignal","正常系","有効なイベントとシグナル値でSubmitSignalが正常に実行されること","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、signalValue=100","例外がスローされずに処理が完了する","高","シグナルサブミットの基本機能"
"39","UT-MTL-039","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitSignal","異常系","nullのイベントが渡された場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","event=null、signalValue=100","ArgumentNullExceptionがスローされる","高","null引数のバリデーション"
"40","UT-MTL-040","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitSignal","境界値","signalValueが0の場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、signalValue=0","例外がスローされずに処理が完了する","中","最小値境界のテスト"
"41","UT-MTL-041","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalObjectsFeature","SubmitSignal","境界値","signalValueがulong.MaxValueの場合","IMetalExternalObjectsFeatureの実装クラスがインスタンス化済み","有効なIMetalSharedEvent、signalValue=ulong.MaxValue","例外がスローされずに処理が完了する","低","最大値境界のテスト"
"42","UT-MTL-042","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Width","正常系","Widthプロパティが有効な幅を返すこと","IMetalExternalTextureの実装クラスがインスタンス化済み","なし","0より大きいint値が返却される","高","テクスチャ幅の取得"
"43","UT-MTL-043","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Width","境界値","Widthプロパティが1（最小有効値）を返す場合","1ピクセル幅のテクスチャ","なし","1が返却される","低","最小幅の確認"
"44","UT-MTL-044","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Height","正常系","Heightプロパティが有効な高さを返すこと","IMetalExternalTextureの実装クラスがインスタンス化済み","なし","0より大きいint値が返却される","高","テクスチャ高さの取得"
"45","UT-MTL-045","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Height","境界値","Heightプロパティが1（最小有効値）を返す場合","1ピクセル高のテクスチャ","なし","1が返却される","低","最小高さの確認"
"46","UT-MTL-046","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Samples","正常系","Samplesプロパティが有効なサンプル数を返すこと","IMetalExternalTextureの実装クラスがインスタンス化済み","なし","1以上のint値が返却される","中","マルチサンプル数の取得"
"47","UT-MTL-047","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Samples","境界値","Samplesプロパティが1（マルチサンプリングなし）を返す場合","シングルサンプルテクスチャ","なし","1が返却される","低","シングルサンプルの確認"
"48","UT-MTL-048","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Samples","境界値","Samplesプロパティが4（4xMSAA）を返す場合","4xマルチサンプルテクスチャ","なし","4が返却される","低","4xMSAAの確認"
"49","UT-MTL-049","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Handle","正常系","Handleプロパティが有効なIntPtrを返すこと","IMetalExternalTextureの実装クラスがインスタンス化済み","なし","IntPtr.Zero以外の有効なポインタが返却される","高","テクスチャハンドルの取得"
"50","UT-MTL-050","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Dispose","正常系","テクスチャリソースが正常に解放されること","IMetalExternalTextureの実装クラスがインスタンス化済み","なし","例外がスローされずにリソースが解放される","高","IDisposableの実装確認"
"51","UT-MTL-051","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalExternalTexture","Dispose","正常系","Disposeを複数回呼び出しても例外がスローされないこと","IMetalExternalTextureの実装クラスがインスタンス化済み","Dispose()を2回呼び出し","例外がスローされない","中","冪等性の確認"
"52","UT-MTL-052","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalSharedEvent","Handle","正常系","Handleプロパティが有効なIntPtrを返すこと","IMetalSharedEventの実装クラスがインスタンス化済み","なし","IntPtr.Zero以外の有効なポインタが返却される","高","共有イベントハンドルの取得"
"53","UT-MTL-053","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalSharedEvent","Dispose","正常系","共有イベントリソースが正常に解放されること","IMetalSharedEventの実装クラスがインスタンス化済み","なし","例外がスローされずにリソースが解放される","高","IDisposableの実装確認"
"54","UT-MTL-054","src/Avalonia.Metal/IMetalExternalObjectsFeature.cs","IMetalSharedEvent","Dispose","正常系","Disposeを複数回呼び出しても例外がスローされないこと","IMetalSharedEventの実装クラスがインスタンス化済み","Dispose()を2回呼び出し","例外がスローされない","中","冪等性の確認"
