/* -*- mode: C++ -*- */
//////////////////////////////////////////////////////////////////////////////
// FILE   : test.tol
//////////////////////////////////////////////////////////////////////////////
Text email_ = "vdebuen@tol-project.org"; 
Text link_ = ""; 
Text summary_ = "checking a simple graph";

//Write here the initial test TOL code if needed
Real numErr0 = Copy(NError);
Real numWar0 = Copy(NWarning);

Real rndSeed = 0;
Real removeRepeatedEdges = True;

#Require GraphTools;
#Embed "../define.random.graph.tol";

Set vertex.names_ = graph::get.vertex.names(?);

Real ok.1 = Card(vertex.names)==Card(vertex.names_);

Real vertex.idx = IntRand(1,vertex.num);

Text vertex.name_ = graph::get.vertex.name(vertex.idx);
Real ok.2 = vertex.name_==vertex.names[vertex.idx];

Real edge.idx = 
{
  Real aux = IntRand(1,edge.num);
  Set  info = graph::get.edge.features(aux);
  graph::get.edge.index(info[1], info[2])
};

Set edge.info = graph::get.edge.features(edge.idx);
Real edge.idx.1 = graph::get.edge.index(edge.info[1], edge.info[2]);
Real edge.idx.2 = graph::get.edge.index(edge.info[2], edge.info[1]);

WriteLn("edge.idx = "<<edge.idx);
WriteLn("edge.idx.1 = "<<edge.idx.1);
WriteLn("edge.idx.2 = "<<edge.idx.2);

Real ok.3_ = edge.idx.1==edge.idx;
Real ok.4_ = edge.idx.2==edge.idx;

Real ok.3 = ?;
Real ok.4 = ?;

Real If(directed,
{
   Real ok.3 := ok.3_ | ok.4_;
   Real ok.4 := ok.3_ | ok.4_
},
{
   Real ok.3 := ok.3_;
   Real ok.4 := ok.3_
});

Real high = MatDat(data,edge.idx,4);
Real high.1 = graph::get.edge.feature(edge.idx,4);
Real high.2 = graph::get.edge.feature(edge.idx,"Hight");
Real ok.5 = Eq(high,high.1,high.2);

Set {
  Real OSFilRemove("graph.oza");
  Real t1 := Copy(Time);
  WriteLn("Creating time "<<(t1-t0)+" seconds");
  Real Ois.Store([[graph]],"graph.oza");
  Real t2 = Copy(Time);
  WriteLn("Saving OIS time "<<(t2-t1)+" seconds");
  Set load = { Include("graph.oza") };
  Real t3 = Copy(Time);
  WriteLn("Loading OIS time "<<(t3-t2)+" seconds");
  load
};


Real numErr1 = Copy(NError);
Real numWar1 = Copy(NWarning);

Set partialResults_ = [[numErr0, numErr1, 
                        ok.1, ok.2, ok.3, ok.4, ok.5]];

//This is a messure of the success of the test 
Real quality_ = And(numErr1 == numErr0, 
                    numWar1 <= numWar0+1, 
                    ok.1, ok.2, ok.3, ok.4, ok.5);

//Return the results 
Set resultStr_ = @strTestStatus(summary_, link_, quality_,
                  "Partial results = "<<partialResults_,
                  "NO DBServerType", "NO DBServerHost", "NO DBAlias",
                  email_);
WriteLn(""<<resultStr_);
resultStr_

/* */

