You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							266 lines
						
					
					
						
							6.2 KiB
						
					
					
				
			
		
		
	
	
							266 lines
						
					
					
						
							6.2 KiB
						
					
					
				| /*=========================================================================
 | |
| 
 | |
|   Program:   Visualization Toolkit
 | |
|   Module:    $RCSfile: otherStringArray.cxx,v $
 | |
| 
 | |
|   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
 | |
|   All rights reserved.
 | |
|   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 | |
| 
 | |
|      This software is distributed WITHOUT ANY WARRANTY; without even
 | |
|      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 | |
|      PURPOSE.  See the above copyright notice for more information.
 | |
| 
 | |
| =========================================================================*/
 | |
| 
 | |
| #include "vtkDebugLeaks.h"
 | |
| #include "vtkCharArray.h"
 | |
| #include "vtkIdTypeArray.h"
 | |
| #include "vtkStringArray.h"
 | |
| #include "vtkIdList.h"
 | |
| 
 | |
| #define SIZE 1000
 | |
| 
 | |
| int doStringArrayTest(ostream& strm, int size)
 | |
| {
 | |
|   int errors = 0;
 | |
| 
 | |
|   vtkStringArray *ptr = vtkStringArray::New();
 | |
|   vtkStdString *strings = new vtkStdString[SIZE];
 | |
|   for (int i = 0; i < SIZE; ++i)
 | |
|     {
 | |
|     char buf[1024];
 | |
|     sprintf(buf, "string entry %d", i);
 | |
|     strings[i] = vtkStdString(buf); 
 | |
|     }
 | |
| 
 | |
|   strm << "\tResize(0)...";
 | |
|   ptr->Resize(0); 
 | |
|   strm << "OK" << endl;
 | |
| 
 | |
|   strm << "\tResize(10)...";
 | |
|   ptr->Resize(10); 
 | |
|   strm << "OK" << endl;
 | |
| 
 | |
|   strm << "\tResize(5)...";
 | |
|   ptr->Resize(5); 
 | |
|   strm << "OK" << endl;
 | |
| 
 | |
|   strm << "\tResize(size)...";
 | |
|   ptr->Resize(size); 
 | |
|   strm << "OK" << endl;
 | |
| 
 | |
|   strm << "\tSetNumberOfValues...";
 | |
|   ptr->SetNumberOfValues(100);
 | |
|   if (ptr->GetNumberOfValues() == 100) strm << "OK" << endl;
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   strm << "\tSetVoidArray...";
 | |
|   ptr->SetVoidArray(strings, size, 1);
 | |
|   strm << "OK" << endl;
 | |
|   
 | |
|   strm << "\tGetValue...";
 | |
|   vtkStdString value = ptr->GetValue(123);
 | |
|   if (value == "string entry 123") 
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED.  Expected 'string entry 123', got '" 
 | |
|          << value << "'" << endl;
 | |
| #ifdef DUMP_VALUES
 | |
|     for (int i = 0; i < ptr->GetNumberOfValues(); ++i)
 | |
|       {
 | |
|       strm << "\t\tValue " << i << ": " << ptr->GetValue(i) << endl;
 | |
|       }
 | |
| #endif
 | |
|     }
 | |
| 
 | |
|   strm << "\tSetValue...";
 | |
|   ptr->SetValue(124, "jabberwocky");
 | |
|   if (ptr->GetValue(124) == "jabberwocky")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   strm << "\tInsertValue...";
 | |
|   ptr->InsertValue(500, "There and Back Again");
 | |
|   if (ptr->GetValue(500) == "There and Back Again")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   strm << "\tInsertNextValue...";
 | |
|   if (ptr->GetValue(ptr->InsertNextValue("3.141592653589")) ==
 | |
|       "3.141592653589")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   strm << "\tvtkAbstractArray::GetValues(vtkIdList)...";
 | |
|   vtkIdList *indices = vtkIdList::New();
 | |
|   indices->InsertNextId(10);
 | |
|   indices->InsertNextId(20);
 | |
|   indices->InsertNextId(314);
 | |
| 
 | |
|   vtkStringArray *newValues = vtkStringArray::New();
 | |
|   newValues->SetNumberOfValues(3);
 | |
|   ptr->GetValues(indices, newValues);
 | |
|   
 | |
|   if (newValues->GetValue(0) == "string entry 10" &&
 | |
|       newValues->GetValue(1) == "string entry 20" &&
 | |
|       newValues->GetValue(2) == "string entry 314")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED.  Results:" << endl;
 | |
|     strm << "\tExpected: 'string entry 10'\tActual: '" 
 | |
