public void SetUpSteps() { AddStep("create control", () => { modDifficultyAdjust = new OsuModDifficultyAdjust(); Child = new Container { Size = new Vector2(300), Anchor = Anchor.Centre, Origin = Anchor.Centre, Children = new Drawable[] { new Box { Colour = Color4.Black, RelativeSizeAxes = Axes.Both, }, new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, ChildrenEnumerable = modDifficultyAdjust.CreateSettingsControls(), }, } }; }); }
public void TestStarDifficultyAdjustHashCodeConflict() { OsuModDifficultyAdjust difficultyAdjust = null; AddStep("set computation function", () => difficultyCache.ComputeDifficulty = lookup => { var modDifficultyAdjust = (ModDifficultyAdjust)lookup.OrderedMods.SingleOrDefault(mod => mod is ModDifficultyAdjust); return(new StarDifficulty(BASE_STARS * (modDifficultyAdjust?.OverallDifficulty.Value ?? 1), 0)); }); AddStep("change selected mod to DA", () => SelectedMods.Value = new[] { difficultyAdjust = new OsuModDifficultyAdjust() }); AddUntilStep($"star difficulty -> {BASE_STARS}", () => starDifficultyBindable.Value?.Stars == BASE_STARS); AddStep("change DA difficulty to 0.5", () => difficultyAdjust.OverallDifficulty.Value = 0.5f); AddUntilStep($"star difficulty -> {BASE_STARS * 0.5f}", () => starDifficultyBindable.Value?.Stars == BASE_STARS / 2); // hash code of 0 (the value) conflicts with the hash code of null (the initial/default value). // it's important that the mod reference and its underlying bindable references stay the same to demonstrate this failure. AddStep("change DA difficulty to 0", () => difficultyAdjust.OverallDifficulty.Value = 0); AddUntilStep("star difficulty -> 0", () => starDifficultyBindable.Value?.Stars == 0); }