]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
add steps
authorfps <fps@opencascade.com>
Tue, 27 Aug 2013 15:56:27 +0000 (15:56 +0000)
committerfps <fps@opencascade.com>
Tue, 27 Aug 2013 15:56:27 +0000 (15:56 +0000)
add unit tests

24 files changed:
src/XAO/BooleanField.cxx
src/XAO/BooleanField.hxx
src/XAO/BooleanStep.cxx
src/XAO/DoubleField.cxx [new file with mode: 0644]
src/XAO/DoubleField.hxx
src/XAO/DoubleStep.cxx [new file with mode: 0644]
src/XAO/DoubleStep.hxx
src/XAO/Field.cxx
src/XAO/Field.hxx
src/XAO/IntegerField.hxx
src/XAO/IntegerStep.cxx [new file with mode: 0644]
src/XAO/IntegerStep.hxx
src/XAO/Makefile.am
src/XAO/Step.cxx
src/XAO/Step.hxx
src/XAO/StringField.cxx [new file with mode: 0644]
src/XAO/StringField.hxx
src/XAO/StringStep.cxx [new file with mode: 0644]
src/XAO/StringStep.hxx
src/XAO/tests/FieldTest.cxx [new file with mode: 0644]
src/XAO/tests/FieldTest.hxx [new file with mode: 0644]
src/XAO/tests/ImportExportTest.hxx
src/XAO/tests/Makefile.am
src/XAO/tests/XAOTests.cxx

index 5142fac32f2d201bf5275771861067692d037b33..5bfdd9cc6f642b73d88a3925df4aec3362826259 100644 (file)
 
 using namespace XAO;
 
-BooleanField::BooleanField(const XAO::Dimension dimension, const int nbComponents)
+BooleanField::BooleanField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field("", dimension, nbElements, nbComponents)
 {
-    m_dimension = dimension;
-    m_nbComponents = nbComponents;
 }
 
-BooleanField::BooleanField(const std::string name, const XAO::Dimension dimension, const int nbComponents)
+BooleanField::BooleanField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field(name, dimension, nbElements, nbComponents)
 {
-    m_dimension = dimension;
-    m_nbComponents = nbComponents;
-    m_name = name;
 }
 
-BooleanStep* BooleanField::addStep(const int step)
+BooleanStep* BooleanField::addStep(const int& step)
 {
     BooleanStep* bstep = new BooleanStep(step, m_nbElements, m_nbComponents);
     m_steps.push_back(bstep);
     return bstep;
 }
 
-BooleanStep* BooleanField::addStep(const int step, const int stamp)
+BooleanStep* BooleanField::addStep(const int& step, const int& stamp)
 {
     BooleanStep* bstep = new BooleanStep(step, stamp, m_nbElements, m_nbComponents);
     m_steps.push_back(bstep);
     return bstep;
 }
 
-BooleanStep* BooleanField::getStep(const int index)
+BooleanStep* BooleanField::getStep(const int& index)
 {
     if (index < m_steps.size())
-        return m_steps[index];
+        return (BooleanStep*)m_steps[index];
    throw SALOME_Exception("IndexOutOfRange");
 }
index 45723be9d6170feedcfaf8dfae5f7cb35b33f91b..358a6803b9bebd2f7b900ab7fd3e11fc50e787e5 100644 (file)
@@ -34,17 +34,17 @@ namespace XAO
     class BooleanField : public Field
     {
     public:
-        BooleanField(const XAO::Dimension dimension, const int nbComponents);
-        BooleanField(const std::string name, const XAO::Dimension dimension, const int nbComponents);
+        BooleanField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
+        BooleanField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::BOOLEAN; }
 
-        BooleanStep* addStep(const int step);
-        BooleanStep* addStep(const int step, const int stamp);
-        BooleanStep* getStep(const int index);
+        BooleanStep* addStep(const int& step);
+        BooleanStep* addStep(const int& step, const int& stamp);
+        BooleanStep* getStep(const int& index);
 
-    private:
-        std::vector<BooleanStep*> m_steps;
+//    private:
+//        std::vector<BooleanStep*> m_steps;
     };
 }
 
index dc1a626c914295ed8fbb94e7e6c402c182421832..3a351495e387d283eb87098b220c84bebcacd21d 100644 (file)
@@ -48,8 +48,11 @@ void BooleanStep::Init(const int& step, const int& stamp, const int& nbElements,
     m_values.reserve(m_nbElements);
     for (int i = 0; i < m_nbElements; ++i)
     {
+        std::vector<bool> row;
+        row.reserve(m_nbComponents);
         for (int j = 0; j < m_nbComponents; ++j)
-            m_values[i][j] = false;
+            row.push_back(false);
+        m_values.push_back(row);
     }
 }
 
