test/lgf_test.cc
author Alpar Juttner <alpar@cs.elte.hu>
Tue, 02 Aug 2011 18:13:34 +0200
changeset 922 54464584b157
child 927 d303bfa8b1ed
child 930 b96574ff36ec
permissions -rw-r--r--
Allow lgf file without Arc maps (#382)

A single '-' character in the @arcs sectio header indicates that
there is no arc map.
     1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library.
     4  *
     5  * Copyright (C) 2003-2011
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     9  * Permission to use, modify and distribute this software is granted
    10  * provided that this copyright notice appears in all copies. For
    11  * precise terms see the accompanying LICENSE file.
    12  *
    13  * This software is provided "AS IS" with no warranty of any kind,
    14  * express or implied, and with no claim as to its suitability for any
    15  * purpose.
    16  *
    17  */
    18 
    19 #include <lemon/list_graph.h>
    20 #include <lemon/lgf_reader.h>
    21 #include "test_tools.h"
    22 
    23 using namespace lemon;
    24 
    25 char test_lgf[] =
    26   "@nodes\n"
    27   "label\n"
    28   "0\n"
    29   "1\n"
    30   "@arcs\n"
    31   "     label\n"
    32   "0 1  0\n"
    33   "1 0  1\n"
    34   "@attributes\n"
    35   "source 0\n"
    36   "target 1\n";
    37 
    38 char test_lgf_nomap[] =
    39   "@nodes\n"
    40   "label\n"
    41   "0\n"
    42   "1\n"
    43   "@arcs\n"
    44   "     -\n"
    45   "0 1\n";
    46 
    47 char test_lgf_bad1[] =
    48   "@nodes\n"
    49   "label\n"
    50   "0\n"
    51   "1\n"
    52   "@arcs\n"
    53   "     - another\n"
    54   "0 1\n";
    55 
    56 char test_lgf_bad2[] =
    57   "@nodes\n"
    58   "label\n"
    59   "0\n"
    60   "1\n"
    61   "@arcs\n"
    62   "     label -\n"
    63   "0 1\n";
    64 
    65 
    66 int main() 
    67 {
    68   {
    69     ListDigraph d; 
    70     ListDigraph::Node s,t;
    71     ListDigraph::ArcMap<int> label(d);
    72     std::istringstream input(test_lgf);
    73     digraphReader(d, input).
    74       node("source", s).
    75       node("target", t).
    76       arcMap("label", label).
    77       run();
    78     check(countNodes(d) == 2,"There should be 2 nodes");
    79     check(countArcs(d) == 2,"There should be 2 arcs");
    80   }
    81   {
    82     ListGraph g;
    83     ListGraph::Node s,t;
    84     ListGraph::EdgeMap<int> label(g);
    85     std::istringstream input(test_lgf);
    86     graphReader(g, input).
    87       node("source", s).
    88       node("target", t).
    89       edgeMap("label", label).
    90       run();
    91     check(countNodes(g) == 2,"There should be 2 nodes");
    92     check(countEdges(g) == 2,"There should be 2 arcs");
    93   }
    94 
    95   {
    96     ListDigraph d; 
    97     std::istringstream input(test_lgf_nomap);
    98     digraphReader(d, input).
    99       run();
   100     check(countNodes(d) == 2,"There should be 2 nodes");
   101     check(countArcs(d) == 1,"There should be 1 arc");
   102   }
   103   {
   104     ListGraph g;
   105     std::istringstream input(test_lgf_nomap);
   106     graphReader(g, input).
   107       run();
   108     check(countNodes(g) == 2,"There should be 2 nodes");
   109     check(countEdges(g) == 1,"There should be 1 edge");
   110   }
   111 
   112   {
   113     ListDigraph d; 
   114     std::istringstream input(test_lgf_bad1);
   115     bool ok=false;
   116     try {
   117       digraphReader(d, input).
   118         run();
   119     }
   120     catch (FormatError& error) 
   121       {
   122         ok = true;
   123       }
   124     check(ok,"FormatError exception should have occured");
   125   }
   126   {
   127     ListGraph g;
   128     std::istringstream input(test_lgf_bad1);
   129     bool ok=false;
   130     try {
   131       graphReader(g, input).
   132         run();
   133     }
   134     catch (FormatError& error)
   135       {
   136         ok = true;
   137       }
   138     check(ok,"FormatError exception should have occured");
   139   }
   140 
   141   {
   142     ListDigraph d; 
   143     std::istringstream input(test_lgf_bad2);
   144     bool ok=false;
   145     try {
   146       digraphReader(d, input).
   147         run();
   148     }
   149     catch (FormatError& error)
   150       {
   151         ok = true;
   152       }
   153     check(ok,"FormatError exception should have occured");
   154   }
   155   {
   156     ListGraph g;
   157     std::istringstream input(test_lgf_bad2);
   158     bool ok=false;
   159     try {
   160       graphReader(g, input).
   161         run();
   162     }
   163     catch (FormatError& error)
   164       {
   165         ok = true;
   166       }
   167     check(ok,"FormatError exception should have occured");
   168   }
   169 }