|          << newValues->GetValue(0) << "'" << endl;
 | |
|     strm << "\tExpected: 'string entry 20'\tActual: '" 
 | |
|          << newValues->GetValue(1) << "'" << endl;
 | |
|     strm << "\tExpected: 'string entry 314'\tActual: '" 
 | |
|          << newValues->GetValue(2) << "'" << endl;
 | |
|     }
 | |
| 
 | |
|   newValues->Reset();
 | |
| 
 | |
|   strm << "\tvtkAbstractArray::GetValues(vtkIdType, vtkIdType)...";
 | |
|   newValues->SetNumberOfValues(3);
 | |
|   ptr->GetValues(30, 32, newValues);
 | |
|   if (newValues->GetValue(0) == "string entry 30" &&
 | |
|       newValues->GetValue(1) == "string entry 31" &&
 | |
|       newValues->GetValue(2) == "string entry 32")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   strm << "\tvtkAbstractArray::CopyValue...";
 | |
|   ptr->CopyValue(150, 2, newValues);
 | |
|   if (ptr->GetValue(150) == "string entry 32")
 | |
|     {
 | |
|     strm << "OK" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED" << endl;
 | |
|     }
 | |
| 
 | |
|   newValues->Delete();
 | |
|   indices->Delete();
 | |
| 
 | |
|   strm << "PrintSelf..." << endl;
 | |
|   strm << *ptr;
 | |
| 
 | |
|   ptr->Delete();
 | |
|   delete [] strings;
 | |
| 
 | |
|   strm << "\tvtkAbstractArray::ConvertToContiguous...";
 | |
|   vtkStringArray *srcArray = vtkStringArray::New();
 | |
|   vtkStringArray *destArray = vtkStringArray::New();
 | |
| 
 | |
|   srcArray->InsertNextValue("First");
 | |
|   srcArray->InsertNextValue("Second");
 | |
|   srcArray->InsertNextValue("Third");
 | |
| 
 | |
|   vtkDataArray *data;
 | |
|   vtkIdTypeArray *offsets;
 | |
|   srcArray->ConvertToContiguous(&data, &offsets);
 | |
| 
 | |
|   char combinedString[] = "FirstSecondThird";
 | |
|   vtkCharArray *charData = vtkCharArray::SafeDownCast(data);
 | |
|   if (charData == NULL)
 | |
|     {
 | |
|     ++errors;
 | |
|     strm << "FAILED: couldn't downcast data array" << endl;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     for (int i = 0; i < static_cast<int>(strlen(combinedString)); ++i)
 | |
|       {
 | |
|       if (charData->GetValue(i) != combinedString[i])
 | |
|         {
 | |
|         strm << "FAILED: array element " << i << " is wrong.  Expected "
 | |
|              << combinedString[i] << ", got "
 | |
|              << charData->GetValue(i) << endl;
 | |
|         ++errors;
 | |
|         }
 | |
|       }
 | |
|     
 | |
| 
 | |
|     destArray->ConvertFromContiguous(data, offsets);
 | |
|     
 | |
|     if (destArray->GetNumberOfValues() != srcArray->GetNumberOfValues())
 | |
|       {
 | |
|       ++errors;
 | |
|       strm << "FAILED: reconstructed lengths don't match" << endl;
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|       for (int i = 0; i < srcArray->GetNumberOfValues(); ++i)
 | |
|         {
 | |
|         if (destArray->GetValue(i) != srcArray->GetValue(i))
 | |
|           {
 | |
|           strm << "FAILED: element " << i << " doesn't match" << endl;
 | |
|           ++errors;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   
 | |
| 
 | |
|   srcArray->Delete();
 | |
|   destArray->Delete();
 | |
|   data->Delete();
 | |
|   offsets->Delete();
 | |
| 
 | |
|   return errors;
 | |
| }
 | |
| 
 | |
| int otherStringArrayTest(ostream& strm)
 | |
| {
 | |
|   int errors = 0;
 | |
|     {
 | |
|     strm << "Test StringArray" << endl;
 | |
|     errors += doStringArrayTest(strm, SIZE);
 | |
|     }
 | |
| 
 | |
|     return errors;
 | |
| }
 | |
| 
 | |
| int otherStringArray(int, char *[])
 | |
| {
 | |
|   ostrstream vtkmsg_with_warning_C4701; 
 | |
| //  return otherArraysTest(vtkmsg_with_warning_C4701);
 | |
|   return otherStringArrayTest(cerr);
 | |
| 
 | |
| } 
 | |
| 
 |