Current File : //opt/RZphp73/includes/test/Image_GraphViz/tests/test9.phpt
--TEST--
Unit test for graph with constrained rank clusters
--FILE--
<?php

/**
 * Test 9: "Graph with constrained ranks"
 *
 * Graph definition taken from GraphViz documentation
 *
 * @category Image
 * @package  Image_GraphViz
 * @author   Philippe Jausions <jausions@php.net>
 */
require_once 'Image/GraphViz.php';

$graph = new Image_GraphViz(true, array('ranksep' => .75),
                            'asde91', false);

/* the time-line graph */
$graph->addEdge(array('past' => 1978));
$graph->addEdge(array(1978 => 1980));
$graph->addEdge(array(1980 => 1982));
$graph->addEdge(array(1982 => 1983));
$graph->addEdge(array(1983 => 1985));
$graph->addEdge(array(1985 => 1986));
$graph->addEdge(array(1986 => 1987));
$graph->addEdge(array(1987 => 1988));
$graph->addEdge(array(1988 => 1989));
$graph->addEdge(array(1989 => 1990));
$graph->addEdge(array(1990 => 'future'));

/* program types graph */
$graph->addSubgraph('type', '', array('rank' => 'same'));

$graph->addNode('Software IS', null, 'type');
$graph->addNode('Configuration Mgt', null, 'type');
$graph->addNode('Architecture & Libraries', null, 'type');
$graph->addNode('Process', null, 'type');

/* time graphs */
$graph->addSubgraph('past', '', array('rank' => 'same'));
$graph->addSubgraph(1978, '', array('rank' => 'same'));
$graph->addSubgraph(1980, '', array('rank' => 'same'));
$graph->addSubgraph(1982, '', array('rank' => 'same'));
$graph->addSubgraph(1983, '', array('rank' => 'same'));
$graph->addSubgraph(1985, '', array('rank' => 'same'));
$graph->addSubgraph(1986, '', array('rank' => 'same'));
$graph->addSubgraph(1987, '', array('rank' => 'same'));
$graph->addSubgraph(1988, '', array('rank' => 'same'));
$graph->addSubgraph(1989, '', array('rank' => 'same'));
$graph->addSubgraph(1990, '', array('rank' => 'same'));
$graph->addSubgraph('future', '', array('rank' => 'same'));

/* programs */
$graph->addNode('Bourne sh', null, 'past');
$graph->addNode('make', null, 'past');
$graph->addNode('SCCS', null, 'past');
$graph->addNode('yacc', null, 'past');
$graph->addNode('cron', null, 'past');

$graph->addNode('Reiser cpp', null, 1978);
$graph->addNode('Cshell', null, 1978);

$graph->addNode('emacs', null, 1980);
$graph->addNode('build', null, 1980);
$graph->addNode('vi', null, 1980);

$graph->addNode('<curses>', null, 1982);
$graph->addNode('RCS', null, 1982);
$graph->addNode('IMX', null, 1982);
$graph->addNode('SYNED', null, 1982);

$graph->addNode('ksh', null, 1983);
$graph->addNode('IFS', null, 1983);
$graph->addNode('TTU', null, 1983);

$graph->addNode('nmake', null, 1985);
$graph->addNode('Peggy', null, 1985);

$graph->addNode('ncpp', null, 1986);
$graph->addNode('ksh-i', null, 1986);
$graph->addNode('<curses-i>', null, 1986);
$graph->addNode('PG2', null, 1986);
$graph->addNode('C*', null, 1986);

$graph->addNode('Ansi cpp', null, 1987);
$graph->addNode('nmake 2.0', null, 1987);
$graph->addNode('3D File System', null, 1987);
$graph->addNode('fdelta', null, 1987);
$graph->addNode('DAG', null, 1987);
$graph->addNode('CSAS', null, 1987);

