mirror of https://github.com/swig/swig.git
51 lines
2.5 KiB
Python
51 lines
2.5 KiB
Python
from cpp20_abbreviated_template_mixed import *
|
|
|
|
from swig_test_utils import swig_check
|
|
|
|
# Each non-decorated case pairs std::string with a numeric type, so Python's type system catches an
|
|
# argument order swap (it isn't enough to compare ints to doubles - those would silently convert).
|
|
# Each mix function joins its arguments with '/' between them via a shared join_text helper, so
|
|
# the expected strings show the binding directly.
|
|
|
|
# a. Explicit typename + auto. T=std::string, auto=int.
|
|
swig_check(a_mix_si("hello", 5), "hello/5")
|
|
|
|
# b. Auto + explicit typename. Template <U=std::string, auto=int> -> wrapped (int x, std::string y).
|
|
swig_check(b_mix_is(3, "hi"), "3/hi")
|
|
|
|
# c. Two explicit parms surrounding an auto. Template <T=int, V=int, auto=std::string> ->
|
|
# wrapped (int, string, int) per the function parm order.
|
|
swig_check(c_mix_isi(1, "x", 2), "1/x/2")
|
|
|
|
# d. Constrained explicit + constrained auto. T=int, auto=double.
|
|
swig_check(d_mix_id(3, 4.0), "3/4.00")
|
|
|
|
# e. Two autos surrounding an explicit typename. auto=string, T=int, auto=string.
|
|
swig_check(e_mix_iss("a", 7, "b"), "a/7/b")
|
|
|
|
# Cases f..j combine 'auto' with a variadic explicit pack. Per C++20 [dcl.fct]/19 the invented
|
|
# type template-parameter for each 'auto' is appended after the explicit list, so when that list
|
|
# ends in a pack the invented sits past it. %template binding is positional: leading non-variadic
|
|
# parms bind one to one, the pack absorbs the middle args, and trailing args bind to the invented
|
|
# parms in declaration order.
|
|
|
|
# f. Auto + variadic pack. Ts={int, std::string}, invented=double.
|
|
# Wrapper sig (double x, int y1, std::string y2). Pack args wrapped in "[" / "]" markers.
|
|
swig_check(f_mix_isd(2.5, 7, "Y"), "2.50/[/7/Y/]")
|
|
|
|
# g. Leading explicit + auto + variadic pack. T=int, Ts={std::string, double}, invented=std::string.
|
|
# Wrapper sig (int x, std::string y, std::string z1, double z2).
|
|
swig_check(g_mix_isds(1, "Y", "Z", 2.5), "1/Y/[/Z/2.50/]")
|
|
|
|
# h. Constrained auto + variadic pack. Ts={int, std::string}, invented=double.
|
|
# Wrapper sig (double x, int y1, std::string y2).
|
|
swig_check(h_mix_isd(4.0, 7, "Y"), "4.00/[/7/Y/]")
|
|
|
|
# i. Two autos surrounding a variadic pack. Ts={int, std::string}, invented1=double, invented2=int.
|
|
# Wrapper sig (double x, int y1, std::string y2, int z).
|
|
swig_check(i_mix_isdi(2.5, 7, "Y2", 99), "2.50/[/7/Y2/]/99")
|
|
|
|
# j. Decorated auto (const auto&) + variadic pack. Ts={int, std::string}, invented=double.
|
|
# Wrapper sig (const double& x, int y1, std::string y2).
|
|
swig_check(j_mix_isd(2.5, 7, "Y"), "2.50/[/7/Y/]")
|