Skip to content

Commit 108fb1d

Browse files
committed
fixed SequentialMapValueImpl.equals
1 parent 5f0c276 commit 108fb1d

File tree

2 files changed

+72
-15
lines changed

2 files changed

+72
-15
lines changed

src/main/java/org/msgpack/type/SequentialMapValueImpl.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ public Value[] getKeyValueArray() {
5353
}
5454
}
5555

56+
public Value get(Value key) {
57+
if(key == null) {
58+
return null;
59+
}
60+
for(int i=array.length-2; i >= 0; i-=2) {
61+
if(array[i].equals(key)) {
62+
return array[i+1];
63+
}
64+
}
65+
return null;
66+
}
67+
5668
private static class EntrySet extends AbstractSet<Map.Entry<Value,Value>> {
5769
private Value[] array;
5870

@@ -187,10 +199,6 @@ public boolean equals(Object o) {
187199
return false;
188200
}
189201

190-
if(v.getClass() == SequentialMapValueImpl.class) {
191-
return equals((SequentialMapValueImpl) v);
192-
}
193-
194202
Map<Value,Value> om = v.asMapValue();
195203
if (om.size() != array.length/2) {
196204
return false;
@@ -213,17 +221,17 @@ public boolean equals(Object o) {
213221
return true;
214222
}
215223

216-
private boolean equals(SequentialMapValueImpl o) {
217-
if(array.length != o.array.length) {
218-
return false;
219-
}
220-
for(int i=0; i < array.length; i+=2) {
221-
if(!equalsValue(o.array, array[i], array[i+1], i)) {
222-
return false;
223-
}
224-
}
225-
return true;
226-
}
224+
//private boolean equals(SequentialMapValueImpl o) {
225+
// if(array.length != o.array.length) {
226+
// return false;
227+
// }
228+
// for(int i=0; i < array.length; i+=2) {
229+
// if(!equalsValue(o.array, array[i], array[i+1], i)) {
230+
// return false;
231+
// }
232+
// }
233+
// return true;
234+
//}
227235

228236
private boolean equalsValue(Value[] oarray, Value key, Value val, int hint) {
229237
for(int j=hint; j < array.length; j+=2) {

src/test/java/org/msgpack/type/TestEquals.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,55 @@ public void testDouble(double v) throws Exception {
7070
testEquals(v1, v2);
7171
}
7272

73+
@Test
74+
public void testMapOrder() throws Exception {
75+
Value v1 = ValueFactory.mapValue(new Value[] {
76+
ValueFactory.rawValue("k0"), ValueFactory.nilValue(),
77+
ValueFactory.rawValue("k1"), ValueFactory.rawValue("v1"),
78+
ValueFactory.rawValue("k2"), ValueFactory.rawValue("v2"),
79+
ValueFactory.rawValue("k3"), ValueFactory.rawValue("v3"),
80+
ValueFactory.rawValue("k4"), ValueFactory.rawValue("v4"),
81+
ValueFactory.rawValue("k5"), ValueFactory.rawValue("v5"),
82+
ValueFactory.rawValue("k6"), ValueFactory.rawValue("v6"),
83+
ValueFactory.rawValue("k7"), ValueFactory.rawValue("v7"),
84+
ValueFactory.rawValue("k8"), ValueFactory.rawValue("v8"),
85+
ValueFactory.rawValue("k9"), ValueFactory.rawValue("v9"),
86+
ValueFactory.rawValue("k10"), ValueFactory.rawValue("v10"),
87+
ValueFactory.rawValue("k11"), ValueFactory.rawValue("v11"),
88+
ValueFactory.rawValue("k12"), ValueFactory.rawValue("v12"),
89+
ValueFactory.rawValue("k13"), ValueFactory.rawValue("v13"),
90+
ValueFactory.rawValue("k14"), ValueFactory.rawValue("v14"),
91+
ValueFactory.rawValue("k15"), ValueFactory.rawValue("v15"),
92+
ValueFactory.rawValue("k16"), ValueFactory.rawValue("v16"),
93+
ValueFactory.rawValue("k17"), ValueFactory.rawValue("v17"),
94+
ValueFactory.rawValue("k18"), ValueFactory.rawValue("v18"),
95+
ValueFactory.rawValue("k19"), ValueFactory.rawValue("v19"),
96+
});
97+
Value v2 = ValueFactory.mapValue(new Value[] {
98+
ValueFactory.rawValue("k3"), ValueFactory.rawValue("v3"),
99+
ValueFactory.rawValue("k11"), ValueFactory.rawValue("v11"),
100+
ValueFactory.rawValue("k4"), ValueFactory.rawValue("v4"),
101+
ValueFactory.rawValue("k10"), ValueFactory.rawValue("v10"),
102+
ValueFactory.rawValue("k5"), ValueFactory.rawValue("v5"),
103+
ValueFactory.rawValue("k6"), ValueFactory.rawValue("v6"),
104+
ValueFactory.rawValue("k15"), ValueFactory.rawValue("v15"),
105+
ValueFactory.rawValue("k7"), ValueFactory.rawValue("v7"),
106+
ValueFactory.rawValue("k14"), ValueFactory.rawValue("v14"),
107+
ValueFactory.rawValue("k8"), ValueFactory.rawValue("v8"),
108+
ValueFactory.rawValue("k13"), ValueFactory.rawValue("v13"),
109+
ValueFactory.rawValue("k9"), ValueFactory.rawValue("v9"),
110+
ValueFactory.rawValue("k12"), ValueFactory.rawValue("v12"),
111+
ValueFactory.rawValue("k0"), ValueFactory.nilValue(),
112+
ValueFactory.rawValue("k1"), ValueFactory.rawValue("v1"),
113+
ValueFactory.rawValue("k2"), ValueFactory.rawValue("v2"),
114+
ValueFactory.rawValue("k18"), ValueFactory.rawValue("v18"),
115+
ValueFactory.rawValue("k19"), ValueFactory.rawValue("v19"),
116+
ValueFactory.rawValue("k16"), ValueFactory.rawValue("v16"),
117+
ValueFactory.rawValue("k17"), ValueFactory.rawValue("v17"),
118+
});
119+
testEquals(v1, v2);
120+
}
121+
73122
@Override
74123
public void testByte(byte v) throws Exception {
75124
testLong((long)v);

0 commit comments

Comments
 (0)