$graph->addNode('CIA', null, 1988);
$graph->addNode('SBCS', null, 1988);
$graph->addNode('ksh-88', null, 1988);
$graph->addNode('PEGASUS/PML', null, 1988);
$graph->addNode('PAX', null, 1988);
$graph->addNode('backtalk', null, 1988);

$graph->addNode('CIA++', null, 1989);
$graph->addNode('APP', null, 1989);
$graph->addNode('SHIP', null, 1989);
$graph->addNode('DataShare', null, 1989);
$graph->addNode('ryacc', null, 1989);
$graph->addNode('Mosaic', null, 1989);

$graph->addNode('libft', null, 1990);
$graph->addNode('CoShell', null, 1990);
$graph->addNode('DIA', null, 1990);
$graph->addNode('IFS-i', null, 1990);
$graph->addNode('kyacc', null, 1990);
$graph->addNode('sfio', null, 1990);
$graph->addNode('yeast', null, 1990);
$graph->addNode('ML-X', null, 1990);
$graph->addNode('DOT', null, 1990);

$graph->addNode('Adv. Software Technology', null, 'future');

/* hierachy */
$graph->addEdge(array('SCCS' => 'RCS'));
$graph->addEdge(array('SCCS' => '3D File System'));
$graph->addEdge(array('SCCS' => 'nmake'));
$graph->addEdge(array('make' => 'nmake'));
$graph->addEdge(array('make' => 'build'));
$graph->addEdge(array('Bourne sh' => 'Cshell'));
$graph->addEdge(array('Bourne sh' => 'ksh'));
$graph->addEdge(array('yacc' => 'ryacc'));
$graph->addEdge(array('cron' => 'yeast'));

$graph->addEdge(array('Reiser cpp' => 'ncpp'));
$graph->addEdge(array('Cshell' => 'ksh'));

$graph->addEdge(array('build' => 'nmake 2.0'));
$graph->addEdge(array('vi' => 'ksh'));
$graph->addEdge(array('vi' => '<curses>'));
$graph->addEdge(array('emacs' => 'ksh'));

$graph->addEdge(array('RCS' => 'SBCS'));
$graph->addEdge(array('RCS' => 'fdelta'));
$graph->addEdge(array('<curses>' => '<curses-i>'));
$graph->addEdge(array('SYNED' => 'Peggy'));
$graph->addEdge(array('IMX' => 'TTU'));

$graph->addEdge(array('ksh' => 'nmake'));
$graph->addEdge(array('ksh' => 'ksh-i'));
$graph->addEdge(array('ksh' => 'ksh-88'));
$graph->addEdge(array('IFS' => '<curses-i>'));
$graph->addEdge(array('IFS' => 'sfio'));
$graph->addEdge(array('IFS' => 'IFS-i'));
$graph->addEdge(array('TTU' => 'PG2'));

$graph->addEdge(array('nmake' => 'ksh'));
$graph->addEdge(array('nmake' => 'ncpp'));
$graph->addEdge(array('nmake' => '3D File System'));
$graph->addEdge(array('nmake' => 'nmake 2.0'));
$graph->addEdge(array('Peggy' => 'PEGASUS/PML'));
$graph->addEdge(array('Peggy' => 'ryacc'));

$graph->addEdge(array('C*' => 'CSAS'));
$graph->addEdge(array('ncpp' => 'Ansi cpp'));
$graph->addEdge(array('<curses-i>' => 'fdelta'));
$graph->addEdge(array('ksh-i' => 'ksh-88'));
$graph->addEdge(array('PG2' => 'backtalk'));

$graph->addEdge(array('DAG' => 'Sotware IS'));
$graph->addEdge(array('DAG' => 'DOT'));
$graph->addEdge(array('DAG' => 'DIA'));
$graph->addEdge(array('CSAS' => 'CIA'));
$graph->addEdge(array('Ansi cpp' => 'Configuration Mgt'));
$graph->addEdge(array('fdelta' => 'SBCS'));
$graph->addEdge(array('fdelta' => 'PAX'));
$graph->addEdge(array('3D File System' => 'Configuration Mgt'));
$graph->addEdge(array('nmake 2.0' => 'Configuration Mgt'));
$graph->addEdge(array('nmake 2.0' => 'CoShell'));

$graph->addEdge(array('CIA' => 'CIA++'));
$graph->addEdge(array('CIA' => 'DIA'));
$graph->addEdge(array('SBCS' => 'Configuration Mgt'));
$graph->addEdge(array('PAX' => 'SHIP'));
$graph->addEdge(array('ksh-88' => 'Configuration Mgt'));
$graph->addEdge(array('ksh-88' => 'Architecture & Libraries'));
$graph->addEdge(array('ksh-88' => 'sfio'));
$graph->addEdge(array('PEGASUS/PML' => 'ML-X'));
$graph->addEdge(array('PEGASUS/PML' => 'Architecture & Libraries'));
$graph->addEdge(array('backtalk' => 'DataShare'));

$graph->addEdge(array('CIA++' => 'Software IS'));
$graph->addEdge(array('APP' => 'DIA'));
$graph->addEdge(array('APP' => 'Software IS'));
$graph->addEdge(array('SHIP' => 'Configuration Mgt'));
$graph->addEdge(array('DataShare' => 'Architecture & Libraries'));
$graph->addEdge(array('ryacc' => 'kyacc'));
$graph->addEdge(array('Mosaic' => 'Process'));

$graph->addEdge(array('DOT' => 'Software IS'));
$graph->addEdge(array('DIA' => 'Software IS'));
$graph->addEdge(array('libft' => 'Software IS'));
$graph->addEdge(array('CoShell' => 'Configuration Mgt'));
$graph->addEdge(array('CoShell' => 'Architecture & Libraries'));
$graph->addEdge(array('sfio' => 'Architecture & Libraries'));
$graph->addEdge(array('IFS-i' => 'Architecture & Libraries'));
$graph->addEdge(array('ML-X' => 'Architecture & Libraries'));
$graph->addEdge(array('kyacc' => 'Architecture & Libraries'));
$graph->addEdge(array('yeast' => 'Process'));

$graph->addEdge(array('Architecture & Libraries' => 'Adv. Software Technology'));
$graph->addEdge(array('Software IS' => 'Adv. Software Technology'));
$graph->addEdge(array('Configuration Mgt' => 'Adv. Software Technology'));
$graph->addEdge(array('Process' => 'Adv. Software Technology'));

echo $graph->parse();

