From 747d39072e3256810ff7f00b4c97384f4ed3f542 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 3 Jul 2026 14:26:01 +0800 Subject: [PATCH] =?UTF-8?q?test(ai):=20BrainGraph=20=E7=AC=AC1=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E6=94=B6=E5=B0=BE=E2=80=94=E2=80=94flyweight=20?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E6=B5=8B=E8=AF=95=20+=20=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Tests/EditMode/AI/AiScriptTests.cs | 30 +++++++++++++++++++ .../Tests/EditMode/AI/AiScriptTests.cs.meta | 11 +++++++ 2 files changed, 41 insertions(+) create mode 100644 Assets/Tests/EditMode/AI/AiScriptTests.cs create mode 100644 Assets/Tests/EditMode/AI/AiScriptTests.cs.meta diff --git a/Assets/Tests/EditMode/AI/AiScriptTests.cs b/Assets/Tests/EditMode/AI/AiScriptTests.cs new file mode 100644 index 00000000..efb6a863 --- /dev/null +++ b/Assets/Tests/EditMode/AI/AiScriptTests.cs @@ -0,0 +1,30 @@ +using NUnit.Framework; +using BaseGames.AI; + +namespace BaseGames.Tests.EditMode.AI +{ + public class AiScriptTests + { + sealed class SampleAi : AiScript + { + public int BuildCount; + protected override void Build(BrainBuilder b) + { + BuildCount++; + b.Entry("A"); + b.State("A").To("B").When(c => c.Sensor.SeesPlayer(), "SeesPlayer"); + b.State("B"); + } + } + + [Test] + public void GetOrBuildGraph_ReturnsSameSharedInstance() + { + var script = new SampleAi(); + var g1 = script.GetOrBuildGraph(); + var g2 = script.GetOrBuildGraph(); + Assert.AreSame(g1, g2); // flyweight:同一引用 + Assert.AreEqual(1, script.BuildCount); // 只构建一次 + } + } +} diff --git a/Assets/Tests/EditMode/AI/AiScriptTests.cs.meta b/Assets/Tests/EditMode/AI/AiScriptTests.cs.meta new file mode 100644 index 00000000..1689d607 --- /dev/null +++ b/Assets/Tests/EditMode/AI/AiScriptTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e6381340221cbb4c965e28d671c8a3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: