def testSeq2Num(self): from iegen.util import iter_islast count=0 for i,is_last in iter_islast(range(2)): self.failUnless(count==i,'%d!=%d'%(i,count)) if i<1: self.failIf(is_last,'is_last is True but we are not at the last item') else: self.failUnless(is_last,'is_last is False but we are at the last item') count+=1
def testStringSeq(self): from iegen.util import iter_islast text='Upper Class Twit of The Year 2' pos=0 for ch,is_last in iter_islast(text): self.failUnless(text[pos]==ch,'%s!=%s'%(text[pos],ch)) if pos<len(text)-1: self.failIf(is_last,'is_last is True but we are not at the last item') else: self.failUnless(is_last,'is_last is False but we are at the last item') pos+=1
def visitProgram(self, node): from iegen.util import iter_islast self.inProgram(node) for statement in node.preamble: statement.apply_visitor(self) for function, is_last in iter_islast(node.functions): function.apply_visitor(self) if not is_last: self.betweenFunctions(node) self.outProgram(node)
def visitFunction(self, node): from iegen.util import iter_islast self.in_function = True self.inFunction(node) for param, is_last in iter_islast(node.params): param.apply_visitor(self) if not is_last: self.betweenParameters(param) self.betweenParamsStatements(node) for statement in node.body: statement.apply_visitor(self) self.outFunction(node) self.in_function = False
def testSeq0Num(self): from iegen.util import iter_islast for i,is_last in iter_islast(range(0)): self.fail('This loop should have no iterations')
def testSeq1Num(self): from iegen.util import iter_islast for i,is_last in iter_islast(range(1)): self.failUnless(0==i,'0!=%d'%(i)) self.failUnless(is_last,'is_last is False but we are at the last item')