public TableDataComparer Comparer(TableDataComparers strategy)
 {
     switch(strategy)
     {
         case TableDataComparers.OrdinalRowOrdinalColumn:
             return new TableDataCompositeComparer(new TableDataOrdinalColumnComparer(), new TableDataOrdinalRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.OrdinalRowNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchEqualColumnComparer(), new TableDataOrdinalRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.OrdinalRowSubsetNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchSubsetColumnComparer(), new TableDataOrdinalRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.UnorderedRowOrdinalColumn:
             return new TableDataCompositeComparer(new TableDataOrdinalColumnComparer(), new TableDataMatchEqualRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.UnorderedRowNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchEqualColumnComparer(), new TableDataMatchEqualRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.UnorderedRowSubsetNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchSubsetColumnComparer(), new TableDataMatchEqualRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.SubsetRowOrdinalColumn:
             return new TableDataCompositeComparer(new TableDataOrdinalColumnComparer(), new TableDataMatchSubsetRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.SubsetRowNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchEqualColumnComparer(), new TableDataMatchSubsetRowComparer(), new TableDataValueComparerPipeline());
         case TableDataComparers.SubsetRowSubsetNamedColumn:
             return new TableDataCompositeComparer(new TableDataMatchSubsetColumnComparer(), new TableDataMatchSubsetRowComparer(), new TableDataValueComparerPipeline());
         default:
             throw new ArgumentException("Invalid strategy", "strategy");
     }
 }
 public void VerifyMatch(TableData other, TableDataComparers strategy)
 {
     if (!IsMatch(other, new TableDataComparerStrategyFactory().Comparer(strategy))) throw new EquivalenceException(EquivalenceDetails(other));
 }
 public bool IsMatch(TableData other, TableDataComparers strategy)
 {
     return IsMatch(other, new TableDataComparerStrategyFactory().Comparer(strategy));
 }