From 8efdc8720c79dc1e67ec300a0446c60d0ae70b72 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 22 Mar 2026 23:45:22 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20review=20fixes=20=E2=80=94=20culture-inv?= =?UTF-8?q?ariant=20formatting,=20sealed=20config,=20threshold=20boundary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use CultureInfo.InvariantCulture in CoordinateFormatter, SpeedClassifier, and CincinnatiPreambleWriter to prevent locale-dependent G-code output - Make CincinnatiPostConfig sealed per spec - Fix SpeedClassifier.Classify threshold to >= (matching spec) Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs | 2 +- OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs | 2 +- OpenNest.Posts.Cincinnati/CoordinateFormatter.cs | 3 ++- OpenNest.Posts.Cincinnati/SpeedClassifier.cs | 4 ++-- OpenNest.Tests/Cincinnati/SpeedClassifierTests.cs | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs b/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs index d651210..6bee170 100644 --- a/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs +++ b/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs @@ -88,7 +88,7 @@ namespace OpenNest.Posts.Cincinnati /// Configuration for Cincinnati post processor. /// Defines machine-specific parameters, output format, and cutting strategies. /// - public class CincinnatiPostConfig + public sealed class CincinnatiPostConfig { /// /// Gets or sets the configuration name/identifier. diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs b/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs index 8cbf0c0..edd973b 100644 --- a/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs +++ b/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs @@ -24,7 +24,7 @@ public sealed class CincinnatiPreambleWriter { w.WriteLine(CoordinateFormatter.Comment($"NEST {nestName}")); w.WriteLine(CoordinateFormatter.Comment($"CONFIGURATION - {_config.ConfigurationName}")); - w.WriteLine(CoordinateFormatter.Comment(DateTime.Now.ToString("MM-dd-yyyy hh:mm:ss tt"))); + w.WriteLine(CoordinateFormatter.Comment(DateTime.Now.ToString("MM-dd-yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture))); if (!string.IsNullOrEmpty(materialDescription)) w.WriteLine(CoordinateFormatter.Comment($"Material = {materialDescription}")); diff --git a/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs b/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs index 592e170..0397026 100644 --- a/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs +++ b/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs @@ -13,7 +13,8 @@ namespace OpenNest.Posts.Cincinnati public string FormatCoord(double value) { - return System.Math.Round(value, _accuracy).ToString(_format); + return System.Math.Round(value, _accuracy) + .ToString(_format, System.Globalization.CultureInfo.InvariantCulture); } public static string Comment(string text) => $"( {text} )"; diff --git a/OpenNest.Posts.Cincinnati/SpeedClassifier.cs b/OpenNest.Posts.Cincinnati/SpeedClassifier.cs index 6c7e66c..f7b6a4a 100644 --- a/OpenNest.Posts.Cincinnati/SpeedClassifier.cs +++ b/OpenNest.Posts.Cincinnati/SpeedClassifier.cs @@ -8,7 +8,7 @@ namespace OpenNest.Posts.Cincinnati public string Classify(double contourLength, double sheetDiagonal) { var ratio = contourLength / sheetDiagonal; - if (ratio > FastThreshold) return "FAST"; + if (ratio >= FastThreshold) return "FAST"; if (ratio <= SlowThreshold) return "SLOW"; return "MEDIUM"; } @@ -22,7 +22,7 @@ namespace OpenNest.Posts.Cincinnati { // Cincinnati convention: no leading zero for values < 1 (e.g., ".8702" not "0.8702") var rounded = System.Math.Round(value, 4); - var str = rounded.ToString("0.####"); + var str = rounded.ToString("0.####", System.Globalization.CultureInfo.InvariantCulture); if (rounded > 0 && rounded < 1 && str.StartsWith("0.")) return str.Substring(1); return str; diff --git a/OpenNest.Tests/Cincinnati/SpeedClassifierTests.cs b/OpenNest.Tests/Cincinnati/SpeedClassifierTests.cs index e88ef09..2956ce5 100644 --- a/OpenNest.Tests/Cincinnati/SpeedClassifierTests.cs +++ b/OpenNest.Tests/Cincinnati/SpeedClassifierTests.cs @@ -6,7 +6,8 @@ public class SpeedClassifierTests { [Theory] [InlineData(20.0, 10.0, "FAST")] - [InlineData(5.0, 10.0, "MEDIUM")] + [InlineData(5.0, 10.0, "FAST")] + [InlineData(4.9, 10.0, "MEDIUM")] [InlineData(0.5, 10.0, "SLOW")] public void Classify_ReturnsExpectedClass(double contourLength, double sheetDiagonal, string expected) {