test_ugraph.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 
---------------------------> Sather 1.1 source file <--------------------------
-- COPYRIGHT NOTICE: This code is provided WITHOUT ANY WARRANTY
-- and is subject to the terms of the SATHER LIBRARY GENERAL PUBLIC
-- LICENSE contained in the file: Sather/Doc/License of the
-- Sather distribution. The license is also available from ICSI,
-- 1947 Center St., Suite 600, Berkeley CA 94704, USA.


class TEST_UGRAPH

class TEST_UGRAPH is include TEST; main is class_name("UGRAPH{STR}"); g ::= #UGRAPH{STR}; g.add_node("1"); g.add_node("2"); g.add_node("3"); g.add_node("4"); g.add_node("5"); g.add_node("6"); g.add_node("7"); g.connect("0","2"); g.connect("1","2"); g.connect("1","3"); g.connect("1","4"); g.connect("2","5"); g.connect("3","5"); g.connect("4","5"); g.connect("5","6"); compare_to_standard("UGRAPH",g); -- Test the topological sort routine t ::= #FLIST{STR}; -- loop t := t.push(g.topo_order!); end; -- verify_tsort_result(t); g.add_node("9"); g.add_node("11"); g.connect("9","11"); print_graph("Graph after adding 9,11 and (9,11)",g); -- sg ::= g.subgraph.delete_some(bind(node_test(_))); -- compare_to_standard("Subgraph of DIGRAPH", sg); -- g2: DIGRAPH{STR} := #; -- g2.add_node("0"); -- g2.add_node("1"); -- g2.add_node("2"); -- g2.add_node("3"); -- g2.add_node("4"); -- g2.add_node("5"); -- g2.add_node("6"); -- g2.add_node("7"); -- g2.connect("2","0"); -- g2.connect("2","1"); -- g2.connect("3","1"); -- g2.connect("4","1"); -- g2.connect("5","2"); -- g2.connect("5","3"); -- g2.connect("5","4"); -- g2.connect("6","5"); -- rg ::= g2.reverse_graph; -- compare_to_standard("Reverse adaptor for DIGRAPH", rg); g2 ::= #UGRAPH{INT}; g2.add_node(1); g2.add_node(2); g2.add_node(3); g2.add_node(4); g2.add_node(5); g2.connect(1,2); g2.connect(2,4); g2.connect(2,5); g2.connect(1,3); -- 1 -- /\ -- 2 3 -- / \ --4 5 t2 ::= #FLIST{INT}; loop t2 := t2.push(g2.dfs!(1)) end; r1 ::= #FLIST{INT}(|1,2,4,5,3|); r2 ::= #FLIST{INT}(|1,3,2,4,5|); r3 ::= #FLIST{INT}(|1,2,5,4,3|); r4 ::= #FLIST{INT}(|1,3,2,5,4|); test("Dfs:"+t2.str, t2.equals(r1) or t2.equals(r2) or t2.equals(r3) or t2.equals(r4), true); finish; end; node_test(s: STR): BOOL is if (s.cursor.int > 7) then return(true) else return(false) end; end; print_graph(msg: STR,g: $UGRAPH{STR}) is #OUT+"\n*****************\n"+msg+"\n*****************\n"; #OUT+g.str +"\n********************************************\n"; end; compare_to_standard(msg: STR, g: $UGRAPH{STR}) is -- Test a graph assuming that it is of the form below -- 0 1 7 -- \/\ \ -- 2 3 4 -- |/ / -- 5 -- | -- 6 print_graph(msg,g); na: ARRAY{STR} := #(g.n_nodes); loop na.set!(g.node!) end; -- na ::= g.nodes.as_array; correct_nl ::= #FLIST{STR}; correct_nl := correct_nl.push("0").push("1").push("2") .push("3").push("4").push("5").push("6").push("7"); test("test nodes",na.size.str,8.str); -- Make sure all the nodes are returned loop e ::= na.elt!; test("node:"+e,correct_nl.contains(e).str,true.str); end; test("test node 0",g.has_node("0").str,true.str); test("test node 1",g.has_node("1").str,true.str); test("test node 2",g.has_node("2").str,true.str); test("test node 3" ,g.has_node("3").str,true.str); test("test node 4",g.has_node("4").str,true.str); test("test node 5",g.has_node("5").str,true.str); test("test node 6",g.has_node("6").str,true.str); test("test node 9",g.has_node("9").str,false.str); test("has_edge 0 2",g.has_edge(#UEDGE{STR}("0","2")).str,true.str); test("has_edge 0 7",g.has_edge(#UEDGE{STR}("0","7")).str,false.str); end; verify_tsort_result(l: FLIST{STR}) is -- Check whether the result of the tsort are ok -- The actual order will vary depending on the order in -- which children are stored. first_nodes ::= l.sublist(0,3); second_nodes ::= l.sublist(3,3); third_nodes ::= l.sublist(6,2); test("First nodes contains 0",first_nodes.contains("0").str,true.str); test("First nodes contains 1",first_nodes.contains("1").str,true.str); test("First nodes contains 7",first_nodes.contains("7").str,true.str); test("Second nodes contains 2",second_nodes.contains("2").str,true.str); test("Second nodes contains 3",second_nodes.contains("3").str,true.str); test("Second nodes contains 4",second_nodes.contains("4").str,true.str); test("Last nodes",third_nodes.str,"5,6"); end; end; -- class TEST_DIGRAPH