@@ -78,7 +81,7 @@ std::vector<bool> BooleanStep::getElement(const int& element)
 
 std::vector<bool> BooleanStep::getComponent(const int& component)
 {
-    checkElement(component);
+    checkComponent(component);
 
     std::vector<bool> result;
     result.reserve(m_nbElements);
diff --git a/src/XAO/DoubleField.cxx b/src/XAO/DoubleField.cxx
new file mode 100644 (file)
index 0000000..6295a0e
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
+
+#include "DoubleField.hxx"
+#include "DoubleStep.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+
+using namespace XAO;
+
+DoubleField::DoubleField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field("", dimension, nbElements, nbComponents)
+{
+}
+
+DoubleField::DoubleField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field(name, dimension, nbElements, nbComponents)
+{
+}
+
+DoubleStep* DoubleField::addStep(const int& step)
+{
+    DoubleStep* bstep = new DoubleStep(step, m_nbElements, m_nbComponents);
+    m_steps.push_back(bstep);
+    return bstep;
+}
+
+DoubleStep* DoubleField::addStep(const int& step, const int& stamp)
+{
+    DoubleStep* bstep = new DoubleStep(step, stamp, m_nbElements, m_nbComponents);
+    m_steps.push_back(bstep);
+    return bstep;
+}
+
+DoubleStep* DoubleField::getStep(const int& index)
+{
+    if (index < m_steps.size())
+        return (DoubleStep*)m_steps[index];
+   throw SALOME_Exception("IndexOutOfRange");
+}
index 8c0657efa8f11d8e6bcdbf74790fddb839fdbd3b..332dc99fbe512661b9f2c65660de6d965fb257fd 100644 (file)
@@ -35,14 +35,17 @@ namespace XAO
     class DoubleField : public Field
     {
     public:
-        DoubleField(const XAO::Dimension dimension, const int nbComponents);
-        DoubleField(const std::string name, const XAO::Dimension dimension, const int nbComponents);
+        DoubleField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
+        DoubleField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::DOUBLE; }
 
-        DoubleStep* addStep(const int step);
-        DoubleStep* addStep(const int step, const int stamp);
-        DoubleStep* getStep(const int index);
+        DoubleStep* addStep(const int& step);
+        DoubleStep* addStep(const int& step, const int& stamp);
+        DoubleStep* getStep(const int& index);
+
+//    private:
+//        std::vector<DoubleStep*> m_steps;
     };
 }
 
diff --git a/src/XAO/DoubleStep.cxx b/src/XAO/DoubleStep.cxx
new file mode 100644 (file)
index 0000000..f58735c
--- /dev/null
@@ -0,0 +1,147 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
+
+#include "DoubleStep.hxx"
+#include <Utils_SALOME_Exception.hxx>
+
+using namespace XAO;
+
+DoubleStep::DoubleStep(const int& nbElements, const int& nbComponents)
+{
+    Init(0, 0, nbElements, nbComponents);
+}
+
+DoubleStep::DoubleStep(const int& step, const int& nbElements, const int& nbComponents)
+{
+    Init(step, 0, nbElements, nbComponents);
+}
+
+DoubleStep::DoubleStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    Init(step, stamp, nbElements, nbComponents);
+}
+
+void DoubleStep::Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    m_nbElements = nbElements;
+    m_nbComponents = nbComponents;
+    m_step = step;
+    m_stamp = stamp;
+
+    m_values.reserve(m_nbElements);
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        std::vector<double> row;
+        row.reserve(m_nbComponents);
+        for (int j = 0; j < m_nbComponents; ++j)
+            row.push_back(0);
+        m_values.push_back(row);
+    }
+}
+
+std::vector<double> DoubleStep::getValues()
+{
+    std::vector<double> result;
+    result.reserve(m_nbElements * m_nbComponents);
+
+    std::vector< std::vector<double>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<double> eltValues = *it;
+        result.insert(result.end(), eltValues.begin(), eltValues.end());
+    }
+
+    return result;
+}
+
+std::vector<double> DoubleStep::getElement(const int& element)
+{
+    checkElement(element);
+
+    std::vector<double> result(m_values[element]);
+    return result;
+}
+
+std::vector<double> DoubleStep::getComponent(const int& component)
+{
+    checkComponent(component);
+
+    std::vector<double> result;
+    result.reserve(m_nbElements);
+
+    std::vector< std::vector<double>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<double> eltValues = *it;
+        result.push_back(eltValues[component]);
+    }
+
+    return result;
+}
+
+const double DoubleStep::getValue(const int& element, const int& component)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    return m_values[element][component];
+}
+
+void DoubleStep::setValues(const std::vector<double>& values)
+{
+    if (values.size() != m_nbComponents * m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        for (int j = 0; j < m_nbComponents; ++j)
+        {
+            m_values[i][j] = values[i * m_nbComponents + j];
+        }
+    }
+}
+
+void DoubleStep::setElements(const int& element, const std::vector<double>& elements)
+{
+    checkElement(element);
+    if (elements.size() != m_nbComponents)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbComponents; ++i)
+        m_values[element][i] = elements[i];
+}
+
+void DoubleStep::setComponents(const int& component, const std::vector<double>& components)
+{
+    checkElement(component);
+    if (components.size() != m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+        m_values[i][component] = components[i];
+}
+
+void DoubleStep::setValue(const int& element, const int& component, const double& value)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    m_values[element][component] = value;
+}
index b66afd9befc38e617d8f583600e8a7485a4bb472..c4d1db43b414e66d0a64a9f5c796689bc389269a 100644 (file)
 #include <vector>
 
 #include "Xao.hxx"
