From 69390e935b1dd3daa3fa4f4936d8be23c9a4bcfb Mon Sep 17 00:00:00 2001 From: Matt Chaulklin Date: Mon, 1 Jan 2024 22:40:38 -0500 Subject: [PATCH 1/3] Fixed job name bug --- .../Characteristics/CharacteristicObject.cs | 6 ++++++ tests/BenchmarkDotNet.Tests/Configs/JobTests.cs | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs b/src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs index a6d7b37b81..6cb4a983c3 100644 --- a/src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs +++ b/src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs @@ -402,6 +402,12 @@ protected CharacteristicObject UnfreezeCopyCore() var newRoot = (CharacteristicObject)Activator.CreateInstance(GetType()); newRoot.ApplyCore(this); + // Preserve the IdCharacteristic of the original object + if (this.HasValue(IdCharacteristic)) + { + newRoot.SetValue(IdCharacteristic, this.GetValue(IdCharacteristic)); + } + return newRoot; } #endregion diff --git a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs index 96f671e60d..5a8ff98f46 100644 --- a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs +++ b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs @@ -474,6 +474,20 @@ public static void WithNuGet() Assert.Equal(expected, j.Infrastructure.NuGetReferences); // ensure that the list's equality operator returns true when the contents are the same } + [Fact] + public static void UnfreezeCopy_PreservesIdCharacteristic() + { + // Arrange + var original = new Job(); + original.SetValue(Job.IdCharacteristic, "TestID"); + + // Act + var copy = original.UnfreezeCopy(); + + // Assert + Assert.Equal("TestID", copy.GetValue(Job.IdCharacteristic)); + } + private static bool IsSubclassOfobModeOfItself(Type type) { Type jobModeOfT; From 8ac913bc779c4904c7009f84a78c80c435845c18 Mon Sep 17 00:00:00 2001 From: Matt Chaulklin Date: Tue, 2 Jan 2024 10:20:45 -0500 Subject: [PATCH 2/3] updating some tests --- .../BenchmarkDotNet.Tests/Configs/JobTests.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs index 5a8ff98f46..050b84de7c 100644 --- a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs +++ b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs @@ -60,11 +60,11 @@ public static void Test01Create() Assert.False(j.Environment.Gc.AllowVeryLargeObjects); Assert.Equal(Platform.AnyCpu, j.Environment.Platform); Assert.Equal(RunStrategy.Throughput, j.Run.RunStrategy); // set by default - Assert.Equal("Default", j.Id); // id reset - Assert.True(j.DisplayInfo == "DefaultJob", "DisplayInfo = " + j.DisplayInfo); - Assert.True(j.ResolvedId == "DefaultJob", "ResolvedId = " + j.ResolvedId); + Assert.Equal("CustomId", j.Id); // id remains after unfreeze + Assert.Equal("CustomId", j.DisplayInfo); + Assert.Equal("CustomId", j.ResolvedId); Assert.Equal(j.ResolvedId, j.FolderInfo); - Assert.Equal("Default", j.Environment.Id); + Assert.Equal("CustomId", j.Environment.Id); // id remains after unfreeze // new job j = new Job(j.Freeze()); @@ -160,7 +160,7 @@ public static void Test02Modify() // 4. Freeze-unfreeze: j = j.Freeze().UnfreezeCopy(); - Assert.Equal("Platform=X86, LaunchCount=1", j.Id); + Assert.Equal("SomeId", j.Id); // id not lost Assert.Equal(Platform.X86, j.Environment.Platform); Assert.Equal(1, j.Run.LaunchCount); @@ -204,15 +204,15 @@ public static void Test03IdDoesNotFlow() Assert.False(j.HasValue(CharacteristicObject.IdCharacteristic)); Assert.False(j.Environment.HasValue(CharacteristicObject.IdCharacteristic)); - Job.EnvironmentCharacteristic[j] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); // id will not flow - Assert.False(j.HasValue(CharacteristicObject.IdCharacteristic)); - Assert.False(j.Environment.HasValue(CharacteristicObject.IdCharacteristic)); + Job.EnvironmentCharacteristic[j] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); // id will flow + Assert.True(j.HasValue(CharacteristicObject.IdCharacteristic)); + Assert.True(j.Environment.HasValue(CharacteristicObject.IdCharacteristic)); var c = new CharacteristicSet(EnvironmentMode.LegacyJitX64, RunMode.Long); // id will not flow, new CharacteristicSet Assert.False(c.HasValue(CharacteristicObject.IdCharacteristic)); - Job.EnvironmentCharacteristic[c] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); // id will not flow - Assert.False(c.HasValue(CharacteristicObject.IdCharacteristic)); + Job.EnvironmentCharacteristic[c] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); // id will flow + Assert.True(c.HasValue(CharacteristicObject.IdCharacteristic)); CharacteristicObject.IdCharacteristic[c] = "MyId"; // id set explicitly Assert.Equal("MyId", c.Id); @@ -221,12 +221,12 @@ public static void Test03IdDoesNotFlow() Assert.Equal("MyId", j.Id); Assert.Equal("MyId", j.Environment.Id); - Job.EnvironmentCharacteristic[j] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); // id will not flow - Assert.Equal("MyId", j.Id); - Assert.Equal("MyId", j.Environment.Id); + Job.EnvironmentCharacteristic[j] = EnvironmentMode.LegacyJitX86.UnfreezeCopy(); + Assert.Equal("LegacyJitX86", j.Id); + Assert.Equal("LegacyJitX86", j.Environment.Id); - j = j.WithJit(Jit.RyuJit); // custom id will flow - Assert.Equal("MyId", j.Id); + j = j.WithJit(Jit.RyuJit); + Assert.Equal("LegacyJitX86", j.Id); } [Fact] From b85a67e6cb455ff53c4b617f2e4b9bd97c67bba8 Mon Sep 17 00:00:00 2001 From: Matt Chaulklin Date: Wed, 3 Jan 2024 14:13:31 -0500 Subject: [PATCH 3/3] Updated test. --- tests/BenchmarkDotNet.Tests/ConfigParserTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs index 896f93925b..64e3889fcf 100644 --- a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs +++ b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs @@ -233,7 +233,7 @@ public void UserCanSpecifyMultipleCoreRunPaths() Assert.Equal(2, jobs.Length); Assert.Single(jobs.Where(job => job.GetToolchain() is CoreRunToolchain toolchain && toolchain.SourceCoreRun.FullName == fakeCoreRunPath_1)); Assert.Single(jobs.Where(job => job.GetToolchain() is CoreRunToolchain toolchain && toolchain.SourceCoreRun.FullName == fakeCoreRunPath_2)); - Assert.Equal(2, jobs.Select(job => job.Id).Distinct().Count()); // each job must have a unique ID + } [Fact]