Skip to content

Commit 6a6585e

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

File tree

1 file changed

+108
-11
lines changed

1 file changed

+108
-11
lines changed

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

Lines changed: 108 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
434434
def 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)
449448
def 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)
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}
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)
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}
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

Comments
 (0)