+#include "Step.hxx"
 
 namespace XAO
 {
     class DoubleStep : public Step
     {
     public:
-        DoubleStep(const int nbElements, const int nbComponents);
-        DoubleStep(const int step, const int nbElements, const int nbComponents);
-        DoubleStep(const int step, const int stamp, const int nbElements, const int nbComponents);
+        DoubleStep(const int& nbElements, const int& nbComponents);
+        DoubleStep(const int& step, const int& nbElements, const int& nbComponents);
+        DoubleStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::DOUBLE; }
 
         std::vector<double> getValues();
-        std::vector<double> getElement(const int i);
-        std::vector<double> getComponent(const int j);
+        std::vector<double> getElement(const int& element);
+        std::vector<double> getComponent(const int& component);
 
-        const double getValue(const int i, const int j);
+        const double getValue(const int& element, const int& component);
 
-        void setValues(std::vector<double> values);
-        void setElements(const int i, std::vector<double> elements);
-        void setComponents(const int j, std::vector<double> components);
-        void setValue(const int i, const int j, const double value);
+        void setValues(const std::vector<double>& values);
+        void setElements(const int& element, const std::vector<double>& elements);
+        void setComponents(const int& component, const std::vector<double>& components);
+        void setValue(const int& element, const int& component, const double& value);
+
+    private:
+        void Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
+
+    private:
+        std::vector< std::vector<double> > m_values;
     };
 }
 
index c8394fc3816af34e564bebcd358787162a8a3aa3..0e19d9e267cb617d546d699bf3aad93b00742e51 100644 (file)
@@ -33,39 +33,67 @@ using namespace XAO;
 
 // -------------------------------------------------------
 
-Field* Field::createField(const XAO::Type type, const XAO::Dimension dimension, const int nbComponents)
+Field::Field(const std::string& name, const XAO::Dimension& dimension,
+        const int& nbElements, const int& nbComponents)
+    : m_name(name), m_dimension(dimension), m_nbElements(nbElements), m_nbComponents(nbComponents)
 {
-    return createField(type, "", dimension, nbComponents);
+    m_components.reserve(nbComponents);
+    for (int i = 0; i < nbComponents; ++i)
+        m_components.push_back("");
 }
 
-Field* Field::createField(const XAO::Type type, const std::string name, const XAO::Dimension dimension, const int nbComponents)
+Field* Field::createField(const XAO::Type& type, const XAO::Dimension& dimension,
+        const int& nbElements, const int& nbComponents)
+{
+    return createField(type, "", dimension, nbElements, nbComponents);
+}
+
+Field* Field::createField(const XAO::Type& type, const std::string& name, const XAO::Dimension& dimension,
+        const int& nbElements, const int& nbComponents)
 {
     if (type == XAO::BOOLEAN)
-        return new BooleanField(name, dimension, nbComponents);
+        return new BooleanField(name, dimension, nbElements, nbComponents);
     if (type == XAO::INTEGER)
-        return new IntegerField(name, dimension, nbComponents);
+        return new IntegerField(name, dimension, nbElements, nbComponents);
     if (type == XAO::DOUBLE)
-        return new DoubleField(name, dimension, nbComponents);
+        return new DoubleField(name, dimension, nbElements, nbComponents);
     if (type == XAO::STRING)
-        return new StringField(name, dimension, nbComponents);
+        return new StringField(name, dimension, nbElements, nbComponents);
 
     throw SALOME_Exception("Bad Type");
 }
 
-const std::string Field::getComponentName(const int index)
+const std::string Field::getComponentName(const int& index)
 {
     if (index < m_components.size())
         return m_components[index];
 
-    // TODO: throw
-    return "";
+    throw SALOME_Exception("IndexOutOfRange component");
 }
 
-void Field::setComponentName(const int index, const std::string name)
+void Field::setComponentName(const int& index, const std::string& name)
 {
     if (index < m_components.size())
     {
         m_components[index] = name;
+        return;
+    }
+
+    throw SALOME_Exception("IndexOutOfRange component");
+}
+
+bool Field::removeStep(Step* step)
+{
+    std::vector<Step*>::iterator it = m_steps.begin();
+    for (; it != m_steps.end(); ++it)
+    {
+        Step* current = *it;
+        if (step == current)
+        {
+            m_steps.erase(it);
+            return true;
+        }
     }
-    // TODO: throw
+
+    return false;
 }
index d33b9c8061b09231e1a68b2af9a81634406ee42b..f449277e314eb680f4aa53fe40b3c39e5d8ed4cf 100644 (file)
@@ -38,13 +38,16 @@ namespace XAO
     class Field
     {
     protected:
-        Field();
+        Field(const std::string& name, const XAO::Dimension& dimension,
+              const int& nbElements, const int& nbComponents);
 
     public:
-        static Field* createField(const XAO::Type type, const XAO::Dimension dimension, const int nbComponents);
-        static Field* createField(const XAO::Type type, const std::string name, const XAO::Dimension dimension, const int nbComponents);
+        static Field* createField(const XAO::Type& type, const XAO::Dimension& dimension,
+                                  const int& nbElements, const int& nbComponents);
+        static Field* createField(const XAO::Type& type, const std::string& name, const XAO::Dimension& dimension,
+                                  const int& nbElements, const int& nbComponents);
 
-        virtual ~Field();
+        virtual ~Field() {};
 
         /**
          * Gets the Type of the field.
@@ -65,7 +68,7 @@ namespace XAO
          * Sets the name of the Field.
          * @param name the name to set.
          */
-        void setName(std::string name)
+        void setName(const std::string& name)
         {
             m_name = name;
         }
@@ -79,7 +82,14 @@ namespace XAO
             return m_dimension;
         }
 
