Skip to content

Commit bf8f474

Browse files
committed
[GR-23221] test enumerate
PullRequest: graalpython/1047
2 parents aba1ae9 + f85c544 commit bf8f474

40 files changed

+545
-619
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_dict.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -734,8 +734,8 @@ def test_wrapped_string_get():
734734
def test_reverse_locals():
735735
a = 'atest'
736736
b = 'btest'
737-
dict = locals()
738-
assert list(reversed(dict)) == ['b', 'a']
737+
r = list(reversed(locals()))
738+
assert r == ['b', 'a'], "expected ['b', 'a'] got " + str(r) + " instead "
739739

740740
def test_concat():
741741
r = {**{}}

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_enumerate.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*graalpython.lib-python.3.test.test_enumerate.EnumerateStartTestCase.test_iteratorgenerator
77
*graalpython.lib-python.3.test.test_enumerate.EnumerateStartTestCase.test_iteratorseqn
88
*graalpython.lib-python.3.test.test_enumerate.EnumerateStartTestCase.test_noniterable
9+
*graalpython.lib-python.3.test.test_enumerate.EnumerateStartTestCase.test_pickle
910
*graalpython.lib-python.3.test.test_enumerate.EnumerateStartTestCase.test_tuple_reuse
1011
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_argumentcheck
1112
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_basicfunction
@@ -15,6 +16,7 @@
1516
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_iteratorgenerator
1617
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_iteratorseqn
1718
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_noniterable
19+
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_pickle
1820
*graalpython.lib-python.3.test.test_enumerate.EnumerateTestCase.test_tuple_reuse
1921
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_argumentcheck
2022
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_basicfunction
@@ -24,6 +26,7 @@
2426
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_iteratorgenerator
2527
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_iteratorseqn
2628
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_noniterable
29+
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_pickle
2730
*graalpython.lib-python.3.test.test_enumerate.SubclassTestCase.test_tuple_reuse
2831
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_argumentcheck
2932
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_basicfunction
@@ -33,6 +36,7 @@
3336
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_iteratorgenerator
3437
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_iteratorseqn
3538
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_noniterable
39+
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_pickle
3640
*graalpython.lib-python.3.test.test_enumerate.TestBig.test_tuple_reuse
3741
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_argumentcheck
3842
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_basicfunction
@@ -42,6 +46,7 @@
4246
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_iteratorgenerator
4347
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_iteratorseqn
4448
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_noniterable
49+
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_pickle
4550
*graalpython.lib-python.3.test.test_enumerate.TestEmpty.test_tuple_reuse
4651
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_argumentcheck
4752
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_basicfunction
@@ -51,11 +56,14 @@
5156
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_iteratorgenerator
5257
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_iteratorseqn
5358
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_noniterable
59+
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_pickle
5460
*graalpython.lib-python.3.test.test_enumerate.TestLongStart.test_tuple_reuse
5561
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_args
5662
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_bug1229429
5763
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_gc
64+
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_len
5865
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_objmethods
66+
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_pickle
5967
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_range_optimization
6068
*graalpython.lib-python.3.test.test_enumerate.TestReversed.test_simple
6169
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_argumentcheck
@@ -66,4 +74,5 @@
6674
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_iteratorgenerator
6775
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_iteratorseqn
6876
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_noniterable
77+
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_pickle
6978
*graalpython.lib-python.3.test.test_enumerate.TestStart.test_tuple_reuse

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,8 @@
109109
import com.oracle.graal.python.builtins.objects.code.CodeBuiltins;
110110
import com.oracle.graal.python.builtins.objects.complex.ComplexBuiltins;
111111
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins;
112-
import com.oracle.graal.python.builtins.objects.dict.DictItemsIteratorBuiltins;
113-
import com.oracle.graal.python.builtins.objects.dict.DictKeysIteratorBuiltins;
114112
import com.oracle.graal.python.builtins.objects.dict.DictReprBuiltin;
115113
import com.oracle.graal.python.builtins.objects.dict.DictValuesBuiltins;
116-
import com.oracle.graal.python.builtins.objects.dict.DictValuesIteratorBuiltins;
117114
import com.oracle.graal.python.builtins.objects.dict.DictViewBuiltins;
118115
import com.oracle.graal.python.builtins.objects.dict.PDict;
119116
import com.oracle.graal.python.builtins.objects.enumerate.EnumerateBuiltins;
@@ -331,9 +328,6 @@ private static final PythonBuiltins[] initializeBuiltins() {
331328
new DictReprBuiltin(),
332329
new DictViewBuiltins(),
333330
new DictValuesBuiltins(),
334-
new DictKeysIteratorBuiltins(),
335-
new DictValuesIteratorBuiltins(),
336-
new DictItemsIteratorBuiltins(),
337331
new RangeBuiltins(),
338332
new SliceBuiltins(),
339333
new TupleBuiltins(),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import static com.oracle.graal.python.builtins.objects.cext.NativeCAPISymbols.FUN_ADD_NATIVE_SLOTS;
2929
import static com.oracle.graal.python.builtins.objects.cext.NativeCAPISymbols.FUN_PY_OBJECT_NEW;
30+
import static com.oracle.graal.python.builtins.objects.range.PRange.getLenOfRange;
3031
import static com.oracle.graal.python.builtins.objects.slice.PSlice.MISSING_INDEX;
3132
import static com.oracle.graal.python.nodes.BuiltinNames.BOOL;
3233
import static com.oracle.graal.python.nodes.BuiltinNames.BYTEARRAY;
@@ -58,6 +59,7 @@
5859
import static com.oracle.graal.python.nodes.BuiltinNames.TUPLE;
5960
import static com.oracle.graal.python.nodes.BuiltinNames.TYPE;
6061
import static com.oracle.graal.python.nodes.BuiltinNames.ZIP;
62+
import static com.oracle.graal.python.nodes.PGuards.isInteger;
6163
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__BASICSIZE__;
6264
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CLASSCELL__;
6365
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICTOFFSET__;
@@ -807,7 +809,17 @@ public PEnumerate enumerate(VirtualFrame frame, Object cls, Object iterable, lon
807809
return factory().createEnumerate(cls, getIterator.executeWith(frame, iterable), start);
808810
}
809811

810-
@Specialization(guards = "!isInteger(start)")
812+
@Specialization
813+
public PEnumerate enumerate(VirtualFrame frame, Object cls, Object iterable, PInt start,
814+
@Cached("create()") GetIteratorNode getIterator) {
815+
return factory().createEnumerate(cls, getIterator.executeWith(frame, iterable), start);
816+
}
817+
818+
static boolean isIntegerIndex(Object idx) {
819+
return isInteger(idx) || idx instanceof PInt;
820+
}
821+
822+
@Specialization(guards = "!isIntegerIndex(start)")
811823
public void enumerate(@SuppressWarnings("unused") Object cls, @SuppressWarnings("unused") Object iterable, Object start) {
812824
raise(TypeError, ErrorMessages.OBJ_CANNOT_BE_INTERPRETED_AS_INTEGER, start);
813825
}
@@ -819,29 +831,16 @@ public void enumerate(@SuppressWarnings("unused") Object cls, @SuppressWarnings(
819831
public abstract static class ReversedNode extends PythonBuiltinNode {
820832

821833
@Specialization
822-
public PythonObject reversed(@SuppressWarnings("unused") Object cls, PRange range,
823-
@Cached("createBinaryProfile()") ConditionProfile stepPositiveProfile,
824-
@Cached("createBinaryProfile()") ConditionProfile stepOneProfile,
825-
@Cached("createBinaryProfile()") ConditionProfile stepMinusOneProfile) {
826-
int stop;
827-
int start;
828-
int step = range.getStep();
829-
if (stepOneProfile.profile(step == 1)) {
830-
start = range.getStop() - 1;
831-
stop = range.getStart() - 1;
832-
step = -1;
833-
} else if (stepMinusOneProfile.profile(step == -1)) {
834-
start = range.getStop() + 1;
835-
stop = range.getStart() + 1;
836-
step = 1;
837-
} else {
838-
assert step != 0;
839-
long delta = (range.getStop() - (long) range.getStart() - (step > 0 ? -1 : 1)) / step * step;
840-
start = (int) (range.getStart() + delta);
841-
stop = range.getStart() - step;
842-
step = -step;
843-
}
844-
return factory().createRangeIterator(start, stop, step, stepPositiveProfile);
834+
public PythonObject reversed(@SuppressWarnings("unused") Object cls, PRange range) {
835+
int lstart = range.getStart();
836+
int lstop = range.getStop();
837+
int lstep = range.getStep();
838+
// TODO: handle long range creation
839+
int ulen = getLenOfRange(lstart, lstop, lstep);
840+
int new_stop = lstart - lstep;
841+
int new_start = new_stop + ulen * lstep;
842+
843+
return factory().createRangeIterator(new_start, new_stop, -lstep);
845844
}
846845

847846
@Specialization

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1910,7 +1910,7 @@ public static GlobalsNode create() {
19101910
}
19111911
}
19121912

1913-
@Builtin(name = "locals", minNumOfPositionalArgs = 0, needsFrame = true)
1913+
@Builtin(name = "locals", minNumOfPositionalArgs = 0, needsFrame = true, alwaysNeedsCallerFrame = true)
19141914
@GenerateNodeFactory
19151915
abstract static class LocalsNode extends PythonBuiltinNode {
19161916

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictItemsIteratorBuiltins.java

Lines changed: 0 additions & 100 deletions
This file was deleted.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictKeysIteratorBuiltins.java

Lines changed: 0 additions & 87 deletions
This file was deleted.

0 commit comments

Comments
 (0)