Skip to content

Commit e7649e3

Browse files
Add tests for zip and enumerate
1 parent 460de3f commit e7649e3

File tree

1 file changed

+114
-9
lines changed

1 file changed

+114
-9
lines changed

python/ql/test/library-tests/dataflow/coverage/test_builtins.py

Lines changed: 114 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
449448
def 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)
508508
def 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)
512550
def 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

Comments
 (0)