| 1681 | /// @private |
| 1682 | template <typename T> |
| 1683 | class SequenceGenerator : public Catch::Generators::IGenerator<T*> { |
| 1684 | T* digits; |
| 1685 | int len; |
| 1686 | T maxDigit; |
| 1687 | int ind; |
| 1688 | int seqLen; |
| 1689 | public: |
| 1690 | SequenceGenerator(T maxDigit_, int numDigits) { |
| 1691 | ind = 0; |
| 1692 | len = numDigits; |
| 1693 | maxDigit = maxDigit_; |
| 1694 | seqLen = (int) pow(1 + (int) maxDigit, len); |
| 1695 | digits = (T*) malloc(numDigits * sizeof *digits); |
| 1696 | for (int i=0; i<numDigits; i++) |
| 1697 | digits[i] = (T) 0; |
| 1698 | ind++; |
| 1699 | } |
| 1700 | |
| 1701 | T* const& get() const override { |
| 1702 | return digits; |
| 1703 | } |
| 1704 | |
| 1705 | bool next() override { |
| 1706 | bool isNext = (ind++) < seqLen; |
| 1707 | if (isNext) { |
| 1708 | int i=0; |
| 1709 | while (digits[i] == maxDigit) |
| 1710 | digits[i++] = (T) 0; |
| 1711 | digits[i] = (T) ((int) digits[i] + 1); |
| 1712 | } |
| 1713 | return isNext; |
| 1714 | } |
| 1715 | |
| 1716 | ~SequenceGenerator() { |
| 1717 | free(digits); |
| 1718 | } |
| 1719 | }; |
| 1720 | Catch::Generators::GeneratorWrapper<int*> bitsets(int numBits) { |
| 1721 | return Catch::Generators::GeneratorWrapper<int*>( |
| 1722 | Catch::Detail::make_unique<SequenceGenerator<int>>(1, numBits)); |
nothing calls this directly
no outgoing calls
no test coverage detected