?>
--EXPECT--
digraph asde91 {
    ranksep=0.75;
    subgraph type {
        graph [ rank=same ];
        "Software IS";
        "Configuration Mgt";
        "Architecture & Libraries";
        Process;
    }
    subgraph past {
        graph [ rank=same ];
        "Bourne sh";
        make;
        SCCS;
        yacc;
        cron;
    }
    subgraph 1978 {
        graph [ rank=same ];
        "Reiser cpp";
        Cshell;
    }
    subgraph 1980 {
        graph [ rank=same ];
        emacs;
        build;
        vi;
    }
    subgraph 1982 {
        graph [ rank=same ];
        "<curses>";
        RCS;
        IMX;
        SYNED;
    }
    subgraph 1983 {
        graph [ rank=same ];
        ksh;
        IFS;
        TTU;
    }
    subgraph 1985 {
        graph [ rank=same ];
        nmake;
        Peggy;
    }
    subgraph 1986 {
        graph [ rank=same ];
        ncpp;
        "ksh-i";
        "<curses-i>";
        PG2;
        "C*";
    }
    subgraph 1987 {
        graph [ rank=same ];
        "Ansi cpp";
        "nmake 2.0";
        "3D File System";
        fdelta;
        DAG;
        CSAS;
    }
    subgraph 1988 {
        graph [ rank=same ];
        CIA;
        SBCS;
        "ksh-88";
        "PEGASUS/PML";
        PAX;
        backtalk;
    }
    subgraph 1989 {
        graph [ rank=same ];
        "CIA++";
        APP;
        SHIP;
        DataShare;
        ryacc;
        Mosaic;
    }
    subgraph 1990 {
        graph [ rank=same ];
        libft;
        CoShell;
        DIA;
        "IFS-i";
        kyacc;
        sfio;
        yeast;
        "ML-X";
        DOT;
    }
    subgraph future {
        graph [ rank=same ];
        "Adv. Software Technology";
    }
    past -> 1978;
    1978 -> 1980;
    1980 -> 1982;
    1982 -> 1983;
    1983 -> 1985;
    1985 -> 1986;
    1986 -> 1987;
    1987 -> 1988;
    1988 -> 1989;
    1989 -> 1990;
    1990 -> future;
    SCCS -> RCS;
    SCCS -> "3D File System";
    SCCS -> nmake;
    make -> nmake;
    make -> build;
    "Bourne sh" -> Cshell;
    "Bourne sh" -> ksh;
    yacc -> ryacc;
    cron -> yeast;
    "Reiser cpp" -> ncpp;
    Cshell -> ksh;
    build -> "nmake 2.0";
    vi -> ksh;
    vi -> "<curses>";
    emacs -> ksh;
    RCS -> SBCS;
    RCS -> fdelta;
    "<curses>" -> "<curses-i>";
    SYNED -> Peggy;
    IMX -> TTU;
    ksh -> nmake;
    ksh -> "ksh-i";
    ksh -> "ksh-88";
    IFS -> "<curses-i>";
    IFS -> sfio;
    IFS -> "IFS-i";
    TTU -> PG2;
    nmake -> ksh;
    nmake -> ncpp;
    nmake -> "3D File System";
    nmake -> "nmake 2.0";
    Peggy -> "PEGASUS/PML";
    Peggy -> ryacc;
    "C*" -> CSAS;
    ncpp -> "Ansi cpp";
    "<curses-i>" -> fdelta;
    "ksh-i" -> "ksh-88";
    PG2 -> backtalk;
    DAG -> "Sotware IS";
    DAG -> DOT;
    DAG -> DIA;
    CSAS -> CIA;
    "Ansi cpp" -> "Configuration Mgt";
    fdelta -> SBCS;
    fdelta -> PAX;
    "3D File System" -> "Configuration Mgt";
    "nmake 2.0" -> "Configuration Mgt";
    "nmake 2.0" -> CoShell;
    CIA -> "CIA++";
    CIA -> DIA;
    SBCS -> "Configuration Mgt";
    PAX -> SHIP;
    "ksh-88" -> "Configuration Mgt";
    "ksh-88" -> "Architecture & Libraries";
    "ksh-88" -> sfio;
    "PEGASUS/PML" -> "ML-X";
    "PEGASUS/PML" -> "Architecture & Libraries";
    backtalk -> DataShare;
    "CIA++" -> "Software IS";
    APP -> DIA;
    APP -> "Software IS";
    SHIP -> "Configuration Mgt";
    DataShare -> "Architecture & Libraries";
    ryacc -> kyacc;
    Mosaic -> Process;
    DOT -> "Software IS";
    DIA -> "Software IS";
    libft -> "Software IS";
    CoShell -> "Configuration Mgt";
    CoShell -> "Architecture & Libraries";
    sfio -> "Architecture & Libraries";
    "IFS-i" -> "Architecture & Libraries";
    "ML-X" -> "Architecture & Libraries";
    kyacc -> "Architecture & Libraries";
    yeast -> Process;
    "Architecture & Libraries" -> "Adv. Software Technology";
    "Software IS" -> "Adv. Software Technology";
    "Configuration Mgt" -> "Adv. Software Technology";
    Process -> "Adv. Software Technology";
}