"No","テストID","対象ファイル","対象クラス/関数","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-VLK-001","src/Avalonia.Vulkan/VulkanException.cs","VulkanException","VulkanException(string)","正常系","メッセージ付き例外が正常に生成されること","なし","message=""Test error""","Messageプロパティが""Test error""を返すこと","中","基本コンストラクタ"
"2","UT-VLK-002","src/Avalonia.Vulkan/VulkanException.cs","VulkanException","VulkanException(string, int)","正常系","関数名とエラーコード付き例外が正常に生成されること","なし","funcName=""vkCreateInstance"", res=-1","Messageが関数名とVkResult値を含むこと","中","エラーコード付きコンストラクタ"
"3","UT-VLK-003","src/Avalonia.Vulkan/VulkanException.cs","VulkanException","ThrowOnError","正常系","VK_SUCCESS時に例外がスローされないこと","なし","funcName=""test"", res=0 (VK_SUCCESS)","例外がスローされないこと","高","成功時の挙動確認"
"4","UT-VLK-004","src/Avalonia.Vulkan/VulkanException.cs","VulkanException","ThrowOnError","異常系","エラーコード時にVulkanExceptionがスローされること","なし","funcName=""vkTest"", res=-1 (VK_ERROR_OUT_OF_HOST_MEMORY)","VulkanExceptionがスローされること","高","エラー時の挙動確認"
"5","UT-VLK-005","src/Avalonia.Vulkan/VulkanException.cs","VulkanExceptionExtensions","ThrowOnError","正常系","VkResult成功時に例外がスローされないこと","なし","VkResult.VK_SUCCESS, funcName=""test""","例外がスローされないこと","高","拡張メソッドの成功ケース"
"6","UT-VLK-006","src/Avalonia.Vulkan/VulkanException.cs","VulkanExceptionExtensions","ThrowOnError","異常系","VkResultエラー時に例外がスローされること","なし","VkResult.VK_ERROR_DEVICE_LOST, funcName=""vkTest""","VulkanExceptionがスローされること","高","拡張メソッドのエラーケース"
"7","UT-VLK-007","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanOptions","プロパティ初期化","正常系","デフォルト値が正しく設定されること","なし","new VulkanOptions()","VulkanInstanceCreationOptionsとVulkanDeviceCreationOptionsが初期化されていること","中","デフォルトコンストラクタ"
"8","UT-VLK-008","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanInstanceCreationOptions","VulkanVersion","正常系","デフォルトバージョンが1.1.0であること","なし","new VulkanInstanceCreationOptions()","VulkanVersion==new Version(1, 1, 0)","中","デフォルトバージョン確認"
"9","UT-VLK-009","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanInstanceCreationOptions","InstanceExtensions","正常系","拡張機能リストが空リストで初期化されること","なし","new VulkanInstanceCreationOptions()","InstanceExtensions.Count==0","低","コレクション初期化確認"
"10","UT-VLK-010","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanInstanceCreationOptions","EnabledLayers","正常系","レイヤーリストが空リストで初期化されること","なし","new VulkanInstanceCreationOptions()","EnabledLayers.Count==0","低","コレクション初期化確認"
"11","UT-VLK-011","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanDeviceCreationOptions","DeviceExtensions","正常系","デバイス拡張リストが空リストで初期化されること","なし","new VulkanDeviceCreationOptions()","DeviceExtensions.Count==0","低","コレクション初期化確認"
"12","UT-VLK-012","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanDeviceCreationOptions","PreferDiscreteGpu","正常系","デフォルトでfalseであること","なし","new VulkanDeviceCreationOptions()","PreferDiscreteGpu==false","低","デフォルト値確認"
"13","UT-VLK-013","src/Avalonia.Vulkan/VulkanOptions.cs","VulkanPlatformSpecificOptions","RequiredInstanceExtensions","正常系","必須拡張リストが空リストで初期化されること","なし","new VulkanPlatformSpecificOptions()","RequiredInstanceExtensions.Count==0","低","コレクション初期化確認"
"14","UT-VLK-014","src/Avalonia.Vulkan/VulkanBindings.cs","VulkanHelpers","MakeVersion(Version)","正常系","Version型からVulkanバージョン番号が正しく生成されること","なし","new Version(1, 2, 3)","(1 << 22) | (2 << 12) | 3 が返却されること","高","バージョン変換"
"15","UT-VLK-015","src/Avalonia.Vulkan/VulkanBindings.cs","VulkanHelpers","MakeVersion(int, int, int)","正常系","個別の引数からVulkanバージョン番号が正しく生成されること","なし","major=1, minor=1, patch=0","(1 << 22) | (1 << 12) | 0 が返却されること","高","バージョン変換"
"16","UT-VLK-016","src/Avalonia.Vulkan/VulkanBindings.cs","VulkanHelpers","MakeVersion(int, int, int)","境界値","メジャーバージョン0の場合","なし","major=0, minor=0, patch=0","0が返却されること","中","最小値テスト"
"17","UT-VLK-017","src/Avalonia.Vulkan/VulkanBindings.cs","VulkanHelpers","QueueFamilyIgnored","正常系","定数値が正しいこと","なし","VulkanHelpers.QueueFamilyIgnored","4294967295 (uint.MaxValue)が返却されること","低","定数確認"
"18","UT-VLK-018","src/Avalonia.Vulkan/VulkanImageInfo.cs","VulkanImageInfo","プロパティ設定","正常系","すべてのプロパティが正しく設定・取得できること","なし","各プロパティに値を設定","設定した値が取得できること","中","レコード構造体のプロパティ"
"19","UT-VLK-019","src/Avalonia.Vulkan/VulkanImageInfo.cs","VulkanImageInfo","PixelSize","正常系","PixelSizeプロパティが正しく設定されること","なし","PixelSize=new PixelSize(100, 200)","Width=100, Height=200が取得できること","中","ピクセルサイズ設定"
"20","UT-VLK-020","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","コンストラクタ","正常系","VulkanContextが正しく初期化されること","有効なIVulkanDeviceとplatformFeatures","device=mockDevice, platformFeatures=new Dictionary<Type, object>()","Device, Instanceプロパティが正しく設定されること","高","コンテキスト初期化"
"21","UT-VLK-021","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","TryGetFeature","正常系","IVulkanContextExternalObjectsFeature型でfeatureが取得できること","外部オブジェクト機能が有効","featureType=typeof(IVulkanContextExternalObjectsFeature)","VulkanExternalObjectsFeatureインスタンスが返却されること","中","機能取得"
"22","UT-VLK-022","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","TryGetFeature","異常系","未対応の型でnullが返却されること","なし","featureType=typeof(string)","nullが返却されること","中","未対応型の処理"
"23","UT-VLK-023","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","IsLost","正常系","デバイスのIsLost状態が正しく返却されること","なし","Device.IsLost=false","falseが返却されること","中","状態確認"
"24","UT-VLK-024","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","EnsureCurrent","正常系","デバイスロックが取得できること","有効なデバイス","EnsureCurrent()呼び出し","IDisposableが返却されること","高","ロック取得"
"25","UT-VLK-025","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","CreateRenderTarget","正常系","IVulkanKhrSurfacePlatformSurface型からレンダーターゲットが作成されること","有効なsurface","surfaces=[mockKhrSurface]","VulkanKhrRenderTargetが返却されること","高","レンダーターゲット作成"
"26","UT-VLK-026","src/Avalonia.Vulkan/VulkanContext.cs","VulkanContext","CreateRenderTarget","異常系","適切なsurfaceがない場合VulkanExceptionがスローされること","なし","surfaces=[]","VulkanExceptionがスローされること","高","エラーハンドリング"
"27","UT-VLK-027","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","CreateContext","正常系","新しいVulkanContextが作成されること","有効なfactoryとplatformOptions","CreateContext()呼び出し","IPlatformGraphicsContextが返却されること","高","コンテキスト生成"
"28","UT-VLK-028","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","GetSharedContext","正常系","共有コンテキストが取得できること","有効なfactory","GetSharedContext()呼び出し","IPlatformGraphicsContextが返却されること","高","共有コンテキスト取得"
"29","UT-VLK-029","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","GetSharedContext","正常系","既存コンテキストがLostの場合に新規作成されること","_currentSharedContext.IsLost=true","GetSharedContext()呼び出し","新しいコンテキストが返却されること","高","Lost状態のリカバリ"
"30","UT-VLK-030","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","UsesSharedContext","正常系","factoryのUsesShadedDevice値が返却されること","factory.UsesShadedDevice=true","UsesSharedContext","trueが返却されること","低","プロパティ確認"
"31","UT-VLK-031","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","TryCreate","正常系","CustomSharedDevice指定時に正しく初期化されること","options.CustomSharedDevice!=null","TryCreate(options, platformOptions)","VulkanPlatformGraphicsインスタンスが返却されること","高","カスタムデバイス使用"
"32","UT-VLK-032","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","VulkanPlatformGraphics","TryCreate","異常系","初期化失敗時にnullが返却されること","不正なoptions","TryCreate(invalidOptions, platformOptions)","nullが返却されること","高","初期化エラー処理"
"33","UT-VLK-033","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","DefaultDeviceFactory","CreateDevice","正常系","新しいデバイスが作成されること","有効なinstance","CreateDevice(platformOptions)","IVulkanDeviceが返却されること","高","デバイス生成"
"34","UT-VLK-034","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","DefaultDeviceFactory","GetSharedDevice","異常系","NotSupportedExceptionがスローされること","なし","GetSharedDevice(platformOptions)","NotSupportedExceptionがスローされること","中","未サポート操作"
"35","UT-VLK-035","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","CustomSharedDeviceFactory","GetSharedDevice","正常系","設定されたデバイスが返却されること","_device設定済み","GetSharedDevice(platformOptions)","コンストラクタで渡したdeviceが返却されること","中","共有デバイス取得"
"36","UT-VLK-036","src/Avalonia.Vulkan/VulkanPlatformGraphics.cs","CustomSharedDeviceFactory","CreateDevice","異常系","NotSupportedExceptionがスローされること","なし","CreateDevice(platformOptions)","NotSupportedExceptionがスローされること","中","未サポート操作"
"37","UT-VLK-037","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","VulkanKhrRenderTarget","コンストラクタ","正常系","RenderTargetが正しく初期化されること","有効なsurfaceとcontext","new VulkanKhrRenderTarget(surface, context)","Format, IsRgbaプロパティが設定されること","高","初期化"
"38","UT-VLK-038","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","VulkanKhrRenderTarget","IsRgba","正常系","RGBA形式の場合trueが返却されること","SurfaceFormat.format=VK_FORMAT_R8G8B8A8_UNORM","IsRgba","trueが返却されること","中","形式判定"
"39","UT-VLK-039","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","VulkanKhrRenderTarget","IsRgba","正常系","BGRA形式の場合falseが返却されること","SurfaceFormat.format=VK_FORMAT_B8G8R8A8_UNORM","IsRgba","falseが返却されること","中","形式判定"
"40","UT-VLK-040","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","VulkanKhrRenderTarget","BeginDraw","正常系","RenderSessionが返却されること","有効なdisplay","BeginDraw()","IVulkanRenderSessionが返却されること","高","描画開始"
"41","UT-VLK-041","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","VulkanKhrRenderTarget","Dispose","正常系","リソースが正しく解放されること","初期化済みRenderTarget","Dispose()","例外なく完了すること","高","リソース解放"
"42","UT-VLK-042","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","RenderingSession","Size","正常系","イメージサイズが正しく返却されること","有効なimage","Size","image.Sizeと同じ値が返却されること","中","サイズ取得"
"43","UT-VLK-043","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","RenderingSession","IsYFlipped","正常系","常にtrueが返却されること","なし","IsYFlipped","trueが返却されること","低","Y反転フラグ"
"44","UT-VLK-044","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","RenderingSession","ImageInfo","正常系","VulkanImageInfoが正しく返却されること","有効なimage","ImageInfo","image.ImageInfoと同じ値が返却されること","中","イメージ情報取得"
"45","UT-VLK-045","src/Avalonia.Vulkan/VulkanKhrSurfaceRenderTarget.cs","RenderingSession","Dispose","正常系","プレゼンテーション処理が実行されること","有効なDisplay","Dispose()","Display.StartPresentation、BlitImageToCurrentImage、EndPresentationが呼ばれること","高","描画完了処理"
"46","UT-VLK-046","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","Lock","正常系","モニターロックが取得できること","なし","Lock()","IDisposableが返却されること","高","スレッドロック"
"47","UT-VLK-047","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","Lock","正常系","ロック解放後にスレッドがnullになること","ロック取得済み","lockDisposable.Dispose()","_lockedByThreadがnullになること","高","ロック解放"
"48","UT-VLK-048","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","Lock","正常系","入れ子ロックが正しく動作すること","なし","Lock()を2回呼び出し","lockCount=2、外側のDispose後もスレッドが維持されること","高","入れ子ロック"
"49","UT-VLK-049","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","MainQueueHandle","異常系","ロック未取得時にInvalidOperationExceptionがスローされること","ロック未取得","MainQueueHandle","InvalidOperationExceptionがスローされること","高","アクセス制御"
"50","UT-VLK-050","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","EnabledExtensions","正常系","有効な拡張のリストが返却されること","拡張有効化済み","EnabledExtensions","コンストラクタで渡した拡張リストが返却されること","中","拡張取得"
"51","UT-VLK-051","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","IsLost","正常系","常にfalseが返却されること","なし","IsLost","falseが返却されること","低","Lost状態確認"
"52","UT-VLK-052","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","Dispose","正常系","デバイスハンドルが正しく破棄されること","有効なハンドル","Dispose()","_handle.HandleがIntPtr.Zeroになること","高","リソース解放"
"53","UT-VLK-053","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","Dispose","正常系","二重Disposeでも例外が発生しないこと","Dispose済み","Dispose()","例外なく完了すること","中","二重解放対策"
"54","UT-VLK-054","src/Avalonia.Vulkan/Interop/VulkanDevice.cs","VulkanDevice","TryGetFeature","正常系","常にnullが返却されること","なし","TryGetFeature(typeof(object))","nullが返却されること","低","機能未サポート"
"55","UT-VLK-055","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","Create","正常系","デバイスが正常に作成されること","有効なinstance、options、platformOptions","Create(instance, options, platformOptions)","IVulkanDeviceが返却されること","高","デバイス生成"
"56","UT-VLK-056","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","Create","異常系","デバイスが見つからない場合VulkanExceptionがスローされること","deviceCount=0","Create(instance, options, platformOptions)","VulkanException(""No devices found"")がスローされること","高","デバイス未検出エラー"
"57","UT-VLK-057","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","Create","異常系","互換デバイスがない場合VulkanExceptionがスローされること","互換デバイスなし","Create(instance, options, platformOptions)","VulkanException(""No compatible devices found"")がスローされること","高","互換性エラー"
"58","UT-VLK-058","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","Create","正常系","PreferDiscreteGpu=true時にディスクリートGPUが優先されること","ディスクリートGPUと統合GPU存在","options.PreferDiscreteGpu=true","ディスクリートGPUのデバイスが返却されること","中","GPU選択優先度"
"59","UT-VLK-059","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","GetDeviceExtensions","正常系","サポートされている拡張のリストが取得できること","有効なphysicalDevice","GetDeviceExtensions(instance, physicalDevice)","拡張名のリストが返却されること","中","拡張列挙"
"60","UT-VLK-060","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","CheckDevice","正常系","互換デバイスの場合DeviceInfoが返却されること","互換デバイス","CheckDevice(instance, physicalDevice, options, null)","DeviceInfo?が返却されること","高","デバイス検証"
"61","UT-VLK-061","src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs","VulkanDevice","CheckDevice","正常系","VK_KHR_swapchain未サポート時にnullが返却されること","swapchain非サポートデバイス","CheckDevice(instance, physicalDevice, options, null)","nullが返却されること","高","swapchain要件"
"62","UT-VLK-062","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","Create","正常系","Vulkanインスタンスが正常に作成されること","有効なoptions","Create(options, platformOptions)","IVulkanInstanceが返却されること","高","インスタンス生成"
"63","UT-VLK-063","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","Create","異常系","getProcAddressがない場合ArgumentExceptionがスローされること","getProcAddress=null","Create(options, platformOptions)","ArgumentException(""No VkGetInstanceProcAddr provided"")がスローされること","高","引数検証"
"64","UT-VLK-064","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","Create","正常系","UseDebug=true時にデバッグ拡張が有効化されること","options.UseDebug=true","Create(options, platformOptions)","VK_EXT_debug_utilsが有効化されること","中","デバッグ機能"
"65","UT-VLK-065","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","GetInstanceProcAddress","正常系","関数ポインタが取得できること","有効なインスタンス","GetInstanceProcAddress(instance, ""vkGetDeviceProcAddr"")","IntPtr.Zero以外が返却されること","高","関数取得"
"66","UT-VLK-066","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","GetDeviceProcAddress","正常系","デバイス関数ポインタが取得できること","有効なデバイス","GetDeviceProcAddress(device, ""vkDestroyDevice"")","IntPtr.Zero以外が返却されること","高","デバイス関数取得"
"67","UT-VLK-067","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","EnabledExtensions","正常系","有効な拡張のリストが返却されること","拡張有効化済み","EnabledExtensions","コンストラクタで渡した拡張が含まれること","中","拡張確認"
"68","UT-VLK-068","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","IsLayerAvailable","正常系","存在するレイヤーでtrueが返却されること","VK_LAYER_KHRONOS_validation存在","IsLayerAvailable(api, ""VK_LAYER_KHRONOS_validation"")","trueが返却されること","中","レイヤー確認"
"69","UT-VLK-069","src/Avalonia.Vulkan/Interop/VulkanInstance.cs","VulkanInstance","IsLayerAvailable","正常系","存在しないレイヤーでfalseが返却されること","なし","IsLayerAvailable(api, ""NONEXISTENT_LAYER"")","falseが返却されること","中","レイヤー未検出"
"70","UT-VLK-070","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","コンストラクタ","正常系","イメージベースが正しく初期化されること","有効なcontext","new VulkanImageBase(context, pool, format, size)","Format, Sizeプロパティが設定されること","高","初期化"
"71","UT-VLK-071","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","Initialize","正常系","イメージとビューが作成されること","未初期化状態","Initialize(null)","_handle, _imageView, _imageMemoryが設定されること","高","イメージ作成"
"72","UT-VLK-072","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","Initialize","正常系","二重初期化時に何もしないこと","初期化済み","Initialize(null)","既存の値が維持されること","中","二重初期化対策"
"73","UT-VLK-073","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","TransitionLayout","正常系","レイアウト遷移が正しく実行されること","初期化済みイメージ","TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_ACCESS_TRANSFER_READ_BIT)","CurrentLayoutが更新されること","高","レイアウト遷移"
"74","UT-VLK-074","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","TransitionLayout(uint, uint)","正常系","uint型パラメータでレイアウト遷移できること","初期化済みイメージ","TransitionLayout(destinationLayout, destinationAccessFlags)","内部のTransitionLayoutが呼ばれること","中","オーバーロード"
"75","UT-VLK-075","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","ImageInfo","正常系","正しいVulkanImageInfoが返却されること","初期化済みイメージ","ImageInfo","Handle, Size, Format等が正しく設定されたVulkanImageInfoが返却されること","中","情報取得"
"76","UT-VLK-076","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImageBase","Dispose","正常系","すべてのリソースが解放されること","初期化済みイメージ","Dispose()","_imageView, _handle, _imageMemoryがdefaultになること","高","リソース解放"
"77","UT-VLK-077","src/Avalonia.Vulkan/Interop/VulkanImage.cs","VulkanImage","コンストラクタ","正常系","イメージが初期化され、レイアウト遷移が実行されること","有効なcontext","new VulkanImage(context, pool, format, size)","CurrentLayout==VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMALになること","高","完全初期化"
"78","UT-VLK-078","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","コンストラクタ","正常系","コマンドバッファが正しく初期化されること","有効なpool","new VulkanCommandBuffer(pool, handle, context)","Handle, _fenceが設定されること","高","初期化"
"79","UT-VLK-079","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","BeginRecording","正常系","コマンド記録が開始されること","未開始状態","BeginRecording()","_hasStarted==trueになること","高","記録開始"
"80","UT-VLK-080","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","BeginRecording","正常系","二重呼び出しで何もしないこと","記録開始済み","BeginRecording()","エラーなく完了すること","中","二重開始対策"
"81","UT-VLK-081","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","EndRecording","正常系","コマンド記録が終了すること","記録中","EndRecording()","_hasEnded==trueになること","高","記録終了"
"82","UT-VLK-082","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","EndRecording","正常系","未開始時は何もしないこと","未開始","EndRecording()","_hasEnded==falseのままであること","中","未開始時の処理"
"83","UT-VLK-083","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","Submit()","正常系","コマンドバッファがサブミットされること","記録済み","Submit()","poolにaddされること","高","サブミット"
"84","UT-VLK-084","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","Submit(セマフォ付き)","正常系","セマフォ付きでサブミットされること","記録済み","Submit(waitSemaphores, waitDstStageMask, signalSemaphores)","セマフォが正しく設定されること","高","セマフォ付きサブミット"
"85","UT-VLK-085","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","IsFinished","正常系","フェンスがシグナル状態の場合trueが返却されること","フェンスシグナル済み","IsFinished","trueが返却されること","中","完了確認"
"86","UT-VLK-086","src/Avalonia.Vulkan/Interop/VulkanCommandBuffer.cs","VulkanCommandBuffer","Dispose","正常系","リソースが正しく解放されること","有効なハンドル","Dispose()","_handle==defaultになること","高","リソース解放"
"87","UT-VLK-087","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","コンストラクタ","正常系","コマンドプールが正しく作成されること","有効なcontext","new VulkanCommandBufferPool(context)","Handle!=0であること","高","初期化"
"88","UT-VLK-088","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","CreateCommandBuffer","正常系","新しいコマンドバッファが作成されること","有効なpool","CreateCommandBuffer()","VulkanCommandBufferが返却されること","高","コマンドバッファ生成"
"89","UT-VLK-089","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","CreateCommandBuffer","正常系","autoFree=true時に完了済みバッファが解放されること","autoFree=true、完了済みバッファあり","CreateCommandBuffer()","完了済みバッファがDisposeされること","中","自動解放"
"90","UT-VLK-090","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","FreeUsedCommandBuffers","正常系","すべてのバッファが解放されること","複数バッファ登録済み","FreeUsedCommandBuffers()","_commandBuffers.Count==0になること","高","全解放"
"91","UT-VLK-091","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","FreeFinishedCommandBuffers","正常系","完了済みバッファのみ解放されること","完了済みと未完了バッファあり","FreeFinishedCommandBuffers()","完了済みのみ解放されること","中","選択的解放"
"92","UT-VLK-092","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","AddSubmittedCommandBuffer","正常系","バッファがキューに追加されること","なし","AddSubmittedCommandBuffer(buffer)","_commandBuffers.Count増加","中","キュー追加"
"93","UT-VLK-093","src/Avalonia.Vulkan/Interop/VulkanCommandBufferPool.cs","VulkanCommandBufferPool","Dispose","正常系","プールとバッファが解放されること","有効なpool","Dispose()","Handle==defaultになること","高","リソース解放"
"94","UT-VLK-094","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","CreateDisplay","正常系","ディスプレイが正しく作成されること","有効なcontextとsurface","CreateDisplay(context, surface)","VulkanDisplayが返却されること","高","ディスプレイ生成"
"95","UT-VLK-095","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","SurfaceFormat","正常系","サーフェスフォーマットが取得できること","有効なsurface","SurfaceFormat","VkSurfaceFormatKHRが返却されること","中","フォーマット取得"
"96","UT-VLK-096","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","EnsureSwapchainAvailable","正常系","サイズ変更時にスワップチェーンが再作成されること","Size!=surface.Size","EnsureSwapchainAvailable()","trueが返却されること","高","スワップチェーン更新"
"97","UT-VLK-097","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","EnsureSwapchainAvailable","正常系","サイズ変更なしの場合falseが返却されること","Size==surface.Size","EnsureSwapchainAvailable()","falseが返却されること","中","スワップチェーン維持"
"98","UT-VLK-098","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","StartPresentation","正常系","コマンドバッファが取得でき、次のイメージが準備されること","有効なswapchain","StartPresentation()","VulkanCommandBufferが返却されること","高","プレゼンテーション開始"
"99","UT-VLK-099","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","BlitImageToCurrentImage","正常系","イメージが現在のスワップチェーンイメージにブリットされること","有効なcommandBufferとimage","BlitImageToCurrentImage(commandBuffer, image)","CmdBlitImageが呼ばれること","高","イメージ転送"
"100","UT-VLK-100","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","EndPresentation","正常系","プレゼンテーションが完了しキューに提出されること","StartPresentation済み","EndPresentation(commandBuffer)","vkQueuePresentKHRが呼ばれること","高","プレゼンテーション完了"
"101","UT-VLK-101","src/Avalonia.Vulkan/Interop/VulkanDisplay.cs","VulkanDisplay","Dispose","正常系","すべてのリソースが解放されること","初期化済みdisplay","Dispose()","swapchain, surface, poolが解放されること","高","リソース解放"
"102","UT-VLK-102","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","コンストラクタ","正常系","フェンスが正しく作成されること","有効なcontext","new VulkanFence(context, flags)","Handle!=0であること","高","初期化"
"103","UT-VLK-103","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","IsSignaled","正常系","シグナル状態の場合trueが返却されること","フェンスシグナル済み","IsSignaled","trueが返却されること","中","状態確認"
"104","UT-VLK-104","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","IsSignaled","正常系","未シグナル状態の場合falseが返却されること","フェンス未シグナル","IsSignaled","falseが返却されること","中","状態確認"
"105","UT-VLK-105","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","Wait","正常系","フェンスがシグナルされるまで待機すること","有効なフェンス","Wait()","例外なく完了すること","高","待機処理"
"106","UT-VLK-106","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","Wait","正常系","タイムアウト指定で待機できること","有効なフェンス","Wait(1000)","タイムアウト後に完了すること","中","タイムアウト待機"
"107","UT-VLK-107","src/Avalonia.Vulkan/Interop/VulkanFence.cs","VulkanFence","Dispose","正常系","フェンスが解放されること","有効なフェンス","Dispose()","Handle==defaultになること","高","リソース解放"
"108","UT-VLK-108","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphore","コンストラクタ(context)","正常系","セマフォが正しく作成されること","有効なcontext","new VulkanSemaphore(context)","Handle!=0であること","高","初期化"
"109","UT-VLK-109","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphore","コンストラクタ(context, handle)","正常系","既存ハンドルでセマフォが初期化されること","有効なhandle","new VulkanSemaphore(context, handle)","Handle==handleであること","中","ハンドル初期化"
"110","UT-VLK-110","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphore","Dispose","正常系","セマフォが解放されること","有効なセマフォ","Dispose()","Handle==defaultになること","高","リソース解放"
"111","UT-VLK-111","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphore","Dispose","正常系","二重Disposeでも例外が発生しないこと","Dispose済み","Dispose()","例外なく完了すること","中","二重解放対策"
"112","UT-VLK-112","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphorePair","コンストラクタ","正常系","2つのセマフォが作成されること","有効なcontext","new VulkanSemaphorePair(context)","ImageAvailableSemaphore, RenderFinishedSemaphoreが作成されること","高","ペア初期化"
"113","UT-VLK-113","src/Avalonia.Vulkan/Interop/VulkanSemaphore.cs","VulkanSemaphorePair","Dispose","正常系","両方のセマフォが解放されること","有効なペア","Dispose()","両セマフォがDisposeされること","高","リソース解放"
"114","UT-VLK-114","src/Avalonia.Vulkan/Interop/VulkanMemoryHelper.cs","VulkanMemoryHelper","FindSuitableMemoryTypeIndex","正常系","適切なメモリタイプインデックスが見つかること","有効なproperties","FindSuitableMemoryTypeIndex(context, memoryTypeBits, flags)","0以上の値が返却されること","高","メモリタイプ検索"
"115","UT-VLK-115","src/Avalonia.Vulkan/Interop/VulkanMemoryHelper.cs","VulkanMemoryHelper","FindSuitableMemoryTypeIndex","異常系","適切なメモリタイプがない場合-1が返却されること","該当メモリタイプなし","FindSuitableMemoryTypeIndex(context, 0, flags)","-1が返却されること","高","メモリタイプ未検出"
"116","UT-VLK-116","src/Avalonia.Vulkan/Interop/VulkanMemoryHelper.cs","VulkanMemoryHelper","TransitionLayout","正常系","イメージレイアウト遷移が実行されること","有効なcommandBuffer","TransitionLayout(context, commandBuffer, image, srcLayout, srcAccess, dstLayout, dstAccess, mipLevels)","CmdPipelineBarrierが呼ばれること","高","レイアウト遷移"
"117","UT-VLK-117","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","コンストラクタ","正常系","サーフェスが正しく作成されること","有効なcontextとsurfaceInfo","new VulkanKhrSurface(context, surfaceInfo)","Handle!=0であること","高","初期化"
"118","UT-VLK-118","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","CanSurfacePresent","正常系","プレゼント可能な場合trueが返却されること","プレゼント対応サーフェス","CanSurfacePresent()","trueが返却されること","高","プレゼント確認"
"119","UT-VLK-119","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","CanSurfacePresent","正常系","プレゼント不可の場合falseが返却されること","プレゼント非対応サーフェス","CanSurfacePresent()","falseが返却されること","中","プレゼント不可確認"
"120","UT-VLK-120","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","GetSurfaceFormat","正常系","サーフェスフォーマットが取得できること","有効なサーフェス","GetSurfaceFormat()","VkSurfaceFormatKHRが返却されること","高","フォーマット取得"
"121","UT-VLK-121","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","GetSurfaceFormat","異常系","フォーマットがない場合VulkanExceptionがスローされること","フォーマットカウント=0","GetSurfaceFormat()","VulkanExceptionがスローされること","高","フォーマット未検出エラー"
"122","UT-VLK-122","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","GetSurfaceFormat","正常系","UNDEFINED形式時にB8G8R8A8_UNORMが返却されること","format==VK_FORMAT_UNDEFINED","GetSurfaceFormat()","VK_FORMAT_B8G8R8A8_UNORMが返却されること","中","デフォルトフォーマット"
"123","UT-VLK-123","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","Size","正常系","surfaceInfoのサイズが返却されること","有効なsurfaceInfo","Size","surfaceInfo.Sizeと同じ値が返却されること","低","サイズ取得"
"124","UT-VLK-124","src/Avalonia.Vulkan/Interop/VulkanKhrSurface.cs","VulkanKhrSurface","Dispose","正常系","サーフェスが解放されること","有効なサーフェス","Dispose()","Handle==defaultになること","高","リソース解放"
"125","UT-VLK-125","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","コンストラクタ","正常系","外部オブジェクト機能が正しく初期化されること","有効なcontext","new VulkanExternalObjectsFeature(context)","SupportedImageHandleTypes, SupportedSemaphoreTypesが設定されること","高","初期化"
"126","UT-VLK-126","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","SupportedImageHandleTypes","正常系","Windows環境でNtHandle/KmtHandleがサポートされること","Windows環境","SupportedImageHandleTypes","VulkanOpaqueNtHandle, VulkanOpaqueKmtHandleを含むこと","中","プラットフォーム依存"
"127","UT-VLK-127","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","SupportedImageHandleTypes","正常系","Linux環境でPosixFileDescriptorがサポートされること","Linux環境","SupportedImageHandleTypes","VulkanOpaquePosixFileDescriptorを含むこと","中","プラットフォーム依存"
"128","UT-VLK-128","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","GetSynchronizationCapabilities","正常系","サポートされているhandleTypeでSemaphoresが返却されること","サポートされているhandleType","GetSynchronizationCapabilities(handleType)","CompositionGpuImportedImageSynchronizationCapabilities.Semaphoresが返却されること","高","同期機能確認"
"129","UT-VLK-129","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","GetSynchronizationCapabilities","異常系","未サポートhandleTypeでArgumentExceptionがスローされること","未サポートhandleType","GetSynchronizationCapabilities(""unsupported"")","ArgumentExceptionがスローされること","高","引数検証"
"130","UT-VLK-130","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","ImportImage","正常系","外部イメージがインポートできること","サポートされているhandleType","ImportImage(handle, properties)","IVulkanExternalImageが返却されること","高","イメージインポート"
"131","UT-VLK-131","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","ImportImage","異常系","未サポートhandleTypeでNotSupportedExceptionがスローされること","未サポートhandleType","ImportImage(unsupportedHandle, properties)","NotSupportedExceptionがスローされること","高","未サポートハンドル"
"132","UT-VLK-132","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","ImportSemaphore","正常系","外部セマフォがインポートできること","サポートされているhandleType","ImportSemaphore(handle)","IVulkanExternalSemaphoreが返却されること","高","セマフォインポート"
"133","UT-VLK-133","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","VulkanExternalObjectsFeature","ImportSemaphore","異常系","未サポートhandleTypeでNotSupportedExceptionがスローされること","未サポートhandleType","ImportSemaphore(unsupportedHandle)","NotSupportedExceptionがスローされること","高","未サポートハンドル"
"134","UT-VLK-134","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedSemaphore","Handle","正常系","セマフォハンドルが取得できること","有効なsemaphore","Handle","ulong値が返却されること","中","ハンドル取得"
"135","UT-VLK-135","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedSemaphore","Handle","異常系","Dispose後にObjectDisposedExceptionがスローされること","Dispose済み","Handle","ObjectDisposedExceptionがスローされること","高","解放後アクセス"
"136","UT-VLK-136","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedSemaphore","SubmitWaitSemaphore","正常系","待機セマフォがサブミットされること","有効なsemaphore","SubmitWaitSemaphore()","コマンドバッファがサブミットされること","高","待機サブミット"
"137","UT-VLK-137","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedSemaphore","SubmitSignalSemaphore","正常系","シグナルセマフォがサブミットされること","有効なsemaphore","SubmitSignalSemaphore()","コマンドバッファがサブミットされること","高","シグナルサブミット"
"138","UT-VLK-138","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedSemaphore","Dispose","正常系","セマフォが解放されること","有効なsemaphore","Dispose()","_sem==nullになること","高","リソース解放"
"139","UT-VLK-139","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","Info","正常系","VulkanImageInfoが取得できること","有効なimage","Info","ImageInfoが返却されること","中","情報取得"
"140","UT-VLK-140","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","コンストラクタ","正常系","B8G8R8A8UNorm形式でイメージが作成されること","format=B8G8R8A8UNorm","new ImportedImage(context, pool, handle, properties)","Format==VK_FORMAT_B8G8R8A8_UNORMであること","高","フォーマット変換"
"141","UT-VLK-141","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","コンストラクタ","正常系","R8G8B8A8UNorm形式でイメージが作成されること","format=R8G8B8A8UNorm","new ImportedImage(context, pool, handle, properties)","Format==VK_FORMAT_R8G8B8A8_UNORMであること","高","フォーマット変換"
"142","UT-VLK-142","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","コンストラクタ","異常系","未サポートフォーマットでArgumentExceptionがスローされること","format=未サポート","new ImportedImage(context, pool, handle, properties)","ArgumentExceptionがスローされること","高","フォーマット検証"
"143","UT-VLK-143","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","CreateMemory","正常系","外部メモリがインポートされること","有効なhandle","CreateMemory(image, size, memoryTypeBits)","VkDeviceMemoryが返却されること","高","メモリインポート"
"144","UT-VLK-144","src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs","ImportedImage","CreateMemory","異常系","メモリサイズ不一致でExceptionがスローされること","MemorySize!=size","CreateMemory(image, wrongSize, memoryTypeBits)","Exception(""Invalid memory size"")がスローされること","高","サイズ検証"
"145","UT-VLK-145","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","コンストラクタ","正常系","文字列配列からバッファ配列が作成されること","有効なstrings","new Utf8BufferArray([""test1"", ""test2""])","Count==2であること","中","初期化"
"146","UT-VLK-146","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","コンストラクタ","境界値","空配列から作成できること","空配列","new Utf8BufferArray([])","Count==0であること","中","空配列"
"147","UT-VLK-147","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","Count","正常系","正しいカウントが返却されること","3要素のリスト","Count","3が返却されること","低","カウント確認"
"148","UT-VLK-148","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","UCount","正常系","uint型でカウントが返却されること","3要素のリスト","UCount","3u が返却されること","低","unsignedカウント"
"149","UT-VLK-149","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","Dispose","正常系","すべてのバッファとポインタが解放されること","有効なバッファ配列","Dispose()","_bufferArray==null, _buffers.Count==0になること","高","リソース解放"
"150","UT-VLK-150","src/Avalonia.Vulkan/Interop/Utf8BufferArray.cs","Utf8BufferArray","暗黙変換","正常系","byte**への暗黙変換が正しく動作すること","有効なバッファ配列","byte** ptr = array","null以外のポインタが返却されること","中","型変換"
"151","UT-VLK-151","src/Avalonia.Vulkan/Interop/VulkanDebugLogger.cs","VulkanDebugLogger","WriteLogEvent","正常系","エラーレベルのログが出力されること","有効なコールバックデータ","messageSeverity=ERROR","LogEventLevel.Errorでログが出力されること","中","エラーログ"
"152","UT-VLK-152","src/Avalonia.Vulkan/Interop/VulkanDebugLogger.cs","VulkanDebugLogger","WriteLogEvent","正常系","警告レベルのログが出力されること","有効なコールバックデータ","messageSeverity=WARNING","LogEventLevel.Warningでログが出力されること","中","警告ログ"
"153","UT-VLK-153","src/Avalonia.Vulkan/Interop/VulkanDebugLogger.cs","VulkanDebugLogger","WriteLogEvent","正常系","常に0が返却されること","なし","WriteLogEvent(...)","0が返却されること","低","戻り値確認"
"154","UT-VLK-154","src/Avalonia.Vulkan/Interop/VulkanDebugLogger.cs","VulkanDebugLogger","CallbackPtr","正常系","有効な関数ポインタが返却されること","なし","CallbackPtr","IntPtr.Zero以外が返却されること","中","ポインタ取得"
