diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py index 087cf8f7a..1fac13259 100644 --- a/Lib/test/test_index.py +++ b/Lib/test/test_index.py @@ -101,8 +101,6 @@ class SeqTestCase: self.o2 = newstyle() self.n2 = newstyle() - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_index(self): self.o.ind = -2 self.n.ind = 2 @@ -140,8 +138,6 @@ class SeqTestCase: self.assertEqual(self.o * self.seq, self.seq * 3) self.assertEqual(self.n * self.seq, self.seq * 2) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_wrappers(self): self.o.ind = 4 self.n.ind = 5 @@ -169,8 +165,6 @@ class SeqTestCase: class ListTestCase(SeqTestCase, unittest.TestCase): seq = [0,10,20,30,40,50] - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_setdelitem(self): self.o.ind = -2 self.n.ind = 2 diff --git a/vm/src/sliceable.rs b/vm/src/sliceable.rs index c8feb83e4..93511bef5 100644 --- a/vm/src/sliceable.rs +++ b/vm/src/sliceable.rs @@ -349,11 +349,21 @@ impl SequenceIndex { .ok_or_else(|| vm .new_index_error("cannot fit 'int' into an index-sized integer".to_owned())), s @ PySlice => Ok(SequenceIndex::Slice(s)), - obj => Err(vm.new_type_error(format!( - "{} indices must be integers or slices, not {}", - owner_type, - obj.class().name, - ))), + obj => { + let val = vm.to_index(&obj).map_err(|_| vm.new_type_error(format!( + "{} indices must be integers or slices or classes that override __index__ operator, not '{}'", + owner_type, + obj.class().name + )))?; + val.as_bigint() + .to_isize() + .map(SequenceIndex::Int) + .ok_or_else(|| { + vm.new_index_error( + "cannot fit 'int' into an index-sized integer".to_owned(), + ) + }) + } }) } }