test.compile("source.cpp")
test.run_analysis_script('gcTypes')
gcFunctions = test.load_gcFunctions()
print(gcFunctions)
assert('void GC()' in gcFunctions)
assert('void suppressedFunction()' not in gcFunctions)
assert('void halfSuppressedFunction()' in gcFunctions)
assert('void unsuppressedFunction()' in gcFunctions)
assert('Cell* f()' in gcFunctions)
hazards = test.load_hazards()
hazmap = {haz.variable: haz for haz in hazards}
assert('cell1' not in hazmap)
assert('cell2' in hazmap)
assert('cell3' in hazmap)
assert('cell4' not in hazmap)
assert('cell5' not in hazmap)
assert('cell6' not in hazmap)
assert('<returnvalue>' in hazmap)
assert(hazmap['cell2'].function == 'Cell* f()')
print(len(set(haz.function for haz in hazards)))
assert(len(set(haz.function for haz in hazards)) == 3)
assert(hazmap['cell2'].GCFunction == 'void halfSuppressedFunction()')
assert(hazmap['cell3'].GCFunction in (
'void halfSuppressedFunction()', 'void unsuppressedFunction()'))
assert(hazmap['<returnvalue>'].GCFunction == 'void GCInDestructor::~GCInDestructor()')
assert('container1' in hazmap);
assert('container2' not in hazmap);
assert(hazmap['cell2'].type == 'Cell*')
assert(hazmap['<returnvalue>'].type == 'Cell*')
assert('haz1' not in hazmap)
assert('haz2' not in hazmap)
assert('haz3' in hazmap)
assert('haz4' in hazmap)
assert('haz5' in hazmap)
assert('haz6' not in hazmap)
assert('haz7' not in hazmap)
assert('haz8' in hazmap)
assert('unsafe1' in hazmap)
assert('safe2' not in hazmap)
assert('unsafe3' in hazmap)
assert('unsafe3b' in hazmap)
assert('unsafe4' in hazmap)
assert('safe5' not in hazmap)
assert('safe6' not in hazmap)
assert('unsafe7' in hazmap)
assert('safe8' not in hazmap)
assert('safe9' not in hazmap)
assert('safe10' not in hazmap)