diff --git a/src/utils/iter.py b/src/utils/iter.py index 750df99ca..07d1d9b87 100644 --- a/src/utils/iter.py +++ b/src/utils/iter.py @@ -148,6 +148,11 @@ def ilen(iterable): i += 1 return i +def one(iterable): + for x in iterable: + return x + raise ValueError, 'Empty iterable: %r' % iterable + def startswith(long, short): longI = iter(long) shortI = iter(short) diff --git a/test/test_utils.py b/test/test_utils.py index 731396aa0..8802e2538 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -384,6 +384,14 @@ class StrTest(SupyTestCase): class IterTest(SupyTestCase): + def testOne(self): + L = range(3) + i = iter(L) + self.assertEqual(utils.iter.one(i), 0) + self.assertEqual(utils.iter.one(i), 1) + self.assertEqual(utils.iter.one(i), 2) + self.assertRaises(ValueError, utils.iter.one, i) + def testLimited(self): L = range(10) self.assertEqual([], list(utils.iter.limited(L, 0)))