text: /*
   * The MIT License (MIT)
   *
   * Copyright (c) 2017-2018 Morwenn
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  #include <algorithm>
  #include <iterator>
  #include <vector>
  #include <catch2/catch.hpp>
  #include <cpp-sort/sort.h>
  #include <cpp-sort/sorters.h>
  #include <cpp-sort/utility/buffer.h>
  #include <cpp-sort/utility/functional.h>
  #include "../distributions.h"
  
  TEMPLATE_TEST_CASE( "test sorter with descending_sawtooth distribution", "[distributions]",
                      cppsort::block_sorter<>,
                      cppsort::block_sorter<
                          cppsort::utility::dynamic_buffer<cppsort::utility::half>
                      >,
                      cppsort::drop_merge_sorter,
                      cppsort::grail_sorter<>,
                      cppsort::grail_sorter<
                          cppsort::utility::dynamic_buffer<cppsort::utility::sqrt>
                      >,
                      cppsort::heap_sorter,
                      cppsort::merge_sorter,
                      cppsort::pdq_sorter,
                      cppsort::poplar_sorter,
                      cppsort::quick_merge_sorter,
                      cppsort::quick_sorter,
                      cppsort::ska_sorter,
                      cppsort::smooth_sorter,
                      cppsort::spread_sorter,
                      cppsort::std_sorter,
                      cppsort::tim_sorter,
                      cppsort::verge_sorter )
  {
      std::vector<int> collection;
      collection.reserve(10'000);
      auto distribution = dist::descending_sawtooth{};
      distribution(std::back_inserter(collection), 10'000);
  
      using sorter = TestType;
      cppsort::sort(sorter{}, collection);
      CHECK( std::is_sorted(std::begin(collection), std::end(collection)) );
  }
  