Combining multiple parameter sets#

If multiple parameterize directives are issued in the same test file, the cartesian product of parameters is performed:

# Copyright NTESS. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: MIT

import sys

import canary

canary.directives.parameterize("a", (1, 4))
canary.directives.parameterize("b", (1.0e5, 1.0e6, 1.0e7))


def test():
    self = canary.test.instance
    print(f"running test with {self.parameters.a=} and {self.parameters.b=}")


if __name__ == "__main__":
    sys.exit(test())
$ canary describe parameterize/parameterize3.pyt
--- parameterize3 ------------
File: /home/docs/checkouts/readthedocs.org/user_builds/canary-wm/checkouts/latest/src/canary/examples/parameterize/parameterize3.pyt
Keywords: 
6 test specs using on_options=:
├── parameterize3.a=1.b=100000
├── parameterize3.a=1.b=1e+06
├── parameterize3.a=1.b=1e+07
├── parameterize3.a=4.b=100000
├── parameterize3.a=4.b=1e+06
└── parameterize3.a=4.b=1e+07

Similarly,

# Copyright NTESS. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: MIT

import sys

import canary

canary.directives.parameterize("a,b", [(1, 1e5), (2, 1e6), (3, 1e7)])
canary.directives.parameterize("cpus", (4, 8))


def test():
    self = canary.test.instance
    print(f"running test with {self.parameters.a=}, {self.parameters.b=}, {self.parameters.cpus=}")


if __name__ == "__main__":
    sys.exit(test())

results in the following 6 test cases:

$ canary describe parameterize/parameterize4.pyt
--- parameterize4 ------------
File: /home/docs/checkouts/readthedocs.org/user_builds/canary-wm/checkouts/latest/src/canary/examples/parameterize/parameterize4.pyt
Keywords: 
6 test specs using on_options=:
├── parameterize4.a=1.b=100000.cpus=4
├── parameterize4.a=1.b=100000.cpus=8
├── parameterize4.a=2.b=1e+06.cpus=4
├── parameterize4.a=2.b=1e+06.cpus=8
├── parameterize4.a=3.b=1e+07.cpus=4
└── parameterize4.a=3.b=1e+07.cpus=8