From 736f05a0232a31b0cb32e3105daf0e37d30777c4 Mon Sep 17 00:00:00 2001 From: wagesj45 Date: Thu, 21 Aug 2025 03:52:26 -0500 Subject: [PATCH] Fix stdlib typos and logic bugs: Round precision arg; rename Trancate->Truncate; correct degrees/radians conversion; wrapangle shift into range; Random rands add lower; correct gcd/lcm names/logic; fix 13! constant; clarify atan2 args; update initializer registrations --- src/StandardLibrary/Functions/Angle/Degrees.cs | 3 ++- src/StandardLibrary/Functions/Angle/Radians.cs | 3 ++- src/StandardLibrary/Functions/Angle/WrapAngle.cs | 4 ++-- src/StandardLibrary/Functions/NumberTheory/Factorial.cs | 2 +- .../Functions/NumberTheory/GreatedCommonDenomitator.cs | 5 ++--- .../Functions/NumberTheory/LeastCommonMultiple.cs | 7 +++++-- .../Functions/Random/RandomUniformSpread.cs | 2 +- src/StandardLibrary/Functions/Rounding/Round.cs | 3 ++- src/StandardLibrary/Functions/Rounding/Truncate.cs | 2 +- src/StandardLibrary/Functions/Trigonometry/Atan2.cs | 4 ++-- src/StandardLibrary/Initializer.cs | 4 ++-- 11 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/StandardLibrary/Functions/Angle/Degrees.cs b/src/StandardLibrary/Functions/Angle/Degrees.cs index ac2e53f..222153b 100644 --- a/src/StandardLibrary/Functions/Angle/Degrees.cs +++ b/src/StandardLibrary/Functions/Angle/Degrees.cs @@ -26,7 +26,8 @@ var input = _args[0].Value; decimal value = Convert.ToDecimal(input.Value); - return new FunctionValue(FunctionValueType.Numeric, double.DegreesToRadians((double)value)); + // Convert radians to degrees + return new FunctionValue(FunctionValueType.Numeric, double.RadiansToDegrees((double)value)); }); } } diff --git a/src/StandardLibrary/Functions/Angle/Radians.cs b/src/StandardLibrary/Functions/Angle/Radians.cs index 07c69f6..ebcc3d6 100644 --- a/src/StandardLibrary/Functions/Angle/Radians.cs +++ b/src/StandardLibrary/Functions/Angle/Radians.cs @@ -26,7 +26,8 @@ var input = _args[0].Value; decimal value = Convert.ToDecimal(input.Value); - return new FunctionValue(FunctionValueType.Numeric, double.RadiansToDegrees((double)value)); + // Convert degrees to radians + return new FunctionValue(FunctionValueType.Numeric, double.DegreesToRadians((double)value)); }); } } diff --git a/src/StandardLibrary/Functions/Angle/WrapAngle.cs b/src/StandardLibrary/Functions/Angle/WrapAngle.cs index 987166e..d1511bb 100644 --- a/src/StandardLibrary/Functions/Angle/WrapAngle.cs +++ b/src/StandardLibrary/Functions/Angle/WrapAngle.cs @@ -31,12 +31,12 @@ var inputPeriodEnd = _args[2].Value; decimal periodEnd = Convert.ToDecimal(inputPeriodEnd.Value); - // Perform modulo. + // Perform modulo and shift into [periodStart, periodEnd) decimal width = periodEnd - periodStart; decimal modulus = value % width; modulus = modulus < 0 ? modulus + width : modulus; - return new FunctionValue(FunctionValueType.Numeric, modulus); + return new FunctionValue(FunctionValueType.Numeric, periodStart + modulus); }); } } diff --git a/src/StandardLibrary/Functions/NumberTheory/Factorial.cs b/src/StandardLibrary/Functions/NumberTheory/Factorial.cs index fb9c2cf..a8771a3 100644 --- a/src/StandardLibrary/Functions/NumberTheory/Factorial.cs +++ b/src/StandardLibrary/Functions/NumberTheory/Factorial.cs @@ -37,7 +37,7 @@ namespace CSMic.StandardLibrary.Functions.NumberTheory /* 10 */ 3628800, /* 11 */ 39916800, /* 12 */ 479001600, - /* 13 */ 62207020800, + /* 13 */ 6227020800, /* 14 */ 87178291200, /* 15 */ 1307674368000, /* 16 */ 20922789888000, diff --git a/src/StandardLibrary/Functions/NumberTheory/GreatedCommonDenomitator.cs b/src/StandardLibrary/Functions/NumberTheory/GreatedCommonDenomitator.cs index 0d1cfe3..5940865 100644 --- a/src/StandardLibrary/Functions/NumberTheory/GreatedCommonDenomitator.cs +++ b/src/StandardLibrary/Functions/NumberTheory/GreatedCommonDenomitator.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace CSMic.StandardLibrary.Functions.NumberTheory { - public class GreatestCommonDevisor : FunctionBase, ICodedFunction + public class GreatestCommonDivisor : FunctionBase, ICodedFunction { public string Name { @@ -46,9 +46,8 @@ namespace CSMic.StandardLibrary.Functions.NumberTheory } decimal gcd = EuclideanAlgorithm(first, second); - decimal lcd = (first * second) / gcd; - return new FunctionValue(FunctionValueType.Numeric, lcd); + return new FunctionValue(FunctionValueType.Numeric, gcd); }); } diff --git a/src/StandardLibrary/Functions/NumberTheory/LeastCommonMultiple.cs b/src/StandardLibrary/Functions/NumberTheory/LeastCommonMultiple.cs index 54ae01f..7a93993 100644 --- a/src/StandardLibrary/Functions/NumberTheory/LeastCommonMultiple.cs +++ b/src/StandardLibrary/Functions/NumberTheory/LeastCommonMultiple.cs @@ -13,7 +13,7 @@ namespace CSMic.StandardLibrary.Functions.NumberTheory { get { - return "gcd"; + return "lcm"; } } @@ -45,7 +45,10 @@ namespace CSMic.StandardLibrary.Functions.NumberTheory return FunctionValue.ZERO; } - return new FunctionValue(FunctionValueType.Numeric, EuclideanAlgorithm(first, second)); + decimal gcd = EuclideanAlgorithm(first, second); + decimal lcm = (first * second) / gcd; + + return new FunctionValue(FunctionValueType.Numeric, lcm); }); } diff --git a/src/StandardLibrary/Functions/Random/RandomUniformSpread.cs b/src/StandardLibrary/Functions/Random/RandomUniformSpread.cs index 97e7293..97bddd0 100644 --- a/src/StandardLibrary/Functions/Random/RandomUniformSpread.cs +++ b/src/StandardLibrary/Functions/Random/RandomUniformSpread.cs @@ -36,7 +36,7 @@ namespace CSMic.StandardLibrary.Functions.Random return FunctionValue.ZERO; } - return new FunctionValue(FunctionValueType.Numeric, NextDecimal() * (upper - lower)); + return new FunctionValue(FunctionValueType.Numeric, lower + NextDecimal() * (upper - lower)); }); } } diff --git a/src/StandardLibrary/Functions/Rounding/Round.cs b/src/StandardLibrary/Functions/Rounding/Round.cs index 18305a9..7c8575d 100644 --- a/src/StandardLibrary/Functions/Rounding/Round.cs +++ b/src/StandardLibrary/Functions/Rounding/Round.cs @@ -16,6 +16,7 @@ get { yield return new FunctionArgument("value", FunctionValue.NUMBER); + yield return new FunctionArgument("precision", FunctionValue.NUMBER); } } @@ -26,7 +27,7 @@ var inputValue = _args[0].Value; decimal value = Convert.ToDecimal(inputValue.Value); var inputPrecision = _args[1].Value; - decimal precision = Convert.ToDecimal(inputValue.Value); + decimal precision = Convert.ToDecimal(inputPrecision.Value); precision = Math.Round(precision); int precisionInt = Convert.ToInt32(precision); diff --git a/src/StandardLibrary/Functions/Rounding/Truncate.cs b/src/StandardLibrary/Functions/Rounding/Truncate.cs index ac1c483..9917a7f 100644 --- a/src/StandardLibrary/Functions/Rounding/Truncate.cs +++ b/src/StandardLibrary/Functions/Rounding/Truncate.cs @@ -1,6 +1,6 @@ namespace CSMic.StandardLibrary.Functions.Rounding { - public class Trancate : FunctionBase, ICodedFunction + public class Truncate : FunctionBase, ICodedFunction { public string Name diff --git a/src/StandardLibrary/Functions/Trigonometry/Atan2.cs b/src/StandardLibrary/Functions/Trigonometry/Atan2.cs index 0e1e389..22f91e2 100644 --- a/src/StandardLibrary/Functions/Trigonometry/Atan2.cs +++ b/src/StandardLibrary/Functions/Trigonometry/Atan2.cs @@ -15,8 +15,8 @@ { get { - yield return new FunctionArgument("value", FunctionValue.NUMBER); - yield return new FunctionArgument("value", FunctionValue.NUMBER); + yield return new FunctionArgument("y", FunctionValue.NUMBER); + yield return new FunctionArgument("x", FunctionValue.NUMBER); } } diff --git a/src/StandardLibrary/Initializer.cs b/src/StandardLibrary/Initializer.cs index 4377e30..386514e 100644 --- a/src/StandardLibrary/Initializer.cs +++ b/src/StandardLibrary/Initializer.cs @@ -66,7 +66,7 @@ namespace CSMic.StandardLibrary inputInterpreter.RegisterFunction(new Factorial()); inputInterpreter.RegisterFunction(new BinomialCoefficient()); inputInterpreter.RegisterFunction(new Permutations()); - inputInterpreter.RegisterFunction(new GreatestCommonDevisor()); + inputInterpreter.RegisterFunction(new GreatestCommonDivisor()); inputInterpreter.RegisterFunction(new LeastCommonMultiple()); } @@ -80,7 +80,7 @@ namespace CSMic.StandardLibrary inputInterpreter.RegisterFunction(new Floor()); inputInterpreter.RegisterFunction(new Ceiling()); inputInterpreter.RegisterFunction(new Fractional()); - inputInterpreter.RegisterFunction(new Trancate()); + inputInterpreter.RegisterFunction(new Truncate()); inputInterpreter.RegisterFunction(new Round()); inputInterpreter.RegisterFunction(new Clamp()); }