2017-08-24 15:21:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< a  id = "top" > < / a >  
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Test cases and sections
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 11:09:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								**Contents**< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[Tags ](#tags )< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[Tag aliases ](#tag-aliases )< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[BDD-style test cases ](#bdd-style-test-cases )< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[Type parametrised test cases ](#type-parametrised-test-cases )< br > 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-24 17:04:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[Signature based parametrised test cases ](#signature-based-parametrised-test-cases )< br > 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 11:09:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 07:55:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								While Catch fully supports the traditional, xUnit, style of class-based fixtures containing test case methods this is not the preferred style.
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-06 22:44:35 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Instead Catch provides a powerful mechanism for nesting test case sections within a test case. For a more detailed discussion see the [tutorial ](tutorial.md#test-cases-and-sections ).
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Test cases and sections are very easy to use in practice:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 08:17:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **TEST_CASE(** _test name_  \[, _tags_  \] ** )** 
						 
					
						
							
								
									
										
										
										
											2019-11-03 22:50:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **SECTION(** _section name_ , \[, _section description_  \] ** )** 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-03 22:50:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_test name_ and _section name_  are free form, quoted, strings.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The optional _tags_  argument is a quoted string containing one or more
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								tags enclosed in square brackets, and are discussed below.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_section description_ can be used to provide long form description
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								of a section while keeping the _section name_  short for use with the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[`-c` command line parameter ](command-line.md#specify-the-section-to-run ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								**Test names must be unique within the Catch executable.**
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-24 15:33:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For examples see the [Tutorial ](tutorial.md#top )
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Tags
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-14 19:08:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Tags allow an arbitrary number of additional strings to be associated with a test case. Test cases can be selected (for running, or just for listing) by tag - or even by an expression that combines several tags. At their most basic level they provide a simple way to group several related tests together.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								As an example - given the following test cases:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-28 16:17:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    TEST_CASE( "A", "[widget]" ) { /* ... */ }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TEST_CASE( "B", "[widget]" ) { /* ... */ }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TEST_CASE( "C", "[gadget]" ) { /* ... */ }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TEST_CASE( "D", "[widget][gadget]" ) { /* ... */ }
							 
						 
					
						
							
								
									
										
										
										
											2013-11-14 19:08:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The tag expression, ```"[widget]"` `` selects A, B & D. ` ``"[gadget]"` `` selects C & D. ` ``"[widget][gadget]"` `` selects just D and ` ``"[widget],[gadget]"` `` selects all four test cases.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more detail on command line selection see [the command line docs ](command-line.md#specifying-which-tests-to-run )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-27 10:04:48 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Tag names are not case sensitive and can contain any ASCII characters.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This means that tags `[tag with spaces]`  and `[I said "good day"]` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								are both allowed tags and can be filtered on. However, escapes are not
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								supported however and `[\]]`  is not a valid tag.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The same tag can be specified multiple times for a single test case,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								but only one of the instances of identical tags will be kept. Which one
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is kept is functionally random.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Special Tags
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								All tag names beginning with non-alphanumeric characters are reserved by Catch. Catch defines a number of "special" tags, which have meaning to the test runner itself. These special tags all begin with a symbol character. Following is a list of currently defined special tags and their meanings.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-28 20:48:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[.]`  - causes test cases to be skipped from the default list (i.e. when no test cases have been explicitly selected through tag expressions or name wildcards). The hide tag is often combined with another, user, tag (for example `[.][integration]`  - so all integration tests are excluded from the default run but can be run by passing `[integration]`  on the command line). As a short-cut you can combine these by simply prefixing your user tag with a `.`  - e.g. `[.integration]` . 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-28 16:17:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[!throws]`  - lets Catch know that this test is likely to throw an exception even if successful. This causes the test to be excluded when running with `-e`  or `--nothrow` . 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-26 11:37:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[!mayfail]`  - doesn't fail the test if any given assertion fails (but still reports it). This can be useful to flag a work-in-progress, or a known issue that you don't want to immediately fix but still want to track in your tests. 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-13 19:35:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[!shouldfail]`  - like `[!mayfail]`  but *fails*  the test if it *passes* . This can be useful if you want to be notified of accidental, or third-party, fixes. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-23 17:44:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[!nonportable]`  - Indicates that behaviour may vary between platforms or compilers. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-26 11:37:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[#<filename>]`  - running with `-#`  or `--filenames-as-tags`  causes Catch to add the filename, prefixed with `#`  (and with any extension stripped), as a tag to all contained tests, e.g. tests in testfile.cpp would all be tagged `[#testfile]` . 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  `[@<alias>]`  - tag aliases all begin with `@`  (see below). 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-27 16:47:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  `[!benchmark]`  - this test case is actually a benchmark. This is an experimental feature, and currently has no documentation. If you want to try it out, look at `projects/SelfTest/Benchmark.tests.cpp`  for details. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Tag aliases
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-26 11:37:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Between tag expressions and wildcarded test names (as well as combinations of the two) quite complex patterns can be constructed to direct which test cases are run. If a complex pattern is used often it is convenient to be able to create an alias for the expression. This can be done, in code, using the following form:
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-28 16:17:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CATCH_REGISTER_TAG_ALIAS( < alias  string > , < tag  expression >  )
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-22 21:26:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Aliases must begin with the `@`  character. An example of a tag alias is:
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-28 16:17:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CATCH_REGISTER_TAG_ALIAS( "[@nhf ]", "[failing]~[.]" )
							 
						 
					
						
							
								
									
										
										
										
											2015-07-06 18:46:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Now when `[@nhf]`  is used on the command line this matches all tests that are tagged `[failing]` , but which are not also hidden.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 07:55:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## BDD-style test cases
  
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 07:55:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								In addition to Catch's take on the classic style of test cases, Catch supports an alternative syntax that allow tests to be written as "executable specifications" (one of the early goals of [Behaviour Driven Development ](http://dannorth.net/introducing-bdd/ )). This set of macros map on to ```TEST_CASE` ``s and ` ``SECTION` ``s, with a little internal support to make them smoother to work with.
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 08:17:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **SCENARIO(** _scenario name_  \[, _tags_  \] ** )** 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This macro maps onto ```TEST_CASE` `` and works in the same way, except that the test case name will be prefixed by "Scenario: "
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-02 08:17:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **GIVEN(** _something_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **WHEN(** _something_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **THEN(** _something_  ** )** 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 13:02:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								These macros map onto ```SECTION` ``s except that the section names are the _something_  texts prefixed by
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"given: ", "when: " or "then: " respectively. These macros also map onto the AAA or A< sup > 3< / sup >  test pattern
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								(standing either for [Assemble-Activate-Assert ](http://wiki.c2.com/?AssembleActivateAssert ) or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[Arrange-Act-Assert ](http://wiki.c2.com/?ArrangeActAssert )), and in this context, the macros provide both code
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 07:20:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								documentation and reporting of these parts of a test case without the need for extra comments or code to do so.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 13:02:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Semantically, a `GIVEN`  clause may have multiple _independent_  `WHEN`  clauses within it. This allows a test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to have, e.g., one set of "given" objects and multiple subtests using those objects in various ways in each
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								of the `WHEN`  clauses without repeating the initialisation from the `GIVEN`  clause. When there are _dependent_ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								clauses -- such as a second `WHEN`  clause that should only happen _after_  the previous `WHEN`  clause has been
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 07:20:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								executed and validated -- there are additional macros starting with `AND_` :
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-22 13:08:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **AND_GIVEN(** _something_  ** )** 
						 
					
						
							
								
									
										
										
										
											2013-10-02 08:17:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **AND_WHEN(** _something_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **AND_THEN(** _something_  ** )** 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 13:02:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								These are used to chain ```GIVEN` ``s, ` ``WHEN` ``s and ` ``THEN` ``s together. The ` AND_*` clause is placed
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_inside_ the clause on which it depends. There can be multiple _independent_  clauses that are all _dependent_ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								on a single outer clause.
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 07:20:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SCENARIO( "vector can be sized and resized" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    GIVEN( "An empty vector" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        auto v = std::vector< std::string > {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Validate assumption of the GIVEN clause
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        THEN( "The size and capacity start at 0" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            REQUIRE( v.size() == 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            REQUIRE( v.capacity() == 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Validate one use case for the GIVEN object
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        WHEN( "push_back() is called" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            v.push_back("hullo");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            THEN( "The size changes" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                REQUIRE( v.size() == 1 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                REQUIRE( v.capacity() >= 1 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 13:02:07 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This code will result in two runs through the scenario:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Scenario : vector can be sized and resized
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Given  : An empty vector
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Then   : The size and capacity start at 0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Scenario : vector can be sized and resized
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Given  : An empty vector
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  When   : push_back() is called
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Then   : The size changes
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								See also [runnable example on godbolt ](https://godbolt.org/z/e5vPPM ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								with a more complicated (and failing) example.
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 10:22:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								>  `AND_GIVEN` was [introduced](https://github.com/catchorg/Catch2/issues/1360) in Catch2 2.4.0.
  
						 
					
						
							
								
									
										
										
										
											2019-07-22 13:20:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 19:07:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								When any of these macros are used the console reporter recognises them and formats the test case header such that the Givens, Whens and Thens are aligned to aid readability.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Other than the additional prefixes and the formatting in the console reporter these macros behave exactly as ```TEST_CASE` ``s and ` ``SECTION` ``s. As such there is nothing enforcing the correct sequencing of these macros - that's up to the programmer!
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-16 19:39:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Type parametrised test cases
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In addition to `TEST_CASE` s, Catch2 also supports test cases parametrised
							 
						 
					
						
							
								
									
										
										
										
											2019-05-27 20:39:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								by types, in the form of `TEMPLATE_TEST_CASE` ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`TEMPLATE_PRODUCT_TEST_CASE`  and `TEMPLATE_LIST_TEST_CASE` . 
						 
					
						
							
								
									
										
										
										
											2018-11-16 19:39:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **TEMPLATE_TEST_CASE(** _test name_  , _tags_ ,  _type1_ , _type2_ , ..., _typen_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 10:22:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								>  [Introduced](https://github.com/catchorg/Catch2/issues/1437) in Catch2 2.5.0.
  
						 
					
						
							
								
									
										
										
										
											2019-07-22 12:41:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-16 19:39:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_test name_ and _tag_  are exactly the same as they are in `TEST_CASE` ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								with the difference that the tag string must be provided (however, it
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								can be empty). _type1_  through _typen_  is the list of types for which
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								this test case should run, and, inside the test code, the current type
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is available as the `TestType`  type.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Because of limitations of the C++ preprocessor, if you want to specify
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								a type with multiple template parameters, you need to enclose it in
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								parentheses, e.g. `std::map<int, std::string>`  needs to be passed as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`(std::map<int, std::string>)` . 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Example:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TEMPLATE_TEST_CASE( "vectors can be sized and resized", "[vector][template]", int, std::string, (std::tuple< int , float > ) ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std::vector< TestType >  v( 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE( v.size() == 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE( v.capacity() >= 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SECTION( "resizing bigger changes size and capacity" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v.resize( 10 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.size() == 10 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.capacity() >= 10 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SECTION( "resizing smaller changes size but not capacity" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v.resize( 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.size() == 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.capacity() >= 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        SECTION( "We can use the 'swap trick' to reset the capacity" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            std::vector< TestType >  empty;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            empty.swap( v );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            REQUIRE( v.capacity() == 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SECTION( "reserving smaller does not change size or capacity" ) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        v.reserve( 0 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.size() == 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        REQUIRE( v.capacity() >= 5 );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-25 14:45:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **TEMPLATE_PRODUCT_TEST_CASE(** _test name_  , _tags_ , (_template-type1_, _template-type2_ , ..., _template-typen_ ), (_template-arg1_, _template-arg2_ , ..., _template-argm_ ) ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 10:22:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								>  [Introduced](https://github.com/catchorg/Catch2/issues/1468) in Catch2 2.6.0.
  
						 
					
						
							
								
									
										
										
										
											2019-07-22 12:31:33 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-25 14:45:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_template-type1_ through _template-typen_  is list of template template
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								types which should be combined with each of _template-arg1_  through
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 _template-argm_ , resulting in _n * m_  test cases. Inside the test case,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								the resulting type is available under the name of `TestType` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								To specify more than 1 type as a single _template-type_  or _template-arg_ ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								you must enclose the types in an additional set of parentheses, e.g.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`((int, float), (char, double))`  specifies 2 template-args, each 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								consisting of 2 concrete types (`int` , `float`  and `char` , `double` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								respectively). You can also omit the outer set of parentheses if you
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								specify only one type as the full set of either the _template-types_ ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								or the _template-args_ .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Example:
							 
						 
					
						
							
								
									
										
										
										
											2019-01-07 09:40:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
									
										
										
										
											2018-11-25 14:45:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								template<  typename  T > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct Foo {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t size() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TEMPLATE_PRODUCT_TEST_CASE("A Template product test case", "[template][product]", (std::vector, Foo), (int, float)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TestType x;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE(x.size() == 0);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You can also have different arities in the _template-arg_  packs:
							 
						 
					
						
							
								
									
										
										
										
											2019-01-07 09:40:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
									
										
										
										
											2018-11-25 14:45:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								TEMPLATE_PRODUCT_TEST_CASE("Product with differing arities", "[template][product]", std::tuple, (int, (int, double), (int, double, float))) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TestType x;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE(std::tuple_size< TestType > ::value >= 1);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-27 20:39:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  **TEMPLATE_LIST_TEST_CASE(** _test name_ , _tags_ , _type list_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 10:22:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								>  [Introduced](https://github.com/catchorg/Catch2/issues/1627) in Catch2 2.9.0.
  
						 
					
						
							
								
									
										
										
										
											2019-07-18 15:22:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-27 20:39:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								_type list_ is a generic list of types on which test case should be instantiated.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								List can be `std::tuple` , `boost::mpl::list` , `boost::mp11::mp_list`  or anything with
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`template <typename...>`  signature. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This allows you to reuse the _type list_  in multiple test cases.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Example:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								using MyTypes = std::tuple< int ,  char ,  float > ;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TEMPLATE_LIST_TEST_CASE("Template test case with test types specified inside std::tuple", "[template][list]", MyTypes)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE(sizeof(TestType) > 0);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-24 17:04:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Signature based parametrised test cases
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 10:22:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								>  [Introduced](https://github.com/catchorg/Catch2/issues/1609) in Catch2 2.8.0.
  
						 
					
						
							
								
									
										
										
										
											2019-07-21 20:55:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-24 17:04:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								In addition to [type parametrised test cases ](#type-parametrised-test-cases ) Catch2 also supports
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								signature base parametrised test cases, in form of `TEMPLATE_TEST_CASE_SIG`  and `TEMPLATE_PRODUCT_TEST_CASE_SIG` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								These test cases have similar syntax like [type parametrised test cases ](#type-parametrised-test-cases ), with one
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								additional positional argument which specifies the signature.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Signature
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Signature has some strict rules for these tests cases to work properly:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  signature with multiple template parameters e.g. `typename T, size_t S`  must have this format in test case declaration 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  `((typename T, size_t S), T, S)` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  signature with variadic template arguments e.g. `typename T, size_t S, typename...Ts`  must have this format in test case declaration 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  `((typename T, size_t S, typename...Ts), T, S, Ts...)` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  signature with single non type template parameter e.g. `int V`  must have this format in test case declaration `((int V), V)`  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  signature with single type template parameter e.g. `typename T`  should not be used as it is in fact `TEMPLATE_TEST_CASE`  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Currently Catch2 support up to 11 template parameters in signature
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Examples
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **TEMPLATE_TEST_CASE_SIG(** _test name_  , _tags_ ,  _signature_ , _type1_ , _type2_ , ..., _typen_  ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-23 13:02:20 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Inside `TEMPLATE_TEST_CASE_SIG`  test case you can use the names of template parameters as defined in _signature_ .
							 
						 
					
						
							
								
									
										
										
										
											2019-04-24 17:04:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TEMPLATE_TEST_CASE_SIG("TemplateTestSig: arrays can be created from NTTP arguments", "[vector][template][nttp]",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ((typename T, int V), T, V), (int,5), (float,4), (std::string,15), ((std::tuple< int ,  float > ), 6)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std::array< T ,  V >  v;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE(v.size() > 1);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **TEMPLATE_PRODUCT_TEST_CASE_SIG(** _test name_  , _tags_ , _signature_ , (_template-type1_, _template-type2_ , ..., _template-typen_ ), (_template-arg1_, _template-arg2_ , ..., _template-argm_ ) ** )** 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template< typename  T ,  size_t  S > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct Bar {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t size() { return S; }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TEMPLATE_PRODUCT_TEST_CASE_SIG("A Template product test case with array signature", "[template][product][nttp]", ((typename T, size_t S), T, S), (std::array, Bar), ((int, 9), (float, 42))) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TestType x;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    REQUIRE(x.size() > 0);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-01 08:20:08 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-24 15:33:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[Home ](Readme.md#top )