-        int countElements();
+        /**
+         * Gets the number of elements of each step.
+         * @return the number of elements of each step.
+         */
+        const int countElements()
+        {
+            return m_nbElements;
+        }
 
         /**
          * Gets the number of components.
@@ -87,41 +97,48 @@ namespace XAO
          */
         const int countComponents()
         {
-            return m_components.size();
+            return m_nbComponents;
         }
 
-        const int countValues();
+        /**
+         * Gets the number of values for each step.
+         * @return the number of values for each step.
+         */
+        const int countValues()
+        {
+            return m_nbElements * m_nbComponents;
+        }
 
         /**
          * Gets the number of the steps.
          * @return the number of steps.
          */
-        const int countSteps()
-        {
-            return m_steps.size();
-        }
+        const int countSteps() { return m_steps.size(); }
 
         /**
          * Gets the name of a component.
          * @param index the index of the component to get.
          * @return the name of the component for the given index.
          */
-        const std::string getComponentName(const int index);
+        const std::string getComponentName(const int& index);
 
         /**
          * Sets the name of a component.
          * @param componentIndex the index of the component to set.
          * @param name the name to set.
          */
-        void setComponentName(const int componentIndex, const std::string name);
+        void setComponentName(const int& componentIndex, const std::string& name);
 
         /**
          * Remove a step.
          * @param step the step to remove.
-         * @return
+         * @return true if the step has been removed.
          */
         bool removeStep(Step* step);
 
+    private:
+        void checkComponent(const int& component);
+
     protected:
         /** The name of the Field. */
         std::string m_name;
@@ -132,10 +149,11 @@ namespace XAO
         int m_nbComponents;
         /** The components of the field. */
         std::vector<std::string> m_components;
-        /** The steps. */
-        std::map<int, Step* > m_steps;
-
+        /** The number of elements. */
         int m_nbElements;
+
+        /** The list of steps. */
+        std::vector<Step*> m_steps;
     };
 }
 
index 5946ad56aad8df46e7c19af73f1024ab3bc2cd17..9f40b0839df39fe88116ca28873f3dcd82a61eed 100644 (file)
@@ -35,14 +35,17 @@ namespace XAO
     class IntegerField : public Field
     {
     public:
-        IntegerField(const XAO::Dimension dimension, const int nbComponents);
-        IntegerField(const std::string name, const XAO::Dimension dimension, const int nbComponents);
+        IntegerField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
+        IntegerField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::INTEGER; }
 
-        IntegerStep* addStep(const int step);
-        IntegerStep* addStep(const int step, const int stamp);
-        IntegerStep* getStep(const int index);
+        IntegerStep* addStep(const int& step);
+        IntegerStep* addStep(const int& step, const int& stamp);
+        IntegerStep* getStep(const int& index);
+
+//    private:
+//        std::vector<IntegerStep*> m_steps;
     };
 }
 
diff --git a/src/XAO/IntegerStep.cxx b/src/XAO/IntegerStep.cxx
new file mode 100644 (file)
index 0000000..a129bf6
--- /dev/null
@@ -0,0 +1,147 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
+
+#include "IntegerStep.hxx"
+#include <Utils_SALOME_Exception.hxx>
+
+using namespace XAO;
+
+IntegerStep::IntegerStep(const int& nbElements, const int& nbComponents)
+{
+    Init(0, 0, nbElements, nbComponents);
+}
+
+IntegerStep::IntegerStep(const int& step, const int& nbElements, const int& nbComponents)
+{
+    Init(step, 0, nbElements, nbComponents);
+}
+
+IntegerStep::IntegerStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    Init(step, stamp, nbElements, nbComponents);
+}
+
+void IntegerStep::Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    m_nbElements = nbElements;
+    m_nbComponents = nbComponents;
+    m_step = step;
+    m_stamp = stamp;
+
+    m_values.reserve(m_nbElements);
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        std::vector<int> row;
+        row.reserve(m_nbComponents);
+        for (int j = 0; j < m_nbComponents; ++j)
+            row.push_back(0);
+        m_values.push_back(row);
+    }
+}
+
+std::vector<int> IntegerStep::getValues()
+{
+    std::vector<int> result;
+    result.reserve(m_nbElements * m_nbComponents);
+
+    std::vector< std::vector<int>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<int> eltValues = *it;
+        result.insert(result.end(), eltValues.begin(), eltValues.end());
+    }
+
+    return result;
+}
+
+std::vector<int> IntegerStep::getElement(const int& element)
+{
+    checkElement(element);
+
+    std::vector<int> result(m_values[element]);
+    return result;
+}
+
+std::vector<int> IntegerStep::getComponent(const int& component)
+{
+    checkComponent(component);
+
+    std::vector<int> result;
+    result.reserve(m_nbElements);
+
+    std::vector< std::vector<int>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<int> eltValues = *it;
+        result.push_back(eltValues[component]);
+    }
+
+    return result;
+}
+
+const int IntegerStep::getValue(const int& element, const int& component)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    return m_values[element][component];
+}
+
+void IntegerStep::setValues(const std::vector<int>& values)
+{
+    if (values.size() != m_nbComponents * m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        for (int j = 0; j < m_nbComponents; ++j)
+        {
+            m_values[i][j] = values[i * m_nbComponents + j];
+        }
+    }
+}
+
+void IntegerStep::setElements(const int& element, const std::vector<int>& elements)
+{
+    checkElement(element);
+    if (elements.size() != m_nbComponents)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbComponents; ++i)
+        m_values[element][i] = elements[i];
+}
+
+void IntegerStep::setComponents(const int& component, const std::vector<int>& components)
+{
+    checkElement(component);
+    if (components.size() != m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+        m_values[i][component] = components[i];
+}
+
+void IntegerStep::setValue(const int& element, const int& component, const int& value)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    m_values[element][component] = value;
+}
index eb967f15cd9e07abbae0f37fce6d23fdeac32b59..2cdfc8abbdbee95e0967727f370f3e1e4f40d80e 100644 (file)
 #include <vector>
 
 #include "Xao.hxx"
