[vtk-developers] New testing utility: vtkPermuteOptions

Allie Vacanti allison.vacanti at kitware.com
Fri Jan 19 06:59:49 EST 2018

Hi folks,

Firstly, I'm so happy that we've enabled C++11 in VTK :-)

I have a merge request for a new testing utility that you may find useful.
While adding support for bit arrays to the XML writers, I needed to make
sure that the new functionality worked no matter which combination of
writer settings were used (byte order, data mode, compression, etc).

To make this easier, I added a class template that will do exactly that --
you specify options and possible values, and vtkPermuteOptions will
simplify testing all possible combinations of these, e.g.

// vtkPermuteOptions is templated on the class that gets configured:
vtkPermuteOptions<vtkXMLWriter> config;

// Add option ByteOrder with values BigEndian and LittleEndian
// in separate AddOptionValue calls:
this->AddOptionValue("ByteOrder", &vtkXMLWriter::SetByteOrder,
                     "BigEndian", vtkXMLWriter::BigEndian);
this->AddOptionValue("ByteOrder", &vtkXMLWriter::SetByteOrder,
                     "LittleEndian", vtkXMLWriter::LittleEndian);

// Add option CompressorType with values NONE, ZLIB, and LZ4
// in a single AddOptionValues call:
this->AddOptionValues("CompressorType", &vtkXMLWriter::SetCompressorType,
                       "NONE", vtkXMLWriter::NONE,
                       "ZLIB", vtkXMLWriter::ZLIB,
                       "LZ4", vtkXMLWriter::LZ4);

// Generate the permutation list:

// Loop through all combinations of options
while (!config.IsDoneWithPermutations())
  // Apply the current option permutation to a vtkXMLWriter object:
  vtkXMLWriter *writer = ...;

  // Testing code:
  std::cout << "Testing " << config.GetCurrentPermutationName() << "\n";


In this example, runTest will be called 6 times, while varying the
specified options:

Test Iteration    ByteOrder         CompressorType
--------------    ---------         --------------
1                 BigEndian         NONE
2                 BigEndian         ZLIB
3                 BigEndian         LZ4
4                 LittleEndian      NONE
5                 LittleEndian      ZLIB
6                 LittleEndian      LZ4

I figured I'd mention this here, since I've found myself wanting this
capability several times over the years and thought it may be of general
interest. The merge request is up here:


Also, I'm open to a name change if anyone wants to flex their knowledge of
mathematics ;) I'm not 100% sure that "permutation" is the best name for
this sort of operation.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://vtk.org/pipermail/vtk-developers/attachments/20180119/b300e008/attachment.html>

More information about the vtk-developers mailing list