]> OCCT Git - occt-copy.git/commitdiff
0026448: Method Prepend() of sequence breaks it if argument is empty sequence
authorabv <abv@opencascade.com>
Wed, 15 Jul 2015 21:34:02 +0000 (00:34 +0300)
committerabv <abv@opencascade.com>
Fri, 21 Aug 2015 07:58:45 +0000 (10:58 +0300)
Check for empty input sequence added in methods Append() and Prepend() of TCollection and NCollection sequences.

Test bugs fclasses bug26448 added

src/NCollection/NCollection_BaseSequence.cxx
src/QABugs/QABugs_19.cxx
src/TCollection/TCollection_BaseSequence.cxx
tests/bugs/fclasses/bug26448 [new file with mode: 0644]

index fa39c9ae47d354d49f785edf93b2b13760f0ff27..ed4fb9fc0bf71493b6ab0b037fb2cb00f1c486ae 100644 (file)
@@ -68,6 +68,8 @@ void NCollection_BaseSequence::PAppend (NCollection_SeqNode * theItem)
 
 void NCollection_BaseSequence::PAppend(NCollection_BaseSequence& Other)
 {
+  if (Other.mySize == 0)
+    return;
   if (mySize == 0) {
     mySize         = Other.mySize;
     myFirstItem    = Other.myFirstItem;
@@ -113,6 +115,8 @@ void NCollection_BaseSequence::PPrepend (NCollection_SeqNode * theItem)
 
 void NCollection_BaseSequence::PPrepend (NCollection_BaseSequence& Other)
 {
+  if (Other.mySize == 0)
+    return;
   if (mySize == 0) {
     mySize         = Other.mySize;
     myFirstItem    = Other.myFirstItem;
index 208c9c66abc40b38f317e472e36ce20bc8add862..675efb13b40849d4ff4ca4704e8aeaabff6bbd3c 100755 (executable)
@@ -3866,6 +3866,22 @@ static Standard_Integer OCC24923(
   return 0;
 }
 
+static Standard_Integer OCC26448 (Draw_Interpretor& theDI, Standard_Integer, const char **)
+{
+  TColStd_SequenceOfReal aSeq1, aSeq2;
+  aSeq1.Append(11.);
+  aSeq1.Prepend (aSeq2);
+  theDI << "TCollection: 11 -> " << aSeq1.First() << "\n";
+
+  NCollection_Sequence<Standard_Real> nSeq1, nSeq2;
+  nSeq1.Append(11.);
+  nSeq1.Prepend (nSeq2);
+  theDI << "NCollection: 11 -> " << nSeq1.First() << "\n";
+
+  theDI << "OK";
+  return 0;
+}
+
 void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -3938,5 +3954,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   theCommands.Add ("xprojponf", "xprojponf p f", __FILE__, xprojponf, group);
   theCommands.Add ("OCC24923", "OCC24923", __FILE__, OCC24923, group);
   theCommands.Add ("OCC26139", "OCC26139 [-boxsize value] [-boxgrid value] [-compgrid value]", __FILE__, OCC26139, group);
+  theCommands.Add ("OCC26448", "OCC26448: check method Prepend() of sequence", __FILE__, OCC26448, group);
   return;
 }
index 3d84873687bea01e76ee6551c8416bb9bed156c5..b551829d0db0612fa53549707f3786bb41255462 100644 (file)
@@ -66,6 +66,8 @@ void TCollection_BaseSequence::PAppend(const Standard_Address newnode)
 // ---------------------------------------------------
 void TCollection_BaseSequence::PAppend(TCollection_BaseSequence& Other)
 {
+  if (Other.Size == 0)
+    return;
   if (Size == 0) {
     Size         = Other.Size;
     FirstItem    = Other.FirstItem;
@@ -103,6 +105,8 @@ void TCollection_BaseSequence::PPrepend(const Standard_Address newnode)
 
 void TCollection_BaseSequence::PPrepend(TCollection_BaseSequence& Other)
 {
+  if (Other.Size == 0)
+    return;
   if (Size == 0) {
     Size         = Other.Size;
     FirstItem    = Other.FirstItem;
diff --git a/tests/bugs/fclasses/bug26448 b/tests/bugs/fclasses/bug26448
new file mode 100644 (file)
index 0000000..fe1f663
--- /dev/null
@@ -0,0 +1,10 @@
+puts "============"
+puts "OCC26448"
+puts "============"
+puts ""
+#######################################################################
+# Method Prepend() of sequence breaks it if argument is empty sequence
+#######################################################################
+
+pload QAcommands
+OCC26448