@@ -430,22 +430,21 @@ def f(p1,p2):
430430 SINK (rl [0 ][0 ]) #$ MISSING: flow="SOURCE, l:-10 -> rl[0][0]"
431431 SINK_F (rl [0 ][1 ])
432432
433- @expects (6 )
433+ @expects (4 )
434434def test_map_multi_list ():
435435 l1 = [SOURCE ]
436436 l2 = [SOURCE ]
437437
438438 def f (p1 ,p2 ):
439439 SINK (p1 ) #$ flow="SOURCE, l:-4 -> p1"
440440 SINK (p2 ) #$ flow="SOURCE, l:-4 -> p2"
441-
442441 return p1 ,p2
443442
444443 rl = list (map (f , l1 , l2 ))
445- SINK (rl [0 ][0 ]) #$ flow="SOURCE, l:-10 -> rl[0][0]"
446- SINK (rl [0 ][1 ]) #$ flow="SOURCE, l:-10 -> rl[0][1]"
444+ SINK (rl [0 ][0 ]) #$ flow="SOURCE, l:-9 -> rl[0][0]"
445+ SINK (rl [0 ][1 ]) #$ flow="SOURCE, l:-9 -> rl[0][1]"
447446
448- @expects (6 )
447+ @expects (4 )
449448def test_map_multi_tuple ():
450449 l1 = (SOURCE ,)
451450 l2 = (SOURCE ,)
@@ -456,8 +455,8 @@ def f(p1,p2):
456455 return p1 ,p2
457456
458457 rl = list (map (f , l1 , l2 ))
459- SINK (rl [0 ][0 ]) #$ flow="SOURCE, l:-10 -> rl[0][0]"
460- SINK (rl [0 ][1 ]) #$ MISSING: flow="SOURCE, l:-10 -> rl[0][1]"
458+ SINK (rl [0 ][0 ]) #$ flow="SOURCE, l:-9 -> rl[0][0]"
459+ SINK (rl [0 ][1 ]) #$ MISSING: flow="SOURCE, l:-9 -> rl[0][1]"
461460
462461### filter
463462
@@ -505,10 +504,108 @@ def f(p):
505504 rl = list (filter (f ,d ))
506505 SINK (rl [0 ]) #$ MISSING: flow="SOURCE, l:-7 -> rl[0]"
507506
507+ @expects (1 )
508508def test_enumerate_list ():
509- # TODO
510- pass
509+ l = [SOURCE ]
510+
511+ e = list (enumerate (l ))
512+
513+ SINK (e [0 ][1 ]) #$ flow="SOURCE, l:-4 -> e[0][1]"
514+
515+ @expects (1 )
516+ def test_enumerate_set ():
517+ s = {SOURCE }
518+
519+ e = list (enumerate (s ))
520+
521+ SINK (e [0 ][1 ]) #$ flow="SOURCE, l:-4 -> e[0][1]"
522+
523+ @expects (1 )
524+ def test_enumerate_tuple ():
525+ t = (SOURCE ,)
526+
527+ e = list (enumerate (t ))
511528
529+ SINK (e [0 ][1 ]) #$ flow="SOURCE, l:-4 -> e[0][1]"
530+
531+ @expects (2 )
532+ def test_enumerate_list_for ():
533+ l = [SOURCE ]
534+
535+ for i , x in enumerate (l ):
536+ SINK (x ) #$ flow="SOURCE, l:-3 -> x"
537+
538+ for t in enumerate (l ):
539+ SINK (t [1 ]) #$ flow="SOURCE, l:-6 -> t[1]"
540+
541+ @expects (1 )
542+ def test_enumerate_dict ():
543+ d = {SOURCE :"v" }
544+
545+ e = list (enumerate (d ))
546+
547+ SINK (e [0 ][1 ]) # $ MISSING: flow="SOURCE, l:-4 -> e[0][1]"
548+
549+ @expects (8 )
512550def test_zip_list ():
513- # TODO
514- pass
551+ l1 = [SOURCE , SOURCE ]
552+ l2 = [SOURCE , NONSOURCE ]
553+ l3 = [NONSOURCE , SOURCE ]
554+ l4 = [NONSOURCE , NONSOURCE ]
555+
556+ z = list (zip (l1 ,l2 ,l3 ,l4 ))
557+
558+ SINK (z [0 ][0 ]) #$ flow="SOURCE, l:-7 -> z[0][0]"
559+ SINK (z [0 ][1 ]) #$ flow="SOURCE, l:-7 -> z[0][1]"
560+ SINK_F (z [0 ][2 ]) #$ SPURIOUS: flow="SOURCE, l:-7 -> z[0][2]"
561+ SINK_F (z [0 ][3 ])
562+ SINK (z [1 ][0 ]) #$ flow="SOURCE, l:-11 -> z[1][0]"
563+ SINK_F (z [1 ][1 ]) #$ SPURIOUS: flow="SOURCE, l:-11 -> z[1][1]"
564+ SINK (z [1 ][2 ]) #$ flow="SOURCE, l:-11 -> z[1][2]"
565+ SINK_F (z [1 ][3 ])
566+
567+ @expects (4 )
568+ def test_zip_set ():
569+ s1 = {SOURCE }
570+ s2 = {NONSOURCE }
571+ s3 = {SOURCE }
572+ s4 = {NONSOURCE }
573+
574+ z = list (zip (s1 ,s2 ,s3 ,s4 ))
575+
576+ SINK (z [0 ][0 ]) #$ flow="SOURCE, l:-11 -> z[0][0]"
577+ SINK_F (z [0 ][1 ])
578+ SINK (z [0 ][2 ]) #$ flow="SOURCE, l:-11 -> z[0][2]"
579+ SINK_F (z [0 ][3 ])
580+
581+ @expects (8 )
582+ def test_zip_tuple ():
583+ t1 = (SOURCE , SOURCE )
584+ t2 = (SOURCE , NONSOURCE )
585+ t3 = (NONSOURCE , SOURCE )
586+ t4 = (NONSOURCE , NONSOURCE )
587+
588+ z = list (zip (t1 ,t2 ,t3 ,t4 ))
589+
590+ SINK (z [0 ][0 ]) #$ flow="SOURCE, l:-7 -> z[0][0]"
591+ SINK (z [0 ][1 ]) #$ flow="SOURCE, l:-7 -> z[0][1]"
592+ SINK_F (z [0 ][2 ])
593+ SINK_F (z [0 ][3 ])
594+ SINK (z [1 ][0 ]) #$ flow="SOURCE, l:-11 -> z[1][0]"
595+ SINK_F (z [1 ][1 ]) #$ SPURIOUS: flow="SOURCE, l:-11 -> z[1][1]"
596+ SINK (z [1 ][2 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[1][2]" # Tuple contents are not tracked beyond the first two arguments for performance.
597+ SINK_F (z [1 ][3 ])
598+
599+ @expects (4 )
600+ def test_zip_dict ():
601+ d1 = {SOURCE : "v" }
602+ d2 = {NONSOURCE : "v" }
603+ d3 = {SOURCE : "v" }
604+ d4 = {NONSOURCE : "v" }
605+
606+ z = list (zip (d1 ,d2 ,d3 ,d4 ))
607+
608+ SINK (z [0 ][0 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[0][0]"
609+ SINK_F (z [0 ][1 ])
610+ SINK (z [0 ][2 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[0][2]"
611+ SINK_F (z [0 ][3 ])
0 commit comments