+#include "Step.hxx"
 
 namespace XAO
 {
     class IntegerStep : public Step
     {
     public:
-        IntegerStep(const int nbElements, const int nbComponents);
-        IntegerStep(const int step, const int nbElements, const int nbComponents);
-        IntegerStep(const int step, const int stamp, const int nbElements, const int nbComponents);
+        IntegerStep(const int& nbElements, const int& nbComponents);
+        IntegerStep(const int& step, const int& nbElements, const int& nbComponents);
+        IntegerStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::INTEGER; }
 
         std::vector<int> getValues();
-        std::vector<int> getElement(const int i);
-        std::vector<int> getComponent(const int j);
+        std::vector<int> getElement(const int& element);
+        std::vector<int> getComponent(const int& component);
 
-        const int getValue(const int i, const int j);
+        const int getValue(const int& element, const int& component);
 
-        void setValues(std::vector<int> values);
-        void setElements(const int i, std::vector<int> elements);
-        void setComponents(const int j, std::vector<int> components);
-        void setValue(const int i, const int j, const int value);
+        void setValues(const std::vector<int>& values);
+        void setElements(const int& element, const std::vector<int>& elements);
+        void setComponents(const int& element, const std::vector<int>& components);
+        void setValue(const int& element, const int& component, const int& value);
+
+    private:
+        void Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
+
+    private:
+        std::vector< std::vector<int> > m_values;
     };
 }
 
index 5b7e29f2c42b440e95b53d490750e365d5dc3278..c681dd255a60e221b6e541f3030cfa03f05f637e 100644 (file)
@@ -53,8 +53,14 @@ dist_libXAO_la_SOURCES = \
     Group.cxx \
     Field.cxx \
     BooleanField.cxx \
+    IntegerField.cxx \
+    DoubleField.cxx \
+    StringField.cxx \
     Step.cxx \
     BooleanStep.cxx \
+    IntegerStep.cxx \
+    DoubleStep.cxx \
+    StringStep.cxx \
     XaoExporter.cxx
 
 
index 74e72aa829d25db6bac6dbd09fadf2abee38d94a..17ef7a318f217915e5db55048ab0c16a77a2ce22 100644 (file)
@@ -29,7 +29,7 @@
 
 using namespace XAO;
 
-Step* Step::createStep(const XAO::Type& type, const int& nbElements, const int &nbComponents)
+Step* Step::createStep(const XAO::Type& type, const int& nbElements, const intnbComponents)
 {
     return createStep(type, 0, 0, nbElements, nbComponents);
 }
index 4ff39dd378f1230edc44d764fed4dddc07e44b67..e8dde48c09e6853f255eaee851c77b57ed8b9e3c 100644 (file)
@@ -29,7 +29,7 @@ namespace XAO
     class Step
     {
     protected:
-        Step();
+        Step() {}
 
     public:
         static Step* createStep(const XAO::Type& type, const int& nbElements, const int& nbComponents);
@@ -66,7 +66,7 @@ namespace XAO
 
         const int countElements() { return m_nbElements; }
 
-        virtual const int countValues();
+        const int countValues() { return m_nbElements * m_nbComponents; }
 
     protected:
         void checkElement(const int& element);
@@ -77,7 +77,6 @@ namespace XAO
         int m_stamp;
         int m_nbComponents;
         int m_nbElements;
-
     };
 }
 
