# HG changeset patch # User Paul Boddie # Date 1487780342 -3600 # Node ID 2c1ae8f292a98cfdb78174717a99691553af85ee # Parent 3a80900f08ffb9206a8d7733f4ec851dd4b6370f Fixed the testing of attribute usage. diff -r 3a80900f08ff -r 2c1ae8f292a9 internal_tests/branches.py --- a/internal_tests/branches.py Tue Feb 21 00:20:43 2017 +0100 +++ b/internal_tests/branches.py Wed Feb 22 17:19:02 2017 +0100 @@ -2,10 +2,73 @@ import branching +def simple_usage(assignment): + d = {} + for name, usages in assignment.get_usage().items(): + l = [] + for usage in usages: + if not usage: + l.append(usage) + else: + l2 = [] + for t in usage: + attrname, invocation, assignment = t + l2.append(attrname) + l.append(tuple(l2)) + d[name] = set(l) + return d + names = [] # Equivalent to... # +# y = ... +# while cond0: +# if cond1: +# y.a1 +# elif cond2: +# y = ... +# y.a2 +# else: +# y.a3 + +bt = branching.BranchTracker() +y1 = bt.assign_names(["y"]) +bt.new_branchpoint(True) # begin +bt.new_branch(True) # while ... +bt.new_branchpoint() # begin +bt.new_branch() # if ... +ya1 = bt.use_attribute("y", "a1") +bt.shelve_branch() +bt.new_branch() # elif ... +y2 = bt.assign_names(["y"]) +ya2 = bt.use_attribute("y", "a2") +bt.shelve_branch() +bt.new_branch() # else +ya1 = bt.use_attribute("y", "a3") +bt.shelve_branch() +bt.merge_branches() # end +bt.resume_continuing_branches() +bt.shelve_branch(True) +bt.new_branch() # (null) +bt.shelve_branch() +bt.merge_branches() # end +bt.resume_broken_branches() + +print simple_usage(y1) == \ + {'y' : set([(), ('a1',), ('a3',)])}, \ + simple_usage(y1) +print simple_usage(y2) == \ + {'y' : set([('a2',)])}, \ + simple_usage(y2) +print bt.get_assignment_positions_for_branches("y", ya1) == [0, 1], \ + bt.get_assignment_positions_for_branches("y", ya1) +print bt.get_assignment_positions_for_branches("y", ya2) == [1], \ + bt.get_assignment_positions_for_branches("y", ya2) +names.append(bt.assignments["y"]) + +# Equivalent to... +# # a = ... # a.p # if ...: @@ -28,12 +91,12 @@ bt.merge_branches() # end aq = bt.use_attribute("a", "q") -print a1.get_usage() == \ +print simple_usage(a1) == \ {'a' : set([('p',), ('p', 'q')])}, \ - a1.get_usage() -print a2.get_usage() == \ + simple_usage(a1) +print simple_usage(a2) == \ {'a' : set([('q', 'x')])}, \ - a2.get_usage() + simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ax) == [1], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", aq) == [0, 1], \ @@ -68,9 +131,9 @@ bt.merge_branches() # end bt.use_attribute("a", "q") -print a.get_usage() == \ +print simple_usage(a) == \ {'a' : set([('p', 'q'), ('p', 'q', 'x'), ('p', 'q', 'y', 'z')])}, \ - a.get_usage() + simple_usage(a) print bt.get_assignment_positions_for_branches("a", ax) == [0], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", ay) == [0], \ @@ -101,8 +164,8 @@ bt.resume_broken_branches() bt.use_attribute("a", "q") -print a.get_usage() == \ - {'a' : set([('p', 'q'), ('p', 'q', 'x')])}, a.get_usage() +print simple_usage(a) == \ + {'a' : set([('p', 'q'), ('p', 'q', 'x')])}, simple_usage(a) print bt.get_assignment_positions_for_branches("a", ax) == [0], \ bt.get_assignment_positions_for_branches("a", ax) names.append(bt.assignments["a"]) @@ -139,9 +202,9 @@ bt.resume_broken_branches() bt.use_attribute("a", "q") -print a.get_usage() == \ +print simple_usage(a) == \ {'a' : set([('p', 'q'), ('p', 'q', 'x'), ('p', 'q', 'y')])}, \ - a.get_usage() + simple_usage(a) print bt.get_assignment_positions_for_branches("a", ax) == [0], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", ay) == [0], \ @@ -182,10 +245,10 @@ bt.resume_broken_branches() bt.use_attribute("a", "q") -print a1.get_usage() == \ - {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('q', 'x')])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('q', 'x')])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ax) == [1], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", ay) == [0, 1], \ @@ -226,10 +289,10 @@ bt.resume_broken_branches() bt.use_attribute("a", "q") -print a1.get_usage() == \ - {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('q', 'x')])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'q'), ('p', 'q', 'y'), ('p',)])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('q', 'x')])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ax) == [1], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", ay) == [0, 1], \ @@ -260,10 +323,10 @@ bt.resume_broken_branches() aq = bt.use_attribute("a", "q") -print a1.get_usage() == \ - {'a' : set([('p', 'q'), ('p',)])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('q', 'x')])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'q'), ('p',)])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('q', 'x')])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ax) == [1], \ bt.get_assignment_positions_for_branches("a", ax) print bt.get_assignment_positions_for_branches("a", ap) == [0], \ @@ -301,8 +364,8 @@ bt.resume_broken_branches() bt.use_attribute("a", "r") -print a1.get_usage() == \ - {'a' : set([('p', 'q', 'r'), ('p', 'r')])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'q', 'r'), ('p', 'r')])}, simple_usage(a1) names.append(bt.assignments["a"]) # Equivalent to... @@ -332,8 +395,8 @@ bt.shelve_branch() bt.merge_branches() # end -print a1.get_usage() == \ - {'a' : set([('p', 'q', 'r'), ('p', 'q'), ('p',)])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'q', 'r'), ('p', 'q'), ('p',)])}, simple_usage(a1) names.append(bt.assignments["a"]) # Equivalent to... @@ -356,8 +419,8 @@ bt.merge_branches() # end bt.use_attribute("a", "q") -print a1.get_usage() == \ - {'a' : set([('p',), ('q',)])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p',), ('q',)])}, simple_usage(a1) names.append(bt.assignments["a"]) # Equivalent to... @@ -388,8 +451,8 @@ bt.shelve_branch() bt.merge_branches() # end -print a1.get_usage() == \ - {'a' : set([('p',), ('q', 'r')])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p',), ('q', 'r')])}, simple_usage(a1) names.append(bt.assignments["a"]) # Equivalent to... @@ -421,10 +484,10 @@ bt.shelve_branch() bt.merge_branches() # end -print a1.get_usage() == \ - {'a' : set([('p',), ()])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('q',), ()])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p',), ()])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('q',), ()])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ap) == [0], \ bt.get_assignment_positions_for_branches("a", ap) print bt.get_assignment_positions_for_branches("a", aq) == [1], \ @@ -455,12 +518,12 @@ bt.merge_branches() # end aq = bt.use_attribute("a", "q") -print a1.get_usage() == \ +print simple_usage(a1) == \ {'a' : set([('p',), ('p', 'q')])}, \ - a1.get_usage() -print a2.get_usage() == \ + simple_usage(a1) +print simple_usage(a2) == \ {'a' : set([('q', 'x')])}, \ - a2.get_usage() + simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ap) == [0], \ bt.get_assignment_positions_for_branches("a", ap) print bt.get_assignment_positions_for_branches("a", ax) == [1], \ @@ -489,9 +552,9 @@ bt.merge_branches() # end aq = bt.use_attribute("a", "q") -print a1.get_usage() == \ +print simple_usage(a1) == \ {'a' : set([('q', 'x')])}, \ - a1.get_usage() + simple_usage(a1) print bt.get_assignment_positions_for_branches("a", aq) == [None, 0], \ bt.get_assignment_positions_for_branches("a", aq) names.append(bt.assignments["a"]) @@ -514,8 +577,8 @@ bt.merge_branches() # end aq = bt.use_attribute("a", "q") -print a1.get_usage() == \ - {'a' : set([()])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([()])}, simple_usage(a1) print bt.get_assignment_positions_for_branches("a", aq) == [None], \ bt.get_assignment_positions_for_branches("a", aq) names.append(bt.assignments["a"]) @@ -546,8 +609,8 @@ bt.use_attribute("a", "r") bt.restore_active_branches(branches) -print a1.get_usage() == \ - {'a' : set([('p', 'r'), ('q', 'r')])}, a1.get_usage() +print simple_usage(a1) == \ + {'a' : set([('p', 'r'), ('q', 'r')])}, simple_usage(a1) names.append(bt.assignments["a"]) # Equivalent to... @@ -578,10 +641,10 @@ ar = bt.use_attribute("a", "r") bt.restore_active_branches(branches) -print a1.get_usage() == \ - {'a' : set([(), ('q', 'r')])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('p', 'r')])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([(), ('q', 'r')])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('p', 'r')])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ar) == [0, 1], \ bt.get_assignment_positions_for_branches("a", ar) names.append(bt.assignments["a"]) @@ -616,10 +679,10 @@ bt.shelve_branch() bt.merge_branches() # end -print a1.get_usage() == \ - {'a' : set([(), ('q', 'r')])}, a1.get_usage() -print a2.get_usage() == \ - {'a' : set([('p',)])}, a2.get_usage() +print simple_usage(a1) == \ + {'a' : set([(), ('q', 'r')])}, simple_usage(a1) +print simple_usage(a2) == \ + {'a' : set([('p',)])}, simple_usage(a2) print bt.get_assignment_positions_for_branches("a", ar) == [0, 1], \ bt.get_assignment_positions_for_branches("a", ar) names.append(bt.assignments["a"])