From b23ce583df74f185982a04e08b21d13e18c84974 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 14:13:14 +0300 Subject: [PATCH] Use Seed.Mix in speech-policy PickTopic tests after Roll01. Sequential integer seeds all roll ~0, so NoRude never saw a rude topic under free speech. Co-authored-by: Cursor --- tests/HSchool.Ai.Tests/TalkCirclesTests.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/HSchool.Ai.Tests/TalkCirclesTests.cs b/tests/HSchool.Ai.Tests/TalkCirclesTests.cs index 313d538..dc474b9 100644 --- a/tests/HSchool.Ai.Tests/TalkCirclesTests.cs +++ b/tests/HSchool.Ai.Tests/TalkCirclesTests.cs @@ -226,7 +226,7 @@ public class TalkCirclesTests var picker = Person("a", ["RussianLanguage"]); for (var i = 0; i < 80; i++) { - var id = TalkCircles.PickTopic(catalog, picker, age: 14, seed: i * 137, speechPolicy: SpeechPolicies.StudyOnly); + var id = TalkCircles.PickTopic(catalog, picker, age: 14, seed: Seed.Mix(i, 19, Seed.ApparelSalt), speechPolicy: SpeechPolicies.StudyOnly); Assert.NotNull(id); Assert.Contains(TopicTags.Study, catalog.Topics[id].Tags, StringComparer.Ordinal); } @@ -238,15 +238,16 @@ public class TalkCirclesTests var (catalog, _, _) = World(); var picker = Person("a", ["RussianLanguage"]); var rudeUnderFree = 0; - for (var i = 0; i < 11_000; i++) + for (var i = 0; i < 200; i++) { - var freeId = TalkCircles.PickTopic(catalog, picker, age: 14, seed: i, speechPolicy: SpeechPolicies.Free); + var seed = Seed.Mix(i, 23, Seed.ApparelSalt); + var freeId = TalkCircles.PickTopic(catalog, picker, age: 14, seed: seed, speechPolicy: SpeechPolicies.Free); if (freeId is not null && catalog.Topics[freeId].Tags.Contains(TopicTags.Rude, StringComparer.Ordinal)) { rudeUnderFree++; } - var filtered = TalkCircles.PickTopic(catalog, picker, age: 14, seed: i, speechPolicy: SpeechPolicies.NoRude); + var filtered = TalkCircles.PickTopic(catalog, picker, age: 14, seed: seed, speechPolicy: SpeechPolicies.NoRude); Assert.NotNull(filtered); Assert.DoesNotContain(TopicTags.Rude, catalog.Topics[filtered].Tags, StringComparer.Ordinal); }