diff --git a/tests/Main.cpp b/tests/Main.cpp
index f584f8f3a933c722642d6fd43fb53573f9226c5c..6f13361abe83c2d7293529939aefacc600b8b1d6 100644
--- a/tests/Main.cpp
+++ b/tests/Main.cpp
@@ -1680,6 +1680,30 @@ void so3LinearTest(bool& error) {
   }
 }
 
+void SO3serializationTest(bool &error){
+  std::string fileName("fileTest");
+  std::string errmsg("SO3serializationTest : curve serialized is not equivalent to the original curve.");
+  quaternion_t q0( 0.544,-0.002, -0.796,  0.265);
+  quaternion_t q1(0.7071, 0.7071, 0, 0);
+  SO3Linear_t so3Traj(q0, q1,0.5, 2.2);
+
+  so3Traj.saveAsText<SO3Linear_t>(fileName+".txt");
+  SO3Linear_t so3_from_txt;
+  so3_from_txt.loadFromText<SO3Linear_t>(fileName+".txt");
+  CompareCurves<SO3Linear_t, SO3Linear_t>(so3Traj, so3_from_txt, errmsg+" For text serialization", error,1e-3); // approximations comes from the conversions quaternion->matrix->quaternion
+
+  so3Traj.saveAsXML<SO3Linear_t>(fileName+".xml","so3Curve");
+  SO3Linear_t so3_from_xml;
+  so3_from_xml.loadFromXML<SO3Linear_t>(fileName+".xml","so3Curve");
+  CompareCurves<SO3Linear_t, SO3Linear_t>(so3Traj, so3_from_xml,errmsg+" For XML serialization", error,1e-3);
+
+  so3Traj.saveAsBinary<SO3Linear_t>(fileName);
+  SO3Linear_t so3_from_binary;
+  so3_from_binary.loadFromBinary<SO3Linear_t>(fileName);
+  CompareCurves<SO3Linear_t, SO3Linear_t>(so3Traj, so3_from_binary, errmsg+" For binary serialization", error,1e-3);
+
+}
+
 void se3CurveTest(bool& error) {
   quaternion_t q0(1, 0, 0, 0);
   quaternion_t q1(0., 1., 0, 0);
@@ -2230,6 +2254,7 @@ int main(int /*argc*/, char** /*argv[]*/) {
   serializationCurvesTest(error);
   polynomialFromBoundaryConditions(error);
   so3LinearTest(error);
+  SO3serializationTest(error);
   se3CurveTest(error);
   BezierLinearProblemsetup_control_pointsNoConstraint(error);
   BezierLinearProblemsetup_control_pointsVarCombinatorialInit(error);