/*! @header FTGraphInfoDBTEST @abstract Module of FT @availability OS X, GNUstep @copyright 2004, 2005, 2006 Free Software Foundation, Inc. Author: Oliver Langer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  -------------------------------------------------------------------------
  Modification history

  12.06.06 ola     initial version
  -------------------------------------------------------------------------
  
*/ #include #define _maxNodes 100 #define _nodesToDelete 50 @implementation FTGraphInfoDBTEST - testInfoDB { id graphManager; id graph; id graphId; id nid; id objectToIdMapper; id graphIdMapper; id node; id transaction; id nodeIterator; int i; NSMutableSet *nodeIds; NSLog( @"FTGraphInfoDBTEST::testInfoDB: BEGINNING...." ); EC_AUTORELEASEPOOL_BEGIN objectToIdMapper = [session defaultObjectToIdMapper]; graphManager = [session graphManager]; NSLog( @"Now creating graph..." ); transaction = [session beginTransactionWithParent: nil withSettings: nil]; graphId = [objectToIdMapper mapObject: @"testInfoDBGraph"]; graph = [graphManager createGraphWithId: graphId]; graphIdMapper = [[graph objectToIdMapper] retain]; nodeIds = [[[NSMutableSet alloc] init] autorelease]; NSLog( @"Adding %u nodes to database - this may take some time...", _maxNodes ); for( i = 0; i < _maxNodes; i++ ) { NSString *s = [NSString stringWithFormat: @"node-%d", i]; nid = [graphIdMapper mapObject: s]; [nodeIds addObject: nid]; node = [graph createNodeWithId: nid]; } [transaction commit]; NSLog( @"Written %u nodes!", [nodeIds count] ); [graph close]; graphId = [objectToIdMapper mapObject: @"testInfoDBGraph"]; graph = [graphManager graphWithId: graphId]; NSLog( @"Now reading all node ids from database - this may take some time..." ); transaction = [session beginTransactionWithParent: nil withSettings: nil]; nodeIterator = [graph nodeIterator]; while( [nodeIterator hasNext] ) { node = [nodeIterator next]; nid = [node nodeId]; ECAssertTrue( [nodeIds containsObject: nid], @"node returned which has NOT "\ "been added before!" ); [nodeIds removeObject: nid]; } NSLog( @"Read %u nodes!", _maxNodes - [nodeIds count] ); [transaction commit]; [graph close]; if( 0 != [nodeIds count] ) { /* some nodes have not been returned by the iterator: */ NSLog( @"Some nodes have NOT been returned!" ); [[[ECAssertionException alloc] initWithAssertionInfo: @"FTGraphInfoDBTEST: Some nodes have NOT been "\ "returned!" ] raise]; } NSLog( @"Now deleting %u nodes...", _nodesToDelete ); graphId = [objectToIdMapper mapObject: @"testInfoDBGraph"]; graph = [graphManager graphWithId: graphId]; transaction = [session beginTransactionWithParent: nil withSettings: nil]; i = _nodesToDelete; nodeIterator = [graph nodeIterator]; while( [nodeIterator hasNext] && i > 0) { node = [nodeIterator next]; [graph removeNode: node]; i--; } [transaction commit]; [graph close]; NSLog( @"Now checking existence of rest of nodes after deletion ..." ); graphId = [objectToIdMapper mapObject: @"testInfoDBGraph"]; graph = [graphManager graphWithId: graphId]; transaction = [session beginTransactionWithParent: nil withSettings: nil]; nodeIds = [[[NSMutableSet alloc] init] autorelease]; nodeIterator = [graph nodeIterator]; while( [nodeIterator hasNext] ) { node = [nodeIterator next]; [nodeIds addObject: [node nodeId]]; } NSLog( @"Found a rest of %u nodes...", [nodeIds count] ); ECAssertTrue( [nodeIds count] == _maxNodes-_nodesToDelete, @"Incorrect number of nodes within graph after deletion of nodes!" ); [transaction commit]; [graph close]; EC_AUTORELEASEPOOL_END NSLog( @"FTGraphInfoDBTEST::testInfoDB: FINISHED." ); return self; } @end