[cgma-dev] r3398 - in cgm/trunk: init test
sjackson at cae.wisc.edu
sjackson at cae.wisc.edu
Fri Dec 4 16:31:45 CST 2009
Author: sjackson
Date: 2009-12-04 16:31:45 -0600 (Fri, 04 Dec 2009)
New Revision: 3398
Added:
cgm/trunk/test/init.cpp
Modified:
cgm/trunk/init/InitCGMA.cpp
cgm/trunk/test/Makefile.am
Log:
Make InitCGMA::initialize_cgma safe to call multiple times. It will
emit an error message if called with a default engine parameter that
differs from one specified in the first call to the function.
Add a new test case to verify that this works as expected.
Modified: cgm/trunk/init/InitCGMA.cpp
===================================================================
--- cgm/trunk/init/InitCGMA.cpp 2009-12-03 23:08:55 UTC (rev 3397)
+++ cgm/trunk/init/InitCGMA.cpp 2009-12-04 22:31:45 UTC (rev 3398)
@@ -5,6 +5,7 @@
#include "FacetModifyEngine.hpp"
#include "GeometryQueryTool.hpp"
#include "GeometryModifyTool.hpp"
+#include "CubitUtil.hpp"
#include <ctype.h>
@@ -49,9 +50,28 @@
return !*t;
}
+static bool has_been_initialized = false;
+static char* first_engine_name = NULL;
+
CubitStatus InitCGMA::initialize_cgma( const char* default_engine_name )
{
+ if( has_been_initialized ){
+ // CGM is already initialized. Return success if previous initialization had
+ // the same parameter, failure otherwise.
+ if( default_engine_name == first_engine_name ){
+ return CUBIT_SUCCESS;
+ }
+ else if( default_engine_name && first_engine_name &&
+ streq_nocase( default_engine_name, first_engine_name )){
+ return CUBIT_SUCCESS;
+ }
+ else{
+ PRINT_ERROR( "initialize_cgma() called again, but default engines differ.\n" );
+ return CUBIT_FAILURE;
+ }
+ }
+
CGMApp::instance()->startup( 0, NULL );
GeometryModifyEngine* default_engine = 0;
bool ignore_default = false;
@@ -103,5 +123,12 @@
return rval;
}
+ // set has_been_initialized only if everything worked
+ if( default_engine_name ){
+ first_engine_name = CubitUtil::util_strdup(default_engine_name);
+ }
+ has_been_initialized = true;
+
return CUBIT_SUCCESS;
}
+
Modified: cgm/trunk/test/Makefile.am
===================================================================
--- cgm/trunk/test/Makefile.am 2009-12-03 23:08:55 UTC (rev 3397)
+++ cgm/trunk/test/Makefile.am 2009-12-04 22:31:45 UTC (rev 3398)
@@ -12,7 +12,7 @@
-I$(srcdir) \
$(OCC_INC_FLAG)
-TESTS = sheet brick
+TESTS = init sheet brick
if build_ACIS
TESTS += webcut hollow_acis
else
@@ -49,7 +49,10 @@
operation_LDFLAGS = $(LDFLAGS) $(LINK_FLAGS)
brick_SOURCES = brick.cpp
brick_LDFLAGS = $(LDFLAGS) $(LINK_FLAGS)
+init_SOURCES = init.cpp
+init_LDFLAGS= $(LDFLAGS) $(LINK_FLAGS)
+
# Files that are used as input to tests, and therefore
# must be included in tarball for tests to run.
EXTRA_DIST = 62_shaver1.brep \
Added: cgm/trunk/test/init.cpp
===================================================================
--- cgm/trunk/test/init.cpp (rev 0)
+++ cgm/trunk/test/init.cpp 2009-12-04 22:31:45 UTC (rev 3398)
@@ -0,0 +1,32 @@
+/**
+ * \file init.cpp
+ *
+ * \brief Tests of CGM initialization / shutdown features
+ */
+#include "InitCGMA.hpp"
+
+#include <typeinfo>
+#include <assert.h>
+
+
+// main program - initialize, then send to proper function
+int main (int argc, char **argv)
+{
+ // first initialization, which should succeed
+ CubitStatus result = InitCGMA::initialize_cgma();
+ if (CUBIT_SUCCESS != result) return 1;
+
+ // second initialization, which should also succeed
+ result = InitCGMA::initialize_cgma();
+ if(CUBIT_SUCCESS != result) return 1;
+
+ // now try again, with a different argument; should fail.
+ result = InitCGMA::initialize_cgma( "facet" );
+ if(CUBIT_FAILURE != result) return 1;
+
+ return 0;
+
+}
+
+
+
More information about the cgma-dev
mailing list