TEST(TStr, Clr) { TStr Str = "abcdef"; TStr Empty = ""; Str.Clr(); Empty.Clr(); EXPECT_EQ(Str, ""); EXPECT_EQ(Str.Len(), 0); EXPECT_EQ(Empty, ""); EXPECT_EQ(Empty.Len(), 0); }
// Save and load directed, undirected and multi-graphs, where node names are strings void IOEdgeListStr() { const int NNodes = 1000; const int NEdges = 5000; const char *FName = "demo.graph.dat"; PNEGraph GOut, GIn; // Can also be PUNGraph or PNGraph GOut = GenRndGnm<PNEGraph>(NNodes, NEdges); // Output nodes as random strings TIntStrH OutNIdStrH; TStrHash<TInt> OutStrNIdH; // Generate unique random strings for graph TStr RandStr; for (TNEGraph::TNodeI NI = GOut->BegNI(); NI < GOut->EndNI(); NI++) { do { RandStr.Clr(); TInt RandLen = TInt::Rnd.GetUniDevInt(5, 30); for (int i = 0; i < RandLen; i++) { TStr RandChar(TInt::Rnd.GetUniDevInt(33, 126)); RandStr += RandChar; } } while (OutStrNIdH.IsKey(RandStr) || RandStr[0] == '#'); // Not unique or starts with comment OutNIdStrH.AddDat(NI.GetId(), RandStr); OutStrNIdH.AddDat(RandStr, NI.GetId()); } // Create graph file FILE *F = fopen(FName, "w"); for (TNEGraph::TEdgeI EI = GOut->BegEI(); EI < GOut->EndEI(); EI++) { TInt Src = EI.GetSrcNId(); TInt Dst = EI.GetDstNId(); fprintf(F, "%s %s\n", OutNIdStrH[Src].CStr(), OutNIdStrH[Dst].CStr()); } fclose(F); // Load edge list of strings TStrHash<TInt> InStrToNIdH; GIn = LoadEdgeListStr<PNEGraph>(FName, 0, 1, InStrToNIdH); PrintGStats<PNEGraph>("EdgeListStr - Out", GOut); PrintGStats<PNEGraph>("EdgeListStr - In", GIn); }