1.1 --- a/internal_tests/branches.py Tue Feb 21 00:20:43 2017 +0100
1.2 +++ b/internal_tests/branches.py Wed Feb 22 17:19:02 2017 +0100
1.3 @@ -2,10 +2,73 @@
1.4
1.5 import branching
1.6
1.7 +def simple_usage(assignment):
1.8 + d = {}
1.9 + for name, usages in assignment.get_usage().items():
1.10 + l = []
1.11 + for usage in usages:
1.12 + if not usage:
1.13 + l.append(usage)
1.14 + else:
1.15 + l2 = []
1.16 + for t in usage:
1.17 + attrname, invocation, assignment = t
1.18 + l2.append(attrname)
1.19 + l.append(tuple(l2))
1.20 + d[name] = set(l)
1.21 + return d
1.22 +
1.23 names = []
1.24
1.25 # Equivalent to...
1.26 #
1.27 +# y = ...
1.28 +# while cond0:
1.29 +# if cond1:
1.30 +# y.a1
1.31 +# elif cond2:
1.32 +# y = ...
1.33 +# y.a2
1.34 +# else:
1.35 +# y.a3
1.36 +
1.37 +bt = branching.BranchTracker()
1.38 +y1 = bt.assign_names(["y"])
1.39 +bt.new_branchpoint(True) # begin
1.40 +bt.new_branch(True) # while ...
1.41 +bt.new_branchpoint() # begin
1.42 +bt.new_branch() # if ...
1.43 +ya1 = bt.use_attribute("y", "a1")
1.44 +bt.shelve_branch()
1.45 +bt.new_branch() # elif ...
1.46 +y2 = bt.assign_names(["y"])
1.47 +ya2 = bt.use_attribute("y", "a2")
1.48 +bt.shelve_branch()
1.49 +bt.new_branch() # else
1.50 +ya1 = bt.use_attribute("y", "a3")
1.51 +bt.shelve_branch()
1.52 +bt.merge_branches() # end
1.53 +bt.resume_continuing_branches()
1.54 +bt.shelve_branch(True)
1.55 +bt.new_branch() # (null)
1.56 +bt.shelve_branch()
1.57 +bt.merge_branches() # end
1.58 +bt.resume_broken_branches()
1.59 +
1.60 +print simple_usage(y1) == \
1.61 + {'y' : set([(), ('a1',), ('a3',)])}, \
1.62 + simple_usage(y1)
1.63 +print simple_usage(y2) == \
1.64 + {'y' : set([('a2',)])}, \
1.65 + simple_usage(y2)
1.66 +print bt.get_assignment_positions_for_branches("y", ya1) == [0, 1], \
1.67 + bt.get_assignment_positions_for_branches("y", ya1)
1.68 +print bt.get_assignment_positions_for_branches("y", ya2) == [1], \
1.69 + bt.get_assignment_positions_for_branches("y", ya2)
1.70 +names.append(bt.assignments["y"])
1.71 +
1.72 +# Equivalent to...
1.73 +#
1.74 # a = ...
1.75 # a.p
1.76 # if ...:
1.77 @@ -28,12 +91,12 @@
1.78 bt.merge_branches() # end
1.79 aq = bt.use_attribute("a", "q")
1.80
1.81 -print a1.get_usage() == \
1.82 +print simple_usage(a1) == \
1.83 {'a' : set([('p',), ('p', 'q')])}, \
1.84 - a1.get_usage()
1.85 -print a2.get_usage() == \
1.86 + simple_usage(a1)
1.87 +print simple_usage(a2) == \
1.88 {'a' : set([('q', 'x')])}, \
1.89 - a2.get_usage()
1.90 + simple_usage(a2)
1.91 print bt.get_assignment_positions_for_branches("a", ax) == [1], \
1.92 bt.get_assignment_positions_for_branches("a", ax)
1.93 print bt.get_assignment_positions_for_branches("a", aq) == [0, 1], \
1.94 @@ -68,9 +131,9 @@
1.95 bt.merge_branches() # end
1.96 bt.use_attribute("a", "q")
1.97
1.98 -print a.get_usage() == \
1.99 +print simple_usage(a) == \
1.100 {'a' : set([('p', 'q'), ('p', 'q', 'x'), ('p', 'q', 'y', 'z')])}, \
1.101 - a.get_usage()
1.102 + simple_usage(a)
1.103 print bt.get_assignment_positions_for_branches("a", ax) == [0], \
1.104 bt.get_assignment_positions_for_branches("a", ax)
1.105 print bt.get_assignment_positions_for_branches("a", ay) == [0], \
1.106 @@ -101,8 +164,8 @@
1.107 bt.resume_broken_branches()
1.108 bt.use_attribute("a", "q")
1.109
1.110 -print a.get_usage() == \
1.111 - {'a' : set([('p', 'q'), ('p', 'q', 'x')])}, a.get_usage()
1.112 +print simple_usage(a) == \
1.113 + {'a' : set([('p', 'q'), ('p', 'q', 'x')])}, simple_usage(a)
1.114 print bt.get_assignment_positions_for_branches("a", ax) == [0], \
1.115 bt.get_assignment_positions_for_branches("a", ax)
1.116 names.append(bt.assignments["a"])
1.117 @@ -139,9 +202,9 @@
1.118 bt.resume_broken_branches()
1.119 bt.use_attribute("a", "q")
1.120
1.121 -print a.get_usage() == \
1.122 +print simple_usage(a) == \
1.123 {'a' : set([('p', 'q'), ('p', 'q', 'x'), ('p', 'q', 'y')])}, \
1.124 - a.get_usage()
1.125 + simple_usage(a)
1.126 print bt.get_assignment_positions_for_branches("a", ax) == [0], \
1.127 bt.get_assignment_positions_for_branches("a", ax)
1.128 print bt.get_assignment_positions_for_branches("a", ay) == [0], \
1.129 @@ -182,10 +245,10 @@
1.130 bt.resume_broken_branches()
1.131 bt.use_attribute("a", "q")
1.132
1.133 -print a1.get_usage() == \
1.134 - {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, a1.get_usage()
1.135 -print a2.get_usage() == \
1.136 - {'a' : set([('q', 'x')])}, a2.get_usage()
1.137 +print simple_usage(a1) == \
1.138 + {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, simple_usage(a1)
1.139 +print simple_usage(a2) == \
1.140 + {'a' : set([('q', 'x')])}, simple_usage(a2)
1.141 print bt.get_assignment_positions_for_branches("a", ax) == [1], \
1.142 bt.get_assignment_positions_for_branches("a", ax)
1.143 print bt.get_assignment_positions_for_branches("a", ay) == [0, 1], \
1.144 @@ -226,10 +289,10 @@
1.145 bt.resume_broken_branches()
1.146 bt.use_attribute("a", "q")
1.147
1.148 -print a1.get_usage() == \
1.149 - {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, a1.get_usage()
1.150 -print a2.get_usage() == \
1.151 - {'a' : set([('q', 'x')])}, a2.get_usage()
1.152 +print simple_usage(a1) == \
1.153 + {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, simple_usage(a1)
1.154 +print simple_usage(a2) == \
1.155 + {'a' : set([('q', 'x')])}, simple_usage(a2)
1.156 print bt.get_assignment_positions_for_branches("a", ax) == [1], \
1.157 bt.get_assignment_positions_for_branches("a", ax)
1.158 print bt.get_assignment_positions_for_branches("a", ay) == [0, 1], \
1.159 @@ -260,10 +323,10 @@
1.160 bt.resume_broken_branches()
1.161 aq = bt.use_attribute("a", "q")
1.162
1.163 -print a1.get_usage() == \
1.164 - {'a' : set([('p', 'q'), ('p',)])}, a1.get_usage()
1.165 -print a2.get_usage() == \
1.166 - {'a' : set([('q', 'x')])}, a2.get_usage()
1.167 +print simple_usage(a1) == \
1.168 + {'a' : set([('p', 'q'), ('p',)])}, simple_usage(a1)
1.169 +print simple_usage(a2) == \
1.170 + {'a' : set([('q', 'x')])}, simple_usage(a2)
1.171 print bt.get_assignment_positions_for_branches("a", ax) == [1], \
1.172 bt.get_assignment_positions_for_branches("a", ax)
1.173 print bt.get_assignment_positions_for_branches("a", ap) == [0], \
1.174 @@ -301,8 +364,8 @@
1.175 bt.resume_broken_branches()
1.176 bt.use_attribute("a", "r")
1.177
1.178 -print a1.get_usage() == \
1.179 - {'a' : set([('p', 'q', 'r'), ('p', 'r')])}, a1.get_usage()
1.180 +print simple_usage(a1) == \
1.181 + {'a' : set([('p', 'q', 'r'), ('p', 'r')])}, simple_usage(a1)
1.182 names.append(bt.assignments["a"])
1.183
1.184 # Equivalent to...
1.185 @@ -332,8 +395,8 @@
1.186 bt.shelve_branch()
1.187 bt.merge_branches() # end
1.188
1.189 -print a1.get_usage() == \
1.190 - {'a' : set([('p', 'q', 'r'), ('p', 'q'), ('p',)])}, a1.get_usage()
1.191 +print simple_usage(a1) == \
1.192 + {'a' : set([('p', 'q', 'r'), ('p', 'q'), ('p',)])}, simple_usage(a1)
1.193 names.append(bt.assignments["a"])
1.194
1.195 # Equivalent to...
1.196 @@ -356,8 +419,8 @@
1.197 bt.merge_branches() # end
1.198 bt.use_attribute("a", "q")
1.199
1.200 -print a1.get_usage() == \
1.201 - {'a' : set([('p',), ('q',)])}, a1.get_usage()
1.202 +print simple_usage(a1) == \
1.203 + {'a' : set([('p',), ('q',)])}, simple_usage(a1)
1.204 names.append(bt.assignments["a"])
1.205
1.206 # Equivalent to...
1.207 @@ -388,8 +451,8 @@
1.208 bt.shelve_branch()
1.209 bt.merge_branches() # end
1.210
1.211 -print a1.get_usage() == \
1.212 - {'a' : set([('p',), ('q', 'r')])}, a1.get_usage()
1.213 +print simple_usage(a1) == \
1.214 + {'a' : set([('p',), ('q', 'r')])}, simple_usage(a1)
1.215 names.append(bt.assignments["a"])
1.216
1.217 # Equivalent to...
1.218 @@ -421,10 +484,10 @@
1.219 bt.shelve_branch()
1.220 bt.merge_branches() # end
1.221
1.222 -print a1.get_usage() == \
1.223 - {'a' : set([('p',), ()])}, a1.get_usage()
1.224 -print a2.get_usage() == \
1.225 - {'a' : set([('q',), ()])}, a2.get_usage()
1.226 +print simple_usage(a1) == \
1.227 + {'a' : set([('p',), ()])}, simple_usage(a1)
1.228 +print simple_usage(a2) == \
1.229 + {'a' : set([('q',), ()])}, simple_usage(a2)
1.230 print bt.get_assignment_positions_for_branches("a", ap) == [0], \
1.231 bt.get_assignment_positions_for_branches("a", ap)
1.232 print bt.get_assignment_positions_for_branches("a", aq) == [1], \
1.233 @@ -455,12 +518,12 @@
1.234 bt.merge_branches() # end
1.235 aq = bt.use_attribute("a", "q")
1.236
1.237 -print a1.get_usage() == \
1.238 +print simple_usage(a1) == \
1.239 {'a' : set([('p',), ('p', 'q')])}, \
1.240 - a1.get_usage()
1.241 -print a2.get_usage() == \
1.242 + simple_usage(a1)
1.243 +print simple_usage(a2) == \
1.244 {'a' : set([('q', 'x')])}, \
1.245 - a2.get_usage()
1.246 + simple_usage(a2)
1.247 print bt.get_assignment_positions_for_branches("a", ap) == [0], \
1.248 bt.get_assignment_positions_for_branches("a", ap)
1.249 print bt.get_assignment_positions_for_branches("a", ax) == [1], \
1.250 @@ -489,9 +552,9 @@
1.251 bt.merge_branches() # end
1.252 aq = bt.use_attribute("a", "q")
1.253
1.254 -print a1.get_usage() == \
1.255 +print simple_usage(a1) == \
1.256 {'a' : set([('q', 'x')])}, \
1.257 - a1.get_usage()
1.258 + simple_usage(a1)
1.259 print bt.get_assignment_positions_for_branches("a", aq) == [None, 0], \
1.260 bt.get_assignment_positions_for_branches("a", aq)
1.261 names.append(bt.assignments["a"])
1.262 @@ -514,8 +577,8 @@
1.263 bt.merge_branches() # end
1.264 aq = bt.use_attribute("a", "q")
1.265
1.266 -print a1.get_usage() == \
1.267 - {'a' : set([()])}, a1.get_usage()
1.268 +print simple_usage(a1) == \
1.269 + {'a' : set([()])}, simple_usage(a1)
1.270 print bt.get_assignment_positions_for_branches("a", aq) == [None], \
1.271 bt.get_assignment_positions_for_branches("a", aq)
1.272 names.append(bt.assignments["a"])
1.273 @@ -546,8 +609,8 @@
1.274 bt.use_attribute("a", "r")
1.275 bt.restore_active_branches(branches)
1.276
1.277 -print a1.get_usage() == \
1.278 - {'a' : set([('p', 'r'), ('q', 'r')])}, a1.get_usage()
1.279 +print simple_usage(a1) == \
1.280 + {'a' : set([('p', 'r'), ('q', 'r')])}, simple_usage(a1)
1.281 names.append(bt.assignments["a"])
1.282
1.283 # Equivalent to...
1.284 @@ -578,10 +641,10 @@
1.285 ar = bt.use_attribute("a", "r")
1.286 bt.restore_active_branches(branches)
1.287
1.288 -print a1.get_usage() == \
1.289 - {'a' : set([(), ('q', 'r')])}, a1.get_usage()
1.290 -print a2.get_usage() == \
1.291 - {'a' : set([('p', 'r')])}, a2.get_usage()
1.292 +print simple_usage(a1) == \
1.293 + {'a' : set([(), ('q', 'r')])}, simple_usage(a1)
1.294 +print simple_usage(a2) == \
1.295 + {'a' : set([('p', 'r')])}, simple_usage(a2)
1.296 print bt.get_assignment_positions_for_branches("a", ar) == [0, 1], \
1.297 bt.get_assignment_positions_for_branches("a", ar)
1.298 names.append(bt.assignments["a"])
1.299 @@ -616,10 +679,10 @@
1.300 bt.shelve_branch()
1.301 bt.merge_branches() # end
1.302
1.303 -print a1.get_usage() == \
1.304 - {'a' : set([(), ('q', 'r')])}, a1.get_usage()
1.305 -print a2.get_usage() == \
1.306 - {'a' : set([('p',)])}, a2.get_usage()
1.307 +print simple_usage(a1) == \
1.308 + {'a' : set([(), ('q', 'r')])}, simple_usage(a1)
1.309 +print simple_usage(a2) == \
1.310 + {'a' : set([('p',)])}, simple_usage(a2)
1.311 print bt.get_assignment_positions_for_branches("a", ar) == [0, 1], \
1.312 bt.get_assignment_positions_for_branches("a", ar)
1.313 names.append(bt.assignments["a"])