alpar@209: /* -*- mode: C++; indent-tabs-mode: nil; -*-
alpar@96:  *
alpar@209:  * This file is a part of LEMON, a generic C++ optimization library.
alpar@96:  *
alpar@440:  * Copyright (C) 2003-2009
alpar@96:  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@96:  * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@96:  *
alpar@96:  * Permission to use, modify and distribute this software is granted
alpar@96:  * provided that this copyright notice appears in all copies. For
alpar@96:  * precise terms see the accompanying LICENSE file.
alpar@96:  *
alpar@96:  * This software is provided "AS IS" with no warranty of any kind,
alpar@96:  * express or implied, and with no claim as to its suitability for any
alpar@96:  * purpose.
alpar@96:  *
alpar@96:  */
alpar@96: 
alpar@96: #include <string>
alpar@96: #include <iostream>
alpar@96: 
alpar@96: #include <lemon/concepts/path.h>
alpar@96: #include <lemon/concepts/digraph.h>
alpar@96: 
alpar@96: #include <lemon/path.h>
alpar@96: #include <lemon/list_graph.h>
alpar@96: 
alpar@96: #include "test_tools.h"
alpar@96: 
alpar@96: using namespace std;
alpar@96: using namespace lemon;
alpar@96: 
alpar@96: void check_concepts() {
alpar@96:   checkConcept<concepts::Path<ListDigraph>, concepts::Path<ListDigraph> >();
alpar@96:   checkConcept<concepts::Path<ListDigraph>, Path<ListDigraph> >();
alpar@96:   checkConcept<concepts::Path<ListDigraph>, SimplePath<ListDigraph> >();
alpar@96:   checkConcept<concepts::Path<ListDigraph>, StaticPath<ListDigraph> >();
alpar@96:   checkConcept<concepts::Path<ListDigraph>, ListPath<ListDigraph> >();
alpar@96: }
alpar@96: 
alpar@990: // Check if proper copy consructor is called (use valgrind for testing)
alpar@990: template<class _Path>
alpar@990: void checkCopy()
alpar@990: {
alpar@990:   ListDigraph g;
alpar@990:   ListDigraph::Arc a  = g.addArc(g.addNode(), g.addNode());
alpar@990:   
alpar@990:   _Path p,q;
alpar@990:   p.addBack(a);
alpar@990:   q=p;
alpar@990:   _Path r(p);
alpar@990:   StaticPath<ListDigraph> s(r);
alpar@990: }
alpar@990:   
alpar@96: int main() {
alpar@209:   check_concepts();
alpar@990: 
alpar@990:   checkCopy<Path<ListDigraph> >();
alpar@990:   checkCopy<SimplePath<ListDigraph> >();
alpar@990:   checkCopy<ListPath<ListDigraph> >();
alpar@990: 
alpar@990:   ListDigraph g;
alpar@990:   ListDigraph::Arc a  = g.addArc(g.addNode(), g.addNode());
alpar@990:   
alpar@990:   Path<ListDigraph> p;
alpar@990:   StaticPath<ListDigraph> q,r;
alpar@990:   p.addBack(a);
alpar@990:   q=p;
alpar@990:   r=q;
alpar@990:   StaticPath<ListDigraph> s(q);
alpar@990: 
alpar@96:   return 0;
alpar@96: }