diff --git a/Content.Tests/DMProject/Tests/Builtins/params2list.dm b/Content.Tests/DMProject/Tests/Builtins/params2list.dm index 1e0d04b551..f36f71da20 100644 --- a/Content.Tests/DMProject/Tests/Builtins/params2list.dm +++ b/Content.Tests/DMProject/Tests/Builtins/params2list.dm @@ -1,6 +1,6 @@ /proc/RunTest() ASSERT(params2list("a;b;c") ~= list(a="", b="", c="")) - ASSERT(params2list("a;a;a") ~= list(a=list("", "", ""))) // Crazy + ASSERT(json_encode(params2list("a;a;a")) == @#{"a":["","",""]}#) ASSERT(params2list("a=1;b=2") ~= list(a="1", b="2")) ASSERT(params2list("a=1;a=2") ~= list(a="2")) diff --git a/Content.Tests/DMProject/Tests/List/AssocListCombine.dm b/Content.Tests/DMProject/Tests/List/AssocListCombine.dm index 57fa5db7e9..7e3edc3dc0 100644 --- a/Content.Tests/DMProject/Tests/List/AssocListCombine.dm +++ b/Content.Tests/DMProject/Tests/List/AssocListCombine.dm @@ -1,7 +1,7 @@ /proc/RunTest() var/list/L = list("A") L |= list("B" = 1) - ASSERT(L ~= list("A", "B")) + ASSERT(L ~= list("A", "B" = 1)) ASSERT(L["A"] == null) ASSERT(L["B"] == 1) diff --git a/Content.Tests/DMProject/Tests/List/ListCut.dm b/Content.Tests/DMProject/Tests/List/ListCut.dm index 8e1b2c7bfb..4d9f9cbc25 100644 --- a/Content.Tests/DMProject/Tests/List/ListCut.dm +++ b/Content.Tests/DMProject/Tests/List/ListCut.dm @@ -6,6 +6,6 @@ A = list(a = 10, b = 20) A.Cut(1, 2) - ASSERT(A ~= list("b")) + ASSERT(A ~= list("b" = 20)) ASSERT(A["a"] == null) ASSERT(A["b"] == 20) diff --git a/Content.Tests/DMProject/Tests/Operators/equivalence.dm b/Content.Tests/DMProject/Tests/Operators/equivalence.dm index 64684c7089..129e6f27aa 100644 --- a/Content.Tests/DMProject/Tests/Operators/equivalence.dm +++ b/Content.Tests/DMProject/Tests/Operators/equivalence.dm @@ -14,6 +14,13 @@ ASSERT((l1 ~! l2) == TRUE) ASSERT((l1 ~! l3) == TRUE) ASSERT((l1 ~! l4) == TRUE) + + // As of BYOND 516, we now care about assoc values for equivalence + var/list/one = list(a=1,b=3,c="hi") + var/list/two = list(a=1,b=2,c="hi") + var/list/three = list(a=1,b=3,c="hi") + ASSERT((one ~! two) == TRUE) + ASSERT((one ~= three) == TRUE) var/matrix/m1 = matrix(1,2,3,4,5,6) var/matrix/m2 = matrix(-1,-2,-3,-4,-5,6) diff --git a/OpenDreamRuntime/Objects/Types/DreamList.cs b/OpenDreamRuntime/Objects/Types/DreamList.cs index 0689448131..e4310ece8e 100644 --- a/OpenDreamRuntime/Objects/Types/DreamList.cs +++ b/OpenDreamRuntime/Objects/Types/DreamList.cs @@ -372,6 +372,8 @@ public override DreamValue OperatorEquivalent(DreamValue b) { return DreamValue.False; if (GetLength() != secondList.GetLength()) return DreamValue.False; + if(IsAssociative && (!secondList.IsAssociative || secondList.GetAssociativeValues().Count != GetAssociativeValues().Count)) + return DreamValue.False; var firstValues = GetValues(); var secondValues = secondList.GetValues(); @@ -380,6 +382,15 @@ public override DreamValue OperatorEquivalent(DreamValue b) { return DreamValue.False; } + // Starting with 516, equivalence checks assoc values + if (IsAssociative) { + var secondListAssoc = secondList.GetAssociativeValues(); + foreach (var kvp in GetAssociativeValues()) { + if(!secondListAssoc.TryGetValue(kvp.Key, out var assocValue) || !assocValue.Equals(kvp.Value)) + return DreamValue.False; + } + } + return DreamValue.True; }