From 7abf7a39605bc0293eab0c8834b1b49c52d3cd14 Mon Sep 17 00:00:00 2001 From: ike709 Date: Tue, 11 Feb 2025 01:21:44 -0600 Subject: [PATCH 1/7] Implement `values_product()` --- .../Tests/Builtins/values_product.dm | 9 +++++++++ DMCompiler/DMStandard/_Standard.dm | 1 + .../Procs/Native/DreamProcNative.cs | 1 + .../Procs/Native/DreamProcNativeRoot.cs | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 Content.Tests/DMProject/Tests/Builtins/values_product.dm diff --git a/Content.Tests/DMProject/Tests/Builtins/values_product.dm b/Content.Tests/DMProject/Tests/Builtins/values_product.dm new file mode 100644 index 0000000000..8387e4f167 --- /dev/null +++ b/Content.Tests/DMProject/Tests/Builtins/values_product.dm @@ -0,0 +1,9 @@ + +/proc/RunTest() + ASSERT(values_product(null) == 1) + ASSERT(values_product(list(5)) == 1) + ASSERT(values_product(list(a=2)) == 2) + ASSERT(values_product(list(a=2,b=0)) == 0) + ASSERT(values_product(list(a=2,b=null)) == 2) + ASSERT(values_product(list(a=2,b=list(c=5))) == 2) + ASSERT(values_product(list(a=2,b=4.4)) == 8.8) \ No newline at end of file diff --git a/DMCompiler/DMStandard/_Standard.dm b/DMCompiler/DMStandard/_Standard.dm index 5eabf6be5a..d4567d96ed 100644 --- a/DMCompiler/DMStandard/_Standard.dm +++ b/DMCompiler/DMStandard/_Standard.dm @@ -107,6 +107,7 @@ proc/typesof(Item1) as /list proc/uppertext(T as text) as text proc/url_decode(UrlText) as text proc/url_encode(PlainText, format = 0) as text +proc/values_product(Alist) as num proc/view(Dist = 5, Center = usr) as /list proc/viewers(Depth, Center = usr) as /list proc/walk(Ref, Dir, Lag = 0, Speed = 0) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs index 45d9737617..eaea70819f 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs @@ -108,6 +108,7 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) { objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_uppertext); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_decode); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_encode); + objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_product); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_view); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_viewers); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_walk); diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index e20346626c..59a0159300 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3108,6 +3108,25 @@ public static DreamValue NativeProc_url_encode(NativeProc.Bundle bundle, DreamOb return new DreamValue(HttpUtility.UrlEncode(plainText)); } + [DreamProc("values_product")] + [DreamProcParameter("Alist", Type = DreamValueTypeFlag.DreamObject)] + public static DreamValue NativeProc_values_product(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { + if (bundle.Arguments.Length != 1) throw new Exception("expected 1 argument"); + + DreamValue arg = bundle.GetArgument(0, "Alist"); + + float product = 1; // Default return is 1 for invalid args + + if (arg.TryGetValueAsDreamList(out var list)) { + var assocValues = list.GetAssociativeValues(); + foreach (var (_,value) in assocValues) { + if(value.TryGetValueAsFloat(out var valFloat)) product *= valFloat; + } + } + + return new DreamValue(product); + } + [DreamProc("view")] [DreamProcParameter("Dist", Type = DreamValueTypeFlag.Float, DefaultValue = 5)] [DreamProcParameter("Center", Type = DreamValueTypeFlag.DreamObject)] From d2b9e20c0638e5c94eca547c4717df14d06ffa76 Mon Sep 17 00:00:00 2001 From: ike709 Date: Tue, 11 Feb 2025 01:31:17 -0600 Subject: [PATCH 2/7] Implement `values_sum()` --- .../DMProject/Tests/Builtins/values_sum.dm | 9 ++++++++ DMCompiler/DMStandard/_Standard.dm | 1 + .../Procs/Native/DreamProcNative.cs | 1 + .../Procs/Native/DreamProcNativeRoot.cs | 21 ++++++++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 Content.Tests/DMProject/Tests/Builtins/values_sum.dm diff --git a/Content.Tests/DMProject/Tests/Builtins/values_sum.dm b/Content.Tests/DMProject/Tests/Builtins/values_sum.dm new file mode 100644 index 0000000000..0f139f590b --- /dev/null +++ b/Content.Tests/DMProject/Tests/Builtins/values_sum.dm @@ -0,0 +1,9 @@ + +/proc/RunTest() + ASSERT(values_sum(null) == 0) + ASSERT(values_sum(list(5)) == 0) + ASSERT(values_sum(list(a=2)) == 2) + ASSERT(values_sum(list(a=2,b=0)) == 2) + ASSERT(values_sum(list(a=2,b=null)) == 2) + ASSERT(values_sum(list(a=2,b=list(c=5))) == 2) + ASSERT(values_sum(list(a=2,b=4.4)) == 6.4) \ No newline at end of file diff --git a/DMCompiler/DMStandard/_Standard.dm b/DMCompiler/DMStandard/_Standard.dm index d4567d96ed..45effa8b85 100644 --- a/DMCompiler/DMStandard/_Standard.dm +++ b/DMCompiler/DMStandard/_Standard.dm @@ -108,6 +108,7 @@ proc/uppertext(T as text) as text proc/url_decode(UrlText) as text proc/url_encode(PlainText, format = 0) as text proc/values_product(Alist) as num +proc/values_sum(Alist) as num proc/view(Dist = 5, Center = usr) as /list proc/viewers(Depth, Center = usr) as /list proc/walk(Ref, Dir, Lag = 0, Speed = 0) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs index eaea70819f..431d72d79e 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs @@ -109,6 +109,7 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) { objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_decode); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_encode); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_product); + objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_sum); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_view); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_viewers); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_walk); diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index 59a0159300..b9a1ed7630 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3117,7 +3117,7 @@ public static DreamValue NativeProc_values_product(NativeProc.Bundle bundle, Dre float product = 1; // Default return is 1 for invalid args - if (arg.TryGetValueAsDreamList(out var list)) { + if (arg.TryGetValueAsDreamList(out var list) && list.IsAssociative) { var assocValues = list.GetAssociativeValues(); foreach (var (_,value) in assocValues) { if(value.TryGetValueAsFloat(out var valFloat)) product *= valFloat; @@ -3127,6 +3127,25 @@ public static DreamValue NativeProc_values_product(NativeProc.Bundle bundle, Dre return new DreamValue(product); } + [DreamProc("values_sum")] + [DreamProcParameter("Alist", Type = DreamValueTypeFlag.DreamObject)] + public static DreamValue NativeProc_values_sum(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { + if (bundle.Arguments.Length != 1) throw new Exception("expected 1 argument"); + + DreamValue arg = bundle.GetArgument(0, "Alist"); + + float sum = 0; // Default return is 0 for invalid args + + if (arg.TryGetValueAsDreamList(out var list) && list.IsAssociative) { + var assocValues = list.GetAssociativeValues(); + foreach (var (_,value) in assocValues) { + if(value.TryGetValueAsFloat(out var valFloat)) sum += valFloat; + } + } + + return new DreamValue(sum); + } + [DreamProc("view")] [DreamProcParameter("Dist", Type = DreamValueTypeFlag.Float, DefaultValue = 5)] [DreamProcParameter("Center", Type = DreamValueTypeFlag.DreamObject)] From 435a89a71dee03646b52b312731f2803be5b5b57 Mon Sep 17 00:00:00 2001 From: ike709 Date: Tue, 11 Feb 2025 01:53:43 -0600 Subject: [PATCH 3/7] Implement `values_dot()` --- .../DMProject/Tests/Builtins/values_dot.dm | 5 ++++ DMCompiler/DMStandard/_Standard.dm | 1 + .../Procs/Native/DreamProcNative.cs | 1 + .../Procs/Native/DreamProcNativeRoot.cs | 29 +++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 Content.Tests/DMProject/Tests/Builtins/values_dot.dm diff --git a/Content.Tests/DMProject/Tests/Builtins/values_dot.dm b/Content.Tests/DMProject/Tests/Builtins/values_dot.dm new file mode 100644 index 0000000000..8d78f0a188 --- /dev/null +++ b/Content.Tests/DMProject/Tests/Builtins/values_dot.dm @@ -0,0 +1,5 @@ + +/proc/RunTest() + ASSERT(values_dot(list(a=2.4,b=1,c=7),list(a=2,b=4,c=null)) == 8.8) + ASSERT(values_dot(list(),list(a=2,b=4)) == 0) + ASSERT(values_dot(list("a"),list(a=2,b=4)) == 0) \ No newline at end of file diff --git a/DMCompiler/DMStandard/_Standard.dm b/DMCompiler/DMStandard/_Standard.dm index 45effa8b85..2b4c887090 100644 --- a/DMCompiler/DMStandard/_Standard.dm +++ b/DMCompiler/DMStandard/_Standard.dm @@ -107,6 +107,7 @@ proc/typesof(Item1) as /list proc/uppertext(T as text) as text proc/url_decode(UrlText) as text proc/url_encode(PlainText, format = 0) as text +proc/values_dot(A, B) as num proc/values_product(Alist) as num proc/values_sum(Alist) as num proc/view(Dist = 5, Center = usr) as /list diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs index 431d72d79e..a10346476e 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs @@ -108,6 +108,7 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) { objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_uppertext); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_decode); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_encode); + objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_dot); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_product); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_sum); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_view); diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index b9a1ed7630..e2b4e0a586 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3108,6 +3108,35 @@ public static DreamValue NativeProc_url_encode(NativeProc.Bundle bundle, DreamOb return new DreamValue(HttpUtility.UrlEncode(plainText)); } + [DreamProc("values_dot")] + [DreamProcParameter("A", Type = DreamValueTypeFlag.DreamObject)] + [DreamProcParameter("B", Type = DreamValueTypeFlag.DreamObject)] + public static DreamValue NativeProc_values_dot(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { + if (bundle.Arguments.Length != 2) throw new Exception("expected 2 arguments"); + + DreamValue argA = bundle.GetArgument(0, "A"); + DreamValue argB = bundle.GetArgument(1, "B"); + + float sum = 0; // Default return is 0 for invalid args + + if (argA.TryGetValueAsDreamList(out var listA) && listA.IsAssociative && argB.TryGetValueAsDreamList(out var listB) && listB.IsAssociative) { + var aValues = listA.GetAssociativeValues(); + var bValues = listB.GetAssociativeValues(); + + // sum += valueA * valueB + // for each assoc value whose key exists in both lists + // and when both assoc values are floats + foreach (var (key,value) in aValues) { + if (value.TryGetValueAsFloat(out var aFloat) && bValues.TryGetValue(key, out var bVal) && + bVal.TryGetValueAsFloat(out var bFloat)) { + sum += (aFloat * bFloat); + } + } + } + + return new DreamValue(sum); + } + [DreamProc("values_product")] [DreamProcParameter("Alist", Type = DreamValueTypeFlag.DreamObject)] public static DreamValue NativeProc_values_product(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { From eb0d0f4d62b49e1161d495a00d8b9ba5724b30ec Mon Sep 17 00:00:00 2001 From: ike709 Date: Tue, 11 Feb 2025 03:59:06 -0600 Subject: [PATCH 4/7] Implements `values_cut_over()` and `values_cut_under()` --- .../DMProject/Tests/Builtins/values_cut.dm | 25 ++++++ DMCompiler/DMStandard/_Standard.dm | 2 + .../Procs/Native/DreamProcNative.cs | 2 + .../Procs/Native/DreamProcNativeRoot.cs | 78 +++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 Content.Tests/DMProject/Tests/Builtins/values_cut.dm diff --git a/Content.Tests/DMProject/Tests/Builtins/values_cut.dm b/Content.Tests/DMProject/Tests/Builtins/values_cut.dm new file mode 100644 index 0000000000..f5d371d5b9 --- /dev/null +++ b/Content.Tests/DMProject/Tests/Builtins/values_cut.dm @@ -0,0 +1,25 @@ + +/proc/RunTest() + var/list/one = list("a"=1, "b"=2, "c"=-3) + ASSERT(values_cut_under(one, 5, 1) == 3) + + var/list/two = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_under(two, 1) == 1) + + var/list/three = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_under(three, 1, TRUE) == 2) + + var/list/four = list("a"=1, "b"=2, "c"=-3) + ASSERT(values_cut_over(four, 5, 1) == 0) + + var/list/five = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_over(five, 1) == 1) + + var/list/six = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_over(six, 1, TRUE) == 2) + + var/list/seven = list("a", "b", "c") + ASSERT(values_cut_under(seven, -1, 0) == 3) + + var/list/eight = list("a"=1, "b", "c"=-3) + ASSERT(values_cut_under(eight, -1, 0) == 2) \ No newline at end of file diff --git a/DMCompiler/DMStandard/_Standard.dm b/DMCompiler/DMStandard/_Standard.dm index 2b4c887090..5472a453ff 100644 --- a/DMCompiler/DMStandard/_Standard.dm +++ b/DMCompiler/DMStandard/_Standard.dm @@ -107,6 +107,8 @@ proc/typesof(Item1) as /list proc/uppertext(T as text) as text proc/url_decode(UrlText) as text proc/url_encode(PlainText, format = 0) as text +proc/values_cut_over(Alist, Max, inclusive = 0) as num +proc/values_cut_under(Alist, Min, inclusive = 0) as num proc/values_dot(A, B) as num proc/values_product(Alist) as num proc/values_sum(Alist) as num diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs index a10346476e..86130869d1 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNative.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNative.cs @@ -108,6 +108,8 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) { objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_uppertext); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_decode); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_url_encode); + objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_cut_over); + objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_cut_under); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_dot); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_product); objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_values_sum); diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index e2b4e0a586..d2884078cf 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3108,6 +3108,84 @@ public static DreamValue NativeProc_url_encode(NativeProc.Bundle bundle, DreamOb return new DreamValue(HttpUtility.UrlEncode(plainText)); } + [DreamProc("values_cut_over")] + [DreamProcParameter("Alist", Type = DreamValueTypeFlag.DreamObject)] + [DreamProcParameter("Max", Type = DreamValueTypeFlag.Float)] + [DreamProcParameter("inclusive", Type = DreamValueTypeFlag.Float, DefaultValue = 0)] + public static DreamValue NativeProc_values_cut_over(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { + if (bundle.Arguments.Length < 2 || bundle.Arguments.Length > 3) throw new Exception($"expected 2-3 arguments (found {bundle.Arguments.Length})"); + + DreamValue argList = bundle.GetArgument(0, "Alist"); + DreamValue argMin = bundle.GetArgument(1, "Max"); + DreamValue argInclusive = bundle.GetArgument(2, "inclusive"); + + return values_cut_helper(argList, argMin, argInclusive, false); + } + + [DreamProc("values_cut_under")] + [DreamProcParameter("Alist", Type = DreamValueTypeFlag.DreamObject)] + [DreamProcParameter("Min", Type = DreamValueTypeFlag.Float)] + [DreamProcParameter("inclusive", Type = DreamValueTypeFlag.Float, DefaultValue = 0)] + public static DreamValue NativeProc_values_cut_under(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) { + if (bundle.Arguments.Length < 2 || bundle.Arguments.Length > 3) throw new Exception($"expected 2-3 arguments (found {bundle.Arguments.Length})"); + + DreamValue argList = bundle.GetArgument(0, "Alist"); + DreamValue argMin = bundle.GetArgument(1, "Min"); + DreamValue argInclusive = bundle.GetArgument(2, "inclusive"); + + return values_cut_helper(argList, argMin, argInclusive, true); + } + + private static DreamValue values_cut_helper(DreamValue argList, DreamValue argMin, DreamValue argInclusive, bool under) { + // BYOND explicitly doesn't check for any truthy value + bool inclusive = argInclusive.TryGetValueAsFloat(out var inclusiveValue) && inclusiveValue >= 1; + + var cutCount = 0; // number of values cut from the list + var min = argMin.UnsafeGetValueAsFloat(); + + if (argList.TryGetValueAsDreamList(out var list)) { + if (!list.IsAssociative) { + cutCount = list.GetLength(); + list.Cut(); + return new DreamValue(cutCount); + } + + var values = list.GetValues(); + var assocValues = list.GetAssociativeValues(); + + // Nuke any keys without values + if (values.Count != assocValues.Count) { + // We need to copy the list so we can modify while enumerating + var listCopy = new List(values); + foreach (var val in listCopy) { + if (!assocValues.ContainsKey(val)) { + cutCount += 1; + list.RemoveValue(val); + } + } + } + + foreach (var (key,value) in assocValues) { + if (value.TryGetValueAsFloat(out var valFloat)) { + switch (inclusive) + { + case true when under && valFloat <= min: + case true when !under && valFloat >= min: + case false when under && valFloat < min: + case false when !under && valFloat > min: + list.RemoveValue(key); + cutCount += 1; + break; + } + } else { + list.RemoveValue(key); // Keys without numeric values seem to always be removed + } + } + } + + return new DreamValue(cutCount); + } + [DreamProc("values_dot")] [DreamProcParameter("A", Type = DreamValueTypeFlag.DreamObject)] [DreamProcParameter("B", Type = DreamValueTypeFlag.DreamObject)] From 3647236ac5a8c2ccfb834af9a50a4fde840f4b9d Mon Sep 17 00:00:00 2001 From: ike709 Date: Tue, 11 Feb 2025 11:53:19 -0600 Subject: [PATCH 5/7] fix a missing `cutCount += 1` --- OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index d2884078cf..4ccc32fe8b 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3179,6 +3179,7 @@ private static DreamValue values_cut_helper(DreamValue argList, DreamValue argMi } } else { list.RemoveValue(key); // Keys without numeric values seem to always be removed + cutCount += 1; } } } From 5cf015c3abf430589a8d49102ba6b12f162794fa Mon Sep 17 00:00:00 2001 From: ike709 Date: Wed, 19 Feb 2025 10:14:50 -0600 Subject: [PATCH 6/7] Update OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs Co-authored-by: wixoa --- OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index 4ccc32fe8b..8a1926777e 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -3167,8 +3167,7 @@ private static DreamValue values_cut_helper(DreamValue argList, DreamValue argMi foreach (var (key,value) in assocValues) { if (value.TryGetValueAsFloat(out var valFloat)) { - switch (inclusive) - { + switch (inclusive) { case true when under && valFloat <= min: case true when !under && valFloat >= min: case false when under && valFloat < min: From 51015b458971417af3789e91684ad2c11ee3cb19 Mon Sep 17 00:00:00 2001 From: ike709 Date: Wed, 19 Feb 2025 10:26:31 -0600 Subject: [PATCH 7/7] check lists --- .../DMProject/Tests/Builtins/values_cut.dm | 54 +++++++++++-------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/Content.Tests/DMProject/Tests/Builtins/values_cut.dm b/Content.Tests/DMProject/Tests/Builtins/values_cut.dm index f5d371d5b9..4b3ca70538 100644 --- a/Content.Tests/DMProject/Tests/Builtins/values_cut.dm +++ b/Content.Tests/DMProject/Tests/Builtins/values_cut.dm @@ -1,25 +1,33 @@ /proc/RunTest() - var/list/one = list("a"=1, "b"=2, "c"=-3) - ASSERT(values_cut_under(one, 5, 1) == 3) - - var/list/two = list("a"=1, "b"=2, "c"=0) - ASSERT(values_cut_under(two, 1) == 1) - - var/list/three = list("a"=1, "b"=2, "c"=0) - ASSERT(values_cut_under(three, 1, TRUE) == 2) - - var/list/four = list("a"=1, "b"=2, "c"=-3) - ASSERT(values_cut_over(four, 5, 1) == 0) - - var/list/five = list("a"=1, "b"=2, "c"=0) - ASSERT(values_cut_over(five, 1) == 1) - - var/list/six = list("a"=1, "b"=2, "c"=0) - ASSERT(values_cut_over(six, 1, TRUE) == 2) - - var/list/seven = list("a", "b", "c") - ASSERT(values_cut_under(seven, -1, 0) == 3) - - var/list/eight = list("a"=1, "b", "c"=-3) - ASSERT(values_cut_under(eight, -1, 0) == 2) \ No newline at end of file + var/list/one = list("a"=1, "b"=2, "c"=-3) + ASSERT(values_cut_under(one, 5, 1) == 3) + ASSERT(one ~= list()) + + var/list/two = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_under(two, 1) == 1) + ASSERT(two ~= list("a"=1, "b"=2)) + + var/list/three = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_under(three, 1, TRUE) == 2) + ASSERT(three ~= list("b" = 2)) + + var/list/four = list("a"=1, "b"=2, "c"=-3) + ASSERT(values_cut_over(four, 5, 1) == 0) + ASSERT(four ~= list("a"=1, "b"=2, "c"=-3)) + + var/list/five = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_over(five, 1) == 1) + ASSERT(five ~= list("a"=1, "c"=0)) + + var/list/six = list("a"=1, "b"=2, "c"=0) + ASSERT(values_cut_over(six, 1, TRUE) == 2) + ASSERT(six ~= list("c" = 0)) + + var/list/seven = list("a", "b", "c") + ASSERT(values_cut_under(seven, -1, 0) == 3) + ASSERT(seven ~= list()) + + var/list/eight = list("a"=1, "b", "c"=-3) + ASSERT(values_cut_under(eight, -1, 0) == 2) + ASSERT(eight ~= list("a" = 1))