From 05cf5dbebf42cbe3cc6a90db55d3e03f321b9316 Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Thu, 23 Jul 2026 00:30:05 +0200 Subject: [PATCH] Make unit relation ordering culture-invariant Extracted from angularsen/UnitsNet#1544 (https://github.com/angularsen/UnitsNet/pull/1544) because deterministic code generation is independent of the QuantityValue feature and improves the existing generator on its own. Moving it out reduces the size and conflict surface of the original PR. Changes: - Deserialize relation definitions without relying on SortedSet's current-culture comparer. - Normalize relations with an ordinal, case-insensitive immutable sorted set before parsing and rewriting the file. Tests: - No test cases changed; verified by running the full code generator and confirming it produced no unrelated generated-file changes. --- CodeGen/Generators/QuantityRelationsParser.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CodeGen/Generators/QuantityRelationsParser.cs b/CodeGen/Generators/QuantityRelationsParser.cs index 401c7e7b10..b0b0c133ec 100644 --- a/CodeGen/Generators/QuantityRelationsParser.cs +++ b/CodeGen/Generators/QuantityRelationsParser.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.IO; using System.Linq; using CodeGen.Exceptions; @@ -133,7 +134,8 @@ private static List ParseRelations(string rootDir, IReadOnlyDi try { var text = File.ReadAllText(relationsFileName); - var relationStrings = JsonConvert.DeserializeObject>(text) ?? []; + var relationStrings = JsonConvert.DeserializeObject>(text) + ?.ToImmutableSortedSet(StringComparer.OrdinalIgnoreCase) ?? []; var parsedRelations = relationStrings.Select(relationString => ParseRelation(relationString, quantities)).ToList(); @@ -210,4 +212,4 @@ Unit GetUnit(Quantity quantity, string? unitName) } } } -} \ No newline at end of file +}