Go to Overview over all GrAL packages.
Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

test/bijective-mapping/test-bijective.C

Go to the documentation of this file.
00001 
00002 // $LICENSE
00003 
00004 
00005 #include <iostream.h>
00006 #include <fstream.h>
00007 #include <string>
00008 
00009 #include "Utility/pre-post-conditions.h"
00010 #include "Container/bijective-mapping.h"
00011 
00012 
00013 int main(int argc, char* argv[]) {
00014 
00015   typedef  bijective_mapping<int,int>::domain_type domain_type;
00016   typedef  bijective_mapping<int,int>::range_type  range_type;
00017 
00018   typedef  domain_type::const_iterator domain_iter;
00019   typedef   range_type::const_iterator  range_iter;
00020 
00021   std::string mapfilename1  = "map.dat";
00022   std::string mapfilename2 = "map2.dat";
00023 
00024   int N = 10;
00025   bijective_mapping<int,int> m1;
00026 
00027   ifstream mapfile1(mapfilename1.c_str());
00028   bijective_mapping<int,int> mf1;
00029   read_bm(mf1,mapfile1);
00030   mapfile1.close();
00031 
00032   ifstream mapfile2(mapfilename2.c_str());
00033   bijective_mapping<int,int> mf2;
00034   read_bm(mf2,mapfile2);
00035   mapfile2.close();
00036   
00037   for(int i = 1; i <= N; ++i)
00038     m1[i] = -i;
00039 
00040   bijective_mapping<int,int> i1 = m1.inverse();
00041   bijective_mapping<int,int> m2 = m1;
00042   bijective_mapping<int,int> i2 = m2.inverse();
00043 
00044   cerr << "mf1:\n"; write_bm(mf1,cerr); cerr << '\n'; 
00045   cerr << "mf2:\n"; write_bm(mf2,cerr); cerr << '\n'; 
00046 
00047   cerr << "m1:\n"; write_bm(m1,cerr); cerr << '\n'; 
00048   cerr << "i1:\n"; write_bm(i1,cerr); cerr << '\n'; 
00049   cerr << "m2:\n"; write_bm(m2,cerr); cerr << '\n'; 
00050   cerr << "i2:\n"; write_bm(i2,cerr); cerr << '\n'; 
00051 
00052   cerr << "domain(m1): ";
00053   for(domain_iter d1 = m1.domain().begin(); ! (d1 == m1.domain().end()); ++d1)
00054     cerr << *d1 << ' ';
00055   cerr << '\n';
00056   cerr << "range(m1): ";
00057   for(range_iter r1 = m1.range().begin();  !(r1 == m1.range().end()); ++r1)
00058     cerr << *r1 << ' ';
00059   cerr << '\n';
00060 
00061   REQUIRE( (m1.domain().size() == m1.range().size()), "|domain| != |range|\n",1);
00062   REQUIRE( (i1.domain().size() == i1.range().size()), "|domain| != |range|\n",1);
00063 
00064   for(domain_iter di = m1.domain().begin(); !(di == m1.domain().end()); ++di) {
00065     REQUIRE( (*di == i1(m1(*di))), "inverse is not ok!\n",1);    
00066     REQUIRE( (m1(*di) == m2(*di)), "copy is not ok!\n",1);    
00067     REQUIRE( (i1(m1(*di)) == i2(m2(*di))), "inverse copies not ok!\n",1); 
00068   }
00069 
00070   for(range_iter ri = i1.range().begin(); !(ri == i1.range().end()); ++ri) {
00071     REQUIRE( m1.defined(*ri), "m1 not defined for di in range(i1)!\n",1);
00072   }
00073 }
00074 
00075 
00076 

Copyright (c) Guntram Berti 1997-2002. See the GrAL Homepage for up-to-date information.

Generated at Tue Feb 26 15:57:14 2002 for Sequence by doxygen 1.2.11-20011104 written by Dimitri van Heesch, © 1997-2000