private static Job WithCore(this Job job, Action <Job> updateCallback) { var hasId = job.HasValue(Job.IdCharacteristic); var newJob = hasId ? new Job(job.Id, job) : new Job(job); updateCallback(newJob); return(newJob); }
public static void Test02Modify() { var j = new Job("SomeId"); Equal(j.Id, "SomeId"); Equal(j.Env.Platform, Platform.AnyCpu); Equal(j.Run.LaunchCount, 0); False(j.HasValue(EnvMode.PlatformCharacteristic)); False(j.Env.HasValue(EnvMode.PlatformCharacteristic)); False(j.HasValue(RunMode.LaunchCountCharacteristic)); False(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "Default"); AssertProperties(j.Env, "Default"); // 1. change values j.Env.Platform = Platform.X64; j.Run.LaunchCount = 1; Equal(j.Id, "SomeId"); Equal(j.Env.Platform, Platform.X64); Equal(j.Run.LaunchCount, 1); True(j.HasValue(EnvMode.PlatformCharacteristic)); True(j.Env.HasValue(EnvMode.PlatformCharacteristic)); True(j.HasValue(RunMode.LaunchCountCharacteristic)); True(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "Platform=X64, LaunchCount=1"); AssertProperties(j.Env, "Platform=X64"); AssertProperties(j.Run, "LaunchCount=1"); // 2. reset Env mode (hack via Characteristic setting) var oldEnv = j.Env; Job.EnvCharacteristic[j] = new EnvMode(); Equal(j.Id, "SomeId"); Equal(j.Env.Platform, Platform.AnyCpu); Equal(j.Run.LaunchCount, 1); False(j.HasValue(EnvMode.PlatformCharacteristic)); False(j.Env.HasValue(EnvMode.PlatformCharacteristic)); True(j.HasValue(RunMode.LaunchCountCharacteristic)); True(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "LaunchCount=1"); AssertProperties(j.Env, "Default"); AssertProperties(j.Run, "LaunchCount=1"); // 2.1 proof that oldEnv was the same Equal(j.Id, "SomeId"); Equal(oldEnv.Platform, Platform.X64); True(oldEnv.HasValue(EnvMode.PlatformCharacteristic)); Equal(oldEnv.Id, "Platform=X64"); // 3. update Env mode (hack via Characteristic setting) Job.EnvCharacteristic[j] = new EnvMode() { Platform = Platform.X86 }; Equal(j.Id, "SomeId"); Equal(j.Env.Platform, Platform.X86); Equal(j.Run.LaunchCount, 1); True(j.HasValue(EnvMode.PlatformCharacteristic)); True(j.Env.HasValue(EnvMode.PlatformCharacteristic)); True(j.HasValue(RunMode.LaunchCountCharacteristic)); True(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "Platform=X86, LaunchCount=1"); AssertProperties(j.Env, "Platform=X86"); AssertProperties(j.Run, "LaunchCount=1"); // 4. Freeze-unfreeze: j = j.Freeze().UnfreezeCopy(); Equal(j.Id, "Platform=X86, LaunchCount=1"); Equal(j.Env.Platform, Platform.X86); Equal(j.Run.LaunchCount, 1); True(j.HasValue(EnvMode.PlatformCharacteristic)); True(j.Env.HasValue(EnvMode.PlatformCharacteristic)); True(j.HasValue(RunMode.LaunchCountCharacteristic)); True(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "Platform=X86, LaunchCount=1"); AssertProperties(j.Env, "Platform=X86"); AssertProperties(j.Run, "LaunchCount=1"); // 5. Test .With extensions j = j.Freeze() .WithId("NewId"); Equal(j.Id, "NewId"); // id set j = j.Freeze() .With(Platform.X64) .WithLaunchCount(2); Equal(j.Id, "Platform=X64, LaunchCount=2"); // id lost Equal(j.Env.Platform, Platform.X64); Equal(j.Run.LaunchCount, 2); True(j.HasValue(EnvMode.PlatformCharacteristic)); True(j.Env.HasValue(EnvMode.PlatformCharacteristic)); True(j.HasValue(RunMode.LaunchCountCharacteristic)); True(j.Run.HasValue(RunMode.LaunchCountCharacteristic)); AssertProperties(j, "Platform=X64, LaunchCount=2"); AssertProperties(j.Env, "Platform=X64"); AssertProperties(j.Run, "LaunchCount=2"); }
public static void Test03IdDoesNotFlow() { var j = new Job(EnvMode.LegacyJitX64, RunMode.Long); // id will not flow, new Job False(j.HasValue(JobMode.IdCharacteristic)); False(j.Env.HasValue(JobMode.IdCharacteristic)); Job.EnvCharacteristic[j] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow False(j.HasValue(JobMode.IdCharacteristic)); False(j.Env.HasValue(JobMode.IdCharacteristic)); var c = new CharacteristicSet(EnvMode.LegacyJitX64, RunMode.Long); // id will not flow, new CharacteristicSet False(c.HasValue(JobMode.IdCharacteristic)); Job.EnvCharacteristic[c] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow False(c.HasValue(JobMode.IdCharacteristic)); JobMode.IdCharacteristic[c] = "MyId"; // id set explicitly Equal(c.Id, "MyId"); j = new Job("MyId", EnvMode.LegacyJitX64, RunMode.Long); // id set explicitly Equal(j.Id, "MyId"); Equal(j.Env.Id, "MyId"); Job.EnvCharacteristic[j] = EnvMode.LegacyJitX86.UnfreezeCopy(); // id will not flow Equal(j.Id, "MyId"); Equal(j.Env.Id, "MyId"); j = j.With(Jit.RyuJit); // id will not flow False(j.HasValue(JobMode.IdCharacteristic)); }