Skip to content

Commit f861f87

Browse files
author
bjjwwang
committed
add python CI
1 parent bc71789 commit f861f87

File tree

6 files changed

+77
-51
lines changed

6 files changed

+77
-51
lines changed

Assignment-1/Python/CMakeLists.txt

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
# loops over pta_assert_files and run "ass1-pta $bc_file"
3+
message(STATUS "Adding python test for pta_assert_files")
4+
file(GLOB pta_assert_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/testcases/pta/*.ll")
5+
foreach(filename ${pta_assert_files})
6+
message(STATUS "Adding test for ${filename}")
7+
add_test(
8+
NAME ass1-pta-py/${filename}
9+
COMMAND python3 Main.py -pta ${CMAKE_CURRENT_SOURCE_DIR}/${filename}
10+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
11+
)
12+
endforeach()
13+
14+
message(STATUS "Adding python test for icfg_assert_files")
15+
file(GLOB icfg_assert_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/testcases/icfg/*.ll")
16+
foreach(filename ${icfg_assert_files})
17+
add_test(
18+
NAME ass1-icfg-py/${filename}
19+
COMMAND python3 Main.py -icfg ${CMAKE_CURRENT_SOURCE_DIR}/${filename}
20+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
21+
)
22+
endforeach()
23+
24+
message(STATUS "Adding python test for taint_assert_files")
25+
file(GLOB taint_assert_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/testcases/taint/*.ll")
26+
foreach(filename ${taint_assert_files})
27+
add_test(
28+
NAME ass1-taint-py/${filename}
29+
COMMAND python3 Main.py -taint ${CMAKE_CURRENT_SOURCE_DIR}/${filename}
30+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
31+
)
32+
endforeach()
33+

Assignment-2/Python/CMakeLists.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
message(STATUS "Adding test for sse_assert_files")
2+
file(GLOB ass2files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/../Tests "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/testcases/sse/*.ll")
3+
message(STATUS "file for sse_assert_files: ${ass2files}")
4+
foreach(filename ${ass2files})
5+
message(STATUS "Adding test for ${filename}")
6+
add_test(
7+
NAME ass2-py/${filename}
8+
COMMAND python3 Main.py ${CMAKE_CURRENT_SOURCE_DIR}/../Tests/${filename}
9+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
10+
)
11+
endforeach()

Assignment-3/Python/Ass3_helper.py

+1-51
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,6 @@ def __init__(self, pag: pysvf.SVFIR):
467467
self.flippedAddressMask = (self.addressMask^0xffffffff)
468468

469469

470-
471-
#==============Don't modify the code below==============
472470
"""
473471
Initialize the WTO (Weak topological order) for each function.
474472
"""
@@ -796,6 +794,7 @@ def analyse(self):
796794

797795
wto = self.func_to_wto[main_fun]
798796
self.handle_wto_components(wto.components)
797+
self.ensure_all_asserts_validated()
799798

800799

801800
"""
@@ -999,55 +998,6 @@ def update_state_on_ret(self, ret: pysvf.RetPE):
999998

1000999

10011000

1002-
1003-
"""
1004-
Find the comparison predicates in "class BinaryOPStmt:OpCode" under SVF/svf/include/SVFIR/SVFStatements.h
1005-
You are required to handle predicates (The program is assumed to have signed ints and also interger-overflow-free),
1006-
including Add, FAdd, Sub, FSub, Mul, FMul, SDiv, FDiv, UDiv, SRem, FRem, URem, Xor, And, Or, AShr, Shl, LShr
1007-
"""
1008-
def update_state_on_binary(self, binary: pysvf.BinaryOPStmt):
1009-
node = binary.get_icfg_node()
1010-
abstract_state = self.post_abs_trace[node]
1011-
lhs = binary.get_res_id()
1012-
op1 = binary.get_op_var(0)
1013-
op2 = binary.get_op_var(1)
1014-
assert abstract_state.is_interval(op1.get_id()) and abstract_state.is_interval(op2.get_id())
1015-
result = IntervalValue(0)
1016-
val1 = abstract_state[op1.get_id()].get_interval()
1017-
val2 = abstract_state[op2.get_id()].get_interval()
1018-
assert(isinstance(val1, IntervalValue) and isinstance(val2, IntervalValue))
1019-
if binary.get_op() == OpCode.Add or binary.get_op() == OpCode.FAdd:
1020-
result = val1 + val2
1021-
elif binary.get_op() == OpCode.Sub or binary.get_op() == OpCode.FSub:
1022-
result = val1 - val2
1023-
elif binary.get_op() == OpCode.Mul or binary.get_op() == OpCode.FMul:
1024-
result = val1 * val2
1025-
elif binary.get_op() == OpCode.UDiv or binary.get_op() == OpCode.SDiv or binary.get_op() == OpCode.FDiv:
1026-
if int(val2.ub())>=0 and int(val2.lb()) <= 0:
1027-
result = IntervalValue.top()
1028-
else:
1029-
result = val1 / val2
1030-
elif binary.get_op() == OpCode.SRem or binary.get_op() == OpCode.FRem or binary.get_op() == OpCode.URem:
1031-
if int(val2.ub())>=0 and int(val2.lb()) <= 0:
1032-
result = IntervalValue.top()
1033-
else:
1034-
result = val1 % val2
1035-
elif binary.get_op() == OpCode.Xor:
1036-
result = val1 ^ val2
1037-
elif binary.get_op() == OpCode.Or:
1038-
result = val1 | val2
1039-
elif binary.get_op() == OpCode.And:
1040-
result = val1 & val2
1041-
elif binary.get_op() == OpCode.Shl:
1042-
result = val1 << val2
1043-
elif binary.get_op() == OpCode.LShr or binary.get_op() == OpCode.AShr:
1044-
result = val1 >> val2
1045-
else:
1046-
result = IntervalValue.top()
1047-
abstract_state[lhs] = AbstractValue(result)
1048-
1049-
1050-
10511001
def update_state_on_select(self, select: pysvf.SelectStmt):
10521002
node = select.get_icfg_node()
10531003
abstract_state = self.post_abs_trace[node]

Assignment-3/Python/Assignment3.py

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ def update_state_on_gep(self, gep: pysvf.GepStmt):
2121
def update_state_on_store(self, store: pysvf.StoreStmt):
2222
pass
2323

24+
#TODO: your code starts from here
25+
# Find the comparison predicates in "class BinaryOPStmt:OpCode" under SVF/svf/include/SVFIR/SVFStatements.h
26+
# You are required to handle predicates (The program is assumed to have signed ints and also interger-overflow-free),
27+
# including Add, FAdd, Sub, FSub, Mul, FMul, SDiv, FDiv, UDiv, SRem, FRem, URem, Xor, And, Or, AShr, Shl, LShr
28+
def update_state_on_binary(self, store: pysvf.BinaryOpStmt):
29+
pass
30+
2431

2532
#TODO: your code starts from here
2633
def update_state_on_load(self, load: pysvf.LoadStmt):

Assignment-3/Python/CMakeLists.txt

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# loops over ae_assert_files and run "ae $bc_file"
2+
file(GLOB ae_assert_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/../Tests "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/ae/*.ll")
3+
foreach(filename ${ae_assert_files})
4+
add_test(
5+
NAME ass3-ae-py/${filename}
6+
COMMAND python3 Main.py ${CMAKE_CURRENT_SOURCE_DIR}/../Tests/${filename}
7+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
8+
)
9+
endforeach()
10+
11+
file(GLOB buf_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/../Tests "${CMAKE_CURRENT_SOURCE_DIR}/../Tests/buf/*.ll")
12+
foreach(filename ${buf_files})
13+
add_test(
14+
NAME ass3-buf-py/${filename}
15+
COMMAND python3 Main.py -overflow ${CMAKE_CURRENT_SOURCE_DIR}/../Tests/${filename}
16+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
17+
)
18+
endforeach()
19+
include(CTest)
20+
21+

CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -198,5 +198,9 @@ set(GTRAV_DIR ${CMAKE_SOURCE_DIR}/Lab-Exercise-1)
198198
set(Z3MGR_DIR ${CMAKE_SOURCE_DIR}/Lab-Exercise-2)
199199

200200
add_subdirectory(Assignment-1/CPP)
201+
add_subdirectory(Assignment-1/Python)
201202
add_subdirectory(Assignment-2/CPP)
203+
add_subdirectory(Assignment-2/Python)
202204
add_subdirectory(Assignment-3/CPP)
205+
add_subdirectory(Assignment-3/Python)
206+

0 commit comments

Comments
 (0)