@@ -438,12 +438,11 @@ def test_map_multi_list():
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
448447@expects (6 )
449448def test_map_multi_tuple ():
@@ -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,116 @@ 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 }
511518
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 ))
528+
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 (4 )
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 , SOURCE }
570+ s2 = {SOURCE , NONSOURCE }
571+ s3 = {NONSOURCE , SOURCE }
572+ s4 = {NONSOURCE , NONSOURCE }
573+
574+ z = list (zip (s1 ,s2 ,s3 ,s4 ))
575+
576+ SINK (z [0 ][0 ]) #$ flow="SOURCE, l:-7 -> z[0][0]"
577+ SINK (z [0 ][1 ]) #$ flow="SOURCE, l:-7 -> z[0][1]"
578+ SINK_F (z [0 ][2 ]) #$ SPURIOUS: flow="SOURCE, l:-7 -> z[0][2]"
579+ SINK_F (z [0 ][3 ])
580+ SINK (z [1 ][0 ]) #$ flow="SOURCE, l:-11 -> z[1][0]"
581+ SINK_F (z [1 ][1 ]) #$ SPURIOUS: flow="SOURCE, l:-11 -> z[1][1]"
582+ SINK (z [1 ][2 ]) #$ flow="SOURCE, l:-11 -> z[1][2]"
583+ SINK_F (z [1 ][3 ])
584+
585+ @expects (4 )
586+ def test_zip_tuple ():
587+ t1 = (SOURCE , SOURCE )
588+ t2 = (SOURCE , NONSOURCE )
589+ t3 = (NONSOURCE , SOURCE )
590+ t4 = (NONSOURCE , NONSOURCE )
591+
592+ z = list (zip (t1 ,t2 ,t3 ,t4 ))
593+
594+ SINK (z [0 ][0 ]) #$ flow="SOURCE, l:-7 -> z[0][0]"
595+ SINK (z [0 ][1 ]) #$ flow="SOURCE, l:-7 -> z[0][1]"
596+ SINK_F (z [0 ][2 ])
597+ SINK_F (z [0 ][3 ])
598+ SINK (z [1 ][0 ]) #$ flow="SOURCE, l:-11 -> z[1][0]"
599+ SINK_F (z [1 ][1 ]) #$ SPURIOUS: flow="SOURCE, l:-11 -> z[1][1]"
600+ SINK (z [1 ][2 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[1][2]" # Tuple contents are not tracked beyond the first two arguments for performance.
601+ SINK_F (z [1 ][3 ])
602+
603+ @expects (4 )
604+ def test_zip_dict ():
605+ d1 = {SOURCE : "v" , SOURCE : "v" }
606+ d2 = {SOURCE : "v" , NONSOURCE : "v" }
607+ d3 = {NONSOURCE : "v" , SOURCE : "v" }
608+ d4 = {NONSOURCE : "v" , NONSOURCE : "v" }
609+
610+ z = list (zip (d1 ,d2 ,d3 ,d4 ))
611+
612+ SINK (z [0 ][0 ]) #$ MISSING: flow="SOURCE, l:-7 -> z[0][0]"
613+ SINK (z [0 ][1 ]) #$ MISSING: flow="SOURCE, l:-7 -> z[0][1]"
614+ SINK_F (z [0 ][2 ])
615+ SINK_F (z [0 ][3 ])
616+ SINK (z [1 ][0 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[1][0]"
617+ SINK_F (z [1 ][1 ])
618+ SINK (z [1 ][2 ]) #$ MISSING: flow="SOURCE, l:-11 -> z[1][2]"
619+ SINK_F (z [1 ][3 ])
0 commit comments