00001
00002
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