diff --git a/src/XAO/StringField.cxx b/src/XAO/StringField.cxx
new file mode 100644 (file)
index 0000000..3f061c2
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
+
+#include "StringField.hxx"
+#include "StringStep.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+
+using namespace XAO;
+
+StringField::StringField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field("", dimension, nbElements, nbComponents)
+{
+}
+
+StringField::StringField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents)
+    : Field(name, dimension, nbElements, nbComponents)
+{
+}
+
+StringStep* StringField::addStep(const int& step)
+{
+    StringStep* bstep = new StringStep(step, m_nbElements, m_nbComponents);
+    m_steps.push_back(bstep);
+    return bstep;
+}
+
+StringStep* StringField::addStep(const int& step, const int& stamp)
+{
+    StringStep* bstep = new StringStep(step, stamp, m_nbElements, m_nbComponents);
+    m_steps.push_back(bstep);
+    return bstep;
+}
+
+StringStep* StringField::getStep(const int& index)
+{
+    if (index < m_steps.size())
+        return (StringStep*)m_steps[index];
+   throw SALOME_Exception("IndexOutOfRange");
+}
index c1b09a403ee28ea2e3e3fe931d17d20f549e9665..db7de71eff6ec2394f42f2fa3f6d8b99e6d91171 100644 (file)
@@ -35,14 +35,17 @@ namespace XAO
     class StringField : public Field
     {
     public:
-        StringField(const XAO::Dimension dimension, const int nbComponents);
-        StringField(const std::string name, const XAO::Dimension dimension, const int nbComponents);
+        StringField(const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
+        StringField(const std::string& name, const XAO::Dimension& dimension, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::STRING; }
 
-        StringStep* addStep(const int step);
-        StringStep* addStep(const int step, const int stamp);
-        StringStep* getStep(const int index);
+        StringStep* addStep(const int& step);
+        StringStep* addStep(const int& step, const int& stamp);
+        StringStep* getStep(const int& index);
+
+//    private:
+//        std::vector<StringStep*> m_steps;
     };
 }
 
diff --git a/src/XAO/StringStep.cxx b/src/XAO/StringStep.cxx
new file mode 100644 (file)
index 0000000..c624274
--- /dev/null
@@ -0,0 +1,147 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
+
+#include "StringStep.hxx"
+#include <Utils_SALOME_Exception.hxx>
+
+using namespace XAO;
+
+StringStep::StringStep(const int& nbElements, const int& nbComponents)
+{
+    Init(0, 0, nbElements, nbComponents);
+}
+
+StringStep::StringStep(const int& step, const int& nbElements, const int& nbComponents)
+{
+    Init(step, 0, nbElements, nbComponents);
+}
+
+StringStep::StringStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    Init(step, stamp, nbElements, nbComponents);
+}
+
+void StringStep::Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents)
+{
+    m_nbElements = nbElements;
+    m_nbComponents = nbComponents;
+    m_step = step;
+    m_stamp = stamp;
+
+    m_values.reserve(m_nbElements);
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        std::vector<std::string> row;
+        row.reserve(m_nbComponents);
+        for (int j = 0; j < m_nbComponents; ++j)
+            row.push_back("");
+        m_values.push_back(row);
+    }
+}
+
+std::vector<std::string> StringStep::getValues()
+{
+    std::vector<std::string> result;
+    result.reserve(m_nbElements * m_nbComponents);
+
+    std::vector< std::vector<std::string>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<std::string> eltValues = *it;
+        result.insert(result.end(), eltValues.begin(), eltValues.end());
+    }
+
+    return result;
+}
+
+std::vector<std::string> StringStep::getElement(const int& element)
+{
+    checkElement(element);
+
+    std::vector<std::string> result(m_values[element]);
+    return result;
+}
+
+std::vector<std::string> StringStep::getComponent(const int& component)
+{
+    checkComponent(component);
+
+    std::vector<std::string> result;
+    result.reserve(m_nbElements);
+
+    std::vector< std::vector<std::string>  >::iterator it;
+    for (it = m_values.begin(); it != m_values.end(); ++it)
+    {
+        std::vector<std::string> eltValues = *it;
+        result.push_back(eltValues[component]);
+    }
+
+    return result;
+}
+
+const std::string StringStep::getValue(const int& element, const int& component)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    return m_values[element][component];
+}
+
+void StringStep::setValues(const std::vector<std::string>& values)
+{
+    if (values.size() != m_nbComponents * m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+    {
+        for (int j = 0; j < m_nbComponents; ++j)
+        {
+            m_values[i][j] = values[i * m_nbComponents + j];
+        }
+    }
+}
+
+void StringStep::setElements(const int& element, const std::vector<std::string>& elements)
+{
+    checkElement(element);
+    if (elements.size() != m_nbComponents)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbComponents; ++i)
+        m_values[element][i] = elements[i];
+}
+
+void StringStep::setComponents(const int& component, const std::vector<std::string>& components)
+{
+    checkElement(component);
+    if (components.size() != m_nbElements)
+        throw SALOME_Exception("bad size"); // TODO
+
+    for (int i = 0; i < m_nbElements; ++i)
+        m_values[i][component] = components[i];
+}
+
+void StringStep::setValue(const int& element, const int& component, const std::string& value)
+{
+    checkElement(element);
+    checkComponent(component);
+
+    m_values[element][component] = value;
+}
index cd0b68cd7955efbf13af8126ed0723adc6ddc837..9b8a9250ec03042b83957d6670fda9c04f774df3 100644 (file)
 #include <vector>
 
 #include "Xao.hxx"
