Skip to content

Commit b4a9f8e

Browse files
JohanMabillessam18
andauthored
Fix poisson and geometric missing default for template parameter T (#2917)
Cherry-picked last commit from #2893, easier to do so than rebasing. Co-authored-by: Samaresh Kumar Singh <ssam3003@gmail.com>
1 parent 8422c69 commit b4a9f8e

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

include/xtensor/generators/xrandom.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ namespace xt
6363
auto
6464
binomial(const S& shape, T trials = 1, D prob = 0.5, E& engine = random::get_default_random_engine());
6565

66-
template <class T, class S, class D = double, class E = random::default_engine_type>
66+
template <class T = int, class S, class D = double, class E = random::default_engine_type>
6767
auto geometric(const S& shape, D prob = 0.5, E& engine = random::get_default_random_engine());
6868

6969
template <class T, class S, class D = double, class E = random::default_engine_type>
7070
auto
7171
negative_binomial(const S& shape, T k = 1, D prob = 0.5, E& engine = random::get_default_random_engine());
7272

73-
template <class T, class S, class D = double, class E = random::default_engine_type>
73+
template <class T = int, class S, class D = double, class E = random::default_engine_type>
7474
auto poisson(const S& shape, D rate = 1.0, E& engine = random::get_default_random_engine());
7575

7676
template <class T, class S, class E = random::default_engine_type>
@@ -123,7 +123,7 @@ namespace xt
123123
auto
124124
binomial(const I (&shape)[L], T trials = 1, D prob = 0.5, E& engine = random::get_default_random_engine());
125125

126-
template <class T, class I, std::size_t L, class D = double, class E = random::default_engine_type>
126+
template <class T = int, class I, std::size_t L, class D = double, class E = random::default_engine_type>
127127
auto geometric(const I (&shape)[L], D prob = 0.5, E& engine = random::get_default_random_engine());
128128

129129
template <class T, class I, std::size_t L, class D = double, class E = random::default_engine_type>
@@ -134,7 +134,7 @@ namespace xt
134134
E& engine = random::get_default_random_engine()
135135
);
136136

137-
template <class T, class I, std::size_t L, class D = double, class E = random::default_engine_type>
137+
template <class T = int, class I, std::size_t L, class D = double, class E = random::default_engine_type>
138138
auto poisson(const I (&shape)[L], D rate = 1.0, E& engine = random::get_default_random_engine());
139139

140140
template <class T, class I, std::size_t L, class E = random::default_engine_type>

test/test_xrandom.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,20 @@ namespace xt
237237
#endif
238238
}
239239

240+
TEST(xrandom, poisson_geometric_default_type)
241+
{
242+
// poisson and geometric have no parameter from which T can be deduced,
243+
// so they require a default T (= int) to be callable without explicit template arg.
244+
auto p = random::poisson({3, 3}, 1.0);
245+
static_assert(std::is_same<decltype(p)::value_type, int>::value, "poisson default T must be int");
246+
247+
auto g = random::geometric({3, 3}, 0.5);
248+
static_assert(std::is_same<decltype(g)::value_type, int>::value, "geometric default T must be int");
249+
250+
auto p2 = random::poisson({3, 3});
251+
static_assert(std::is_same<decltype(p2)::value_type, int>::value, "poisson default T must be int");
252+
}
253+
240254
TEST(xrandom, permutation)
241255
{
242256
xt::random::seed(123);

0 commit comments

Comments
 (0)