test_digraph_views.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 
---------------------------> Sather 1.1 source file <--------------------------
-- Author: Benedict A. Gomes <gomes@samosa.ICSI.Berkeley.EDU>
-- Copyright (C) 1995, International Computer Science Institute
-- $Id: test_digraph_views.sa,v 1.6 1996/07/13 05:42:07 gomes Exp $
--
-- 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_DIGRAPH_VIEWS

class TEST_DIGRAPH_VIEWS is -- Testing various graph views include TEST; indi(s,d: INT): DIEDGE{INT} is return #DIEDGE{INT}(s,d) end; main is class_name("DIGRAPH_VIEWS"); g2 ::= #DIGRAPH{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 -- Testing node view g2nv ::= #DIGRAPH_NODE_SET_VIEW{INT}(g2); test("num nodes",g2nv.size,5); test("nodes:"+g2nv.str, g2nv.equals(#SET{INT}(#ARRAY{INT}(|1,2,3,4,5|))),true); -- Testing edge view g2ev ::= #DIGRAPH_EDGE_SET_VIEW{INT}(g2); test("num edges",g2ev.size,4); es ::= SET{DIEDGE{INT}}::create_from(|indi(1,2),indi(1,3),indi(2,4),indi(2,5)|); test("edges:"+g2ev.str,g2ev.equals(es),true); -- Testing reverse digraph view g2rev: DIGRAPH_REV_DIGRAPH_VIEW{INT}; g2rev := #(g2); #OUT+"Reversed graph:"+g2rev.str+"\n"; g2revev ::= #DIGRAPH_EDGE_SET_VIEW{INT}(g2rev); reves ::= SET{DIEDGE{INT}}::create_from(|indi(2,1),indi(3,1),indi(4,2),indi(5,2)|); test("reveedges:"+g2revev.str,reves.equals(g2revev),true); rev_nodes ::= #SET{INT}(#ARRAY{INT}(|1,2,3,4,5|)); g2revnv ::= #DIGRAPH_NODE_SET_VIEW{INT}(g2rev); test("revnodes:"+g2revnv.str,rev_nodes.equals(g2revnv),true); -- Filter graph view g ::= #DIGRAPH{INT}; g.add_node(1);g.add_node(2);g.add_node(3);g.add_node(4); g.add_node(5);g.add_node(0);g.connect(3,0); g.connect(1,2).connect(2,4).connect(2,5).connect(1,3); -- 1 -- /\ -- 2 3 -- / \ \ --4 5 0 -- Specify a node filter node_filter:ROUT{INT}:BOOL := bind(_.is_lt(5)); -- Specify an edge filter edge_filter:ROUT{DIEDGE{INT}}:BOOL := bind(my_edge_filter(_)); -- Create the filter view fg:FILTERGRAPH_DIGRAPH_VIEW{INT}; fg := #(g,node_filter,edge_filter); #OUT+fg.str+"\n"; -- Get the filtered edges fg_ev: DIGRAPH_EDGE_SET_VIEW{INT}; fg_ev := #(fg); fg_evres ::= #SET{DIEDGE{INT}}(#ARRAY{DIEDGE{INT}}(|indi(1,2),indi(1,3),indi(2,4)|)); test("filter edges:"+fg_ev.str,fg_ev.equals(fg_evres),true); -- fv is now of the form -- 1 -- /\ -- 2 3 -- / <- pruned by edge_filter --4 0 -- Testing supergraph -- gsup: SUPERGRAPH_DIGRAPH_VIEW{INT}; -- gsup := #(g2); -- gsup.add_node(7).add_node(10).connect(3,7).connect(7,10); -- Edge view of a supergraph -- gsupev:DIGRAPH_EDGE_SET_VIEW{INT}; -- gsupev := #(gsup); -- supeds ::= #SET{DIEDGE{INT}}(|indi(1,2),indi(1,3),indi(2,4), -- indi(2,5),indi(3,7),indi(7,10)|); -- test("supeds:"+gsupev,supeds=gsupev,true); finish; end; my_edge_filter(e: DIEDGE{INT}): BOOL is -- A filter that only returns edges starting at 1 or 2 return e.first <= 2; end; end; -- class TEST_DIGRAPH_VIEW