+#include "Step.hxx"
 
 namespace XAO
 {
     class StringStep : public Step
     {
     public:
-        StringStep(const int nbElements, const int nbComponents);
-        StringStep(const int step, const int nbElements, const int nbComponents);
-        StringStep(const int step, const int stamp, const int nbElements, const int nbComponents);
+        StringStep(const int& nbElements, const int& nbComponents);
+        StringStep(const int& step, const int& nbElements, const int& nbComponents);
+        StringStep(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
 
         virtual const XAO::Type getType() { return XAO::STRING; }
 
         std::vector<std::string> getValues();
-        std::vector<std::string> getElement(const int i);
-        std::vector<std::string> getComponent(const int j);
+        std::vector<std::string> getElement(const int& element);
+        std::vector<std::string> getComponent(const int& component);
 
-        const std::string getValue(const int i, const int j);
+        const std::string getValue(const int& element, const int& component);
 
-        void setValues(std::vector<std::string> values);
-        void setElements(const int i, std::vector<std::string> elements);
-        void setComponents(const int j, std::vector<std::string> components);
-        void setValue(const int i, const int j, const std::string value);
+        void setValues(const std::vector<std::string>& values);
+        void setElements(const int& element, const std::vector<std::string>& elements);
+        void setComponents(const int& component, const std::vector<std::string>& components);
+        void setValue(const int& element, const int& component, const std::string& value);
+
+    private:
+        void Init(const int& step, const int& stamp, const int& nbElements, const int& nbComponents);
+
+    private:
+        std::vector< std::vector<std::string> > m_values;
     };
 }
 
diff --git a/src/XAO/tests/FieldTest.cxx b/src/XAO/tests/FieldTest.cxx
new file mode 100644 (file)
index 0000000..96880a7
--- /dev/null
@@ -0,0 +1,160 @@
+#include <vector>
+#include <Utils_SALOME_Exception.hxx>
+
+#include "FieldTest.hxx"
+#include "../Xao.hxx"
+#include "../Field.hxx"
+#include "../Step.hxx"
+#include "../IntegerStep.hxx"
+
+using namespace XAO;
+
+
+void FieldTest::setUp()
+{
+}
+
+void FieldTest::tearDown()
+{
+}
+
+void FieldTest::cleanUp()
+{
+}
+
+void FieldTest::testField(XAO::Type type)
+{
+    Field* f = Field::createField(type, XAO::FACE, 10, 3);
+
+    CPPUNIT_ASSERT(f->getName().size() == 0);
+    CPPUNIT_ASSERT(f->getType() == type);
+    CPPUNIT_ASSERT(f->getDimension() == XAO::FACE);
+    CPPUNIT_ASSERT(f->countComponents() == 3);
+    CPPUNIT_ASSERT(f->countElements() == 10);
+    CPPUNIT_ASSERT(f->countValues() == 30);
+
+    f->setName("field1");
+    CPPUNIT_ASSERT(f->getName() == "field1");
+
+    CPPUNIT_ASSERT(f->getComponentName(0).size() == 0);
+    f->setComponentName(0, "x");
+    f->setComponentName(1, "y");
+    f->setComponentName(2, "z");
+    CPPUNIT_ASSERT(f->countComponents() == 3);
+    CPPUNIT_ASSERT(f->getComponentName(0) == "x");
+    CPPUNIT_ASSERT(f->getComponentName(1) == "y");
+    CPPUNIT_ASSERT(f->getComponentName(2) == "z");
+    CPPUNIT_ASSERT_THROW(f->setComponentName(3, "a"), SALOME_Exception);
+    CPPUNIT_ASSERT_THROW(f->getComponentName(3), SALOME_Exception);
+}
+
+void FieldTest::testBooleanField()
+{
+    testField(XAO::BOOLEAN);
+}
+void FieldTest::testIntegerField()
+{
+    testField(XAO::INTEGER);
+}
+void FieldTest::testDoubleField()
+{
+    testField(XAO::DOUBLE);
+}
+void FieldTest::testStringField()
+{
+    testField(XAO::STRING);
+}
+
+void FieldTest::testStep(XAO::Type type)
+{
+    Step* step = Step::createStep(type, 5, 3);
+    CPPUNIT_ASSERT(step->getType() == type);
+
+    CPPUNIT_ASSERT(step->getStep() == 0);
+    step->setStep(10);
+    CPPUNIT_ASSERT(step->getStep() == 10);
+
+    CPPUNIT_ASSERT(step->getStamp() == 0);
+    step->setStamp(100);
+    CPPUNIT_ASSERT(step->getStamp() == 100);
+
+    CPPUNIT_ASSERT(step->countElements() == 5);
+    CPPUNIT_ASSERT(step->countComponents() == 3);
+    CPPUNIT_ASSERT(step->countValues() == 15);
+}
+
+void FieldTest::testBooleanStep()
+{
+    testStep(XAO::BOOLEAN);
+}
+void FieldTest::testIntegerStep()
+{
+    testStep(XAO::INTEGER);
+}
+void FieldTest::testDoubleStep()
+{
+    testStep(XAO::DOUBLE);
+}
+void FieldTest::testStringStep()
+{
+    testStep(XAO::STRING);
+}
+
+void FieldTest::testIntegerStepValues()
+{
+    int nbComponents = 3;
+    int nbElements = 5;
+
+    IntegerStep* istep = (IntegerStep*)Step::createStep(XAO::INTEGER, nbElements, nbComponents);
+    for (int i = 0; i < istep->countElements(); ++i)
+    {
+        for (int j = 0; j < istep->countComponents(); ++j)
+            istep->setValue(i, j, i*10 + j);
+    }
+
+    CPPUNIT_ASSERT(istep->getValue(1, 2) == 12);
+    CPPUNIT_ASSERT_THROW(istep->getValue(nbElements, 2), SALOME_Exception);
+    CPPUNIT_ASSERT_THROW(istep->getValue(1, nbComponents), SALOME_Exception);
+
+    // get all values
+    std::vector<int> values;
+    values = istep->getValues();
+    CPPUNIT_ASSERT(values.size() == nbElements * nbComponents);
+    for (int i = 0; i < nbElements; ++i)
+    {
+        for (int j = 0; j < nbComponents; ++j)
+            CPPUNIT_ASSERT(values[i*nbComponents+j] == 10*i+j);
+    }
+
+    // get one element
+    values = istep->getElement(2);
+    CPPUNIT_ASSERT_THROW(istep->getElement(nbElements), SALOME_Exception);
+    CPPUNIT_ASSERT(values.size() == nbComponents);
+    for (int i = 0; i < nbComponents; ++i)
+        CPPUNIT_ASSERT(values[i] == 20+i);
+
+    // get one component
+    values = istep->getComponent(1);
+    CPPUNIT_ASSERT_THROW(istep->getComponent(nbComponents), SALOME_Exception);
+    CPPUNIT_ASSERT(values.size() == nbElements);
+    for (int i = 0; i < nbElements; ++i)
+        CPPUNIT_ASSERT(values[i] == 10*i+1);
+
+    // set one element
+    std::vector<int> newEltValues;
+    newEltValues.push_back(1);
+    CPPUNIT_ASSERT_THROW(istep->setElements(2, newEltValues), SALOME_Exception);
+    for (int i = 1; i < nbComponents; ++i)
+        newEltValues.push_back(1);
+    istep->setElements(2, newEltValues);
+
+    // set one component
+    std::vector<int> newCompValues;
+    newCompValues.push_back(100);
+    CPPUNIT_ASSERT_THROW(istep->setComponents(1, newCompValues), SALOME_Exception);
+    for (int i = 1; i < nbElements; ++i)
+        newCompValues.push_back(100);
+    istep->setComponents(1, newCompValues);
+}
+
+
diff --git a/src/XAO/tests/FieldTest.hxx b/src/XAO/tests/FieldTest.hxx
new file mode 100644 (file)
index 0000000..5a5d13b
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef __XAO_FIELD_TEST_HXX__
+#define __XAO_FIELD_TEST_HXX__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../Xao.hxx"
+
+namespace XAO
+{
+    class FieldTest: public CppUnit::TestFixture
+    {
+        CPPUNIT_TEST_SUITE(FieldTest);
+        CPPUNIT_TEST(testBooleanField);
+        CPPUNIT_TEST(testDoubleField);
+        CPPUNIT_TEST(testIntegerField);
+        CPPUNIT_TEST(testStringField);
+        CPPUNIT_TEST(testBooleanStep);
+        CPPUNIT_TEST(testIntegerStep);
+        CPPUNIT_TEST(testDoubleStep);
+        CPPUNIT_TEST(testStringStep);
+        CPPUNIT_TEST(testIntegerStepValues);
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+        void setUp();
+        void tearDown();
+        void cleanUp();
+
+        void testField(XAO::Type type);
+        void testBooleanField();
+        void testIntegerField();
+        void testDoubleField();
+        void testStringField();
+
+        void testStep(XAO::Type type);
+        void testBooleanStep();
+        void testIntegerStep();
+        void testDoubleStep();
+        void testStringStep();
+
+        void testIntegerStepValues();
+    };
+}
+
+#endif // __XAO_FIELD_TEST_HXX__
index 6f792680887844d9ba3a06875ad6a004cce08683..317760cabe3c87a95e01bebadf8b770c84cff293 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef __BUILDING_IMPORT_TEST_HXX__
-#define __BUILDING_IMPORT_TEST_HXX__
+#ifndef __XAO_IMPORT_TEST_HXX__
+#define __XAO_IMPORT_TEST_HXX__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ namespace XAO
     };
 }
 
-#endif
+#endif // __XAO_IMPORT_TEST_HXX__
index 4533db12ae52705d60eb6f885f0a8c4fff422439..19d6771232eb1102613c2c3838f052f1919108ad 100755 (executable)
@@ -39,6 +39,7 @@ TestXAO_LDFLAGS = \
     ../libXAO.la
 
 dist_TestXAO_SOURCES = \
+    FieldTest.cxx \
     ImportExportTest.cxx \
     XAOTests.cxx
 
index daa59ca2d66a6da99ca447c992a63620fa3ed659..a95cf5d0b07b8e416395d3b36fff272efc2ac919 100644 (file)
@@ -1,5 +1,7 @@
+#include "FieldTest.hxx"
 #include "ImportExportTest.hxx"
 
+CPPUNIT_TEST_SUITE_REGISTRATION(XAO::FieldTest);
 CPPUNIT_TEST_SUITE_REGISTRATION(XAO::ImportExportTest);
 
 #include "MainTest.hxx"