Skip to content

Commit 5a53be7

Browse files
committed
Add regression coverage for dict storage changes
1 parent 40e9ebc commit 5a53be7

3 files changed

Lines changed: 338 additions & 9 deletions

File tree

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/builtin/objects/dict/PDictTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -98,6 +98,7 @@ public void economicMapStorageSet() {
9898

9999
dict.setItem(ts("key1"), 42);
100100
assertEquals(2, length(dict));
101+
assertTrue(dict.getDictStorage() instanceof EconomicMapStorage);
101102

102103
assertEquals(42, dict.getItem(ts("key1")));
103104
}
@@ -113,9 +114,20 @@ public void economicMapStorageDel() {
113114

114115
delItem(dict, ts("key2"));
115116
assertEquals(2, length(dict));
117+
assertTrue(dict.getDictStorage() instanceof EconomicMapStorage);
116118

117119
assertEquals(42, dict.getItem(ts("key1")));
118120

119121
assertNull(dict.getItem(ts("key2")));
120122
}
123+
124+
@Test
125+
public void economicMapStorageEightEntries() {
126+
PDict dict = PFactory.createDict(PythonLanguage.get(null));
127+
for (int i = 0; i < 8; i++) {
128+
dict.setItem(i, i);
129+
}
130+
assertTrue(dict.getDictStorage() instanceof EconomicMapStorage);
131+
assertEquals(8, length(dict));
132+
}
121133
}

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/objects/ObjectHashMapTests.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -173,7 +173,7 @@ public void testLongHashMapStressTest() {
173173
// Basic tests of other methods
174174
Object[] oldKeys = keysToArray(map);
175175

176-
ObjectHashMap copy = map.copy();
176+
ObjectHashMap copy = copyMap(map);
177177
assertEquals(map.size(), copy.size());
178178
for (Object key : oldKeys) {
179179
assertEquals(key.toString(), //
@@ -315,7 +315,7 @@ static <T> void assertEqual(String message, LinkedHashMap<T, Object> expected, O
315315
Collections.reverse(keysValuesReversed);
316316
assertArrayEquals(message, keysValuesReversed.toArray(), reverseKeysToArray(actual));
317317

318-
EconomicMapStorage storage = new EconomicMapStorage(actual, false);
318+
EconomicMapStorage storage = toEconomicMapStorage(actual);
319319
int[] size = new int[]{0};
320320
HashingStorageForEach.executeUncached(storage, new HashingStorageForEachCallback<>() {
321321
@Override
@@ -330,12 +330,12 @@ public Object execute(Frame frame, Node inliningTarget, HashingStorage s, Hashin
330330
}
331331

332332
private static Object[] keysToArray(ObjectHashMap m) {
333-
EconomicMapStorage s = new EconomicMapStorage(m, false);
333+
EconomicMapStorage s = toEconomicMapStorage(m);
334334
return iteratorToArray(s, HashingStorageGetIterator.executeUncached(s));
335335
}
336336

337337
private static Object[] reverseKeysToArray(ObjectHashMap m) {
338-
EconomicMapStorage s = new EconomicMapStorage(m, false);
338+
EconomicMapStorage s = toEconomicMapStorage(m);
339339
return iteratorToArray(s, HashingStorageGetReverseIterator.executeUncached(s));
340340
}
341341

@@ -349,6 +349,24 @@ private static Object[] iteratorToArray(HashingStorage s, HashingStorageIterator
349349

350350
private static int valueCounter = 0;
351351

352+
private static ObjectHashMap copyMap(ObjectHashMap original) {
353+
EconomicMapStorage copy = EconomicMapStorage.create(original.size());
354+
MapCursor cursor = original.getEntries();
355+
while (cursor.advance()) {
356+
put(copy, cursor.getKey().getValue(), cursor.getKey().getPythonHash(), cursor.getValue());
357+
}
358+
return copy;
359+
}
360+
361+
private static EconomicMapStorage toEconomicMapStorage(ObjectHashMap map) {
362+
EconomicMapStorage storage = EconomicMapStorage.create(map.size());
363+
MapCursor cursor = map.getEntries();
364+
while (cursor.advance()) {
365+
put(storage, cursor.getKey().getValue(), cursor.getKey().getPythonHash(), cursor.getValue());
366+
}
367+
return storage;
368+
}
369+
352370
public static Object newValue() {
353371
return "Val: " + (valueCounter++);
354372
}

0 commit comments

Comments
 (0)