Skip to content

Commit fceeff5

Browse files
committed
Added random number generator unit tests (closes #28)
Adds unit test for random generation for the R:: namespace where Rmath is kept. Added section breaks in C++ code for each distribution
1 parent ca82a84 commit fceeff5

File tree

4 files changed

+296
-1
lines changed

4 files changed

+296
-1
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2016-07-22 James J Balamuta <balamut2@illinois.edu>
2+
3+
* inst/unitTests/cpp/rmath.cpp: Added unit test functions for Rmath
4+
random number generators.
5+
* inst/unitTests/runit.rmath.R: idem
6+
17
2016-07-21 Dirk Eddelbuettel <edd@debian.org>
28

39
* DESCRIPTION (Version): Roll minor release

inst/NEWS.Rd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
\item The \code{NORET} macro is now defined if it was not already defined
1111
by R (Kevin fixing issue \ghit{512}).
1212
}
13+
\item Changes in Rcpp unit tests
14+
\itemize{
15+
\item New unit tests for random number generators the R namespace which
16+
call the standalone Rmath library. (James Balamuta in \ghpr{514}
17+
addressing issue \ghit{28}).
18+
}
1319
}
1420
}
1521

inst/unitTests/cpp/rmath.cpp

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
#include <Rcpp.h>
2323
using namespace Rcpp ;
2424

25+
26+
// ------------------- Normal Distribution
27+
2528
// [[Rcpp::export]]
2629
NumericVector runit_dnorm( double x, double a, double b ){
2730
return NumericVector::create(R::dnorm(x, a, b, 0), R::dnorm(x, a, b, 1));
@@ -39,6 +42,13 @@ NumericVector runit_qnorm( double x, double a, double b ){
3942
R::qnorm(x, a, b, 0, 0), R::qnorm(log(x), a, b, 0, 1));
4043
}
4144

45+
// [[Rcpp::export]]
46+
NumericVector runit_rnorm( double a, double b ){
47+
return NumericVector::create(R::rnorm(a, b), R::rnorm(a, b));
48+
}
49+
50+
// ------------------- Uniform Distribution
51+
4252
// [[Rcpp::export]]
4353
NumericVector runit_dunif( double x, double a, double b ){
4454
return NumericVector::create(R::dunif(x, a, b, 0), R::dunif(x, a, b, 1));
@@ -56,6 +66,14 @@ NumericVector runit_qunif( double x, double a, double b ){
5666
R::qunif(x, a, b, 0, 0), R::qunif(log(x), a, b, 0, 1));
5767
}
5868

69+
// [[Rcpp::export]]
70+
NumericVector runit_runif( double a, double b ){
71+
return NumericVector::create(R::runif(a, b), R::runif(a, b));
72+
}
73+
74+
75+
// ------------------- Gamma Distribution
76+
5977
// [[Rcpp::export]]
6078
NumericVector runit_dgamma( double x, double a, double b ){
6179
return NumericVector::create(R::dgamma(x, a, b, 0), R::dgamma(x, a, b, 1));
@@ -73,6 +91,14 @@ NumericVector runit_qgamma( double x, double a, double b ){
7391
R::qgamma(x, a, b, 0, 0), R::qgamma(log(x), a, b, 0, 1));
7492
}
7593

94+
// [[Rcpp::export]]
95+
NumericVector runit_rgamma( double a, double b ){
96+
return NumericVector::create(R::rgamma(a, b), R::rgamma(a, b));
97+
}
98+
99+
100+
// ------------------- Beta Distribution
101+
76102
// [[Rcpp::export]]
77103
NumericVector runit_dbeta( double x, double a, double b ){
78104
return NumericVector::create(R::dbeta(x, a, b, 0), R::dbeta(x, a, b, 1));
@@ -90,6 +116,14 @@ NumericVector runit_qbeta( double x, double a, double b ){
90116
R::qbeta(x, a, b, 0, 0), R::qbeta(log(x), a, b, 0, 1));
91117
}
92118

119+
// [[Rcpp::export]]
120+
NumericVector runit_rbeta( double a, double b ){
121+
return NumericVector::create(R::rbeta(a, b), R::rbeta(a, b));
122+
}
123+
124+
125+
// ------------------- Log Normal Distribution
126+
93127
// [[Rcpp::export]]
94128
NumericVector runit_dlnorm( double x, double a, double b ){
95129
return NumericVector::create(R::dlnorm(x, a, b, 0), R::dlnorm(x, a, b, 1));
@@ -107,6 +141,13 @@ NumericVector runit_qlnorm( double x, double a, double b ){
107141
R::qlnorm(x, a, b, 0, 0), R::qlnorm(log(x), a, b, 0, 1));
108142
}
109143

144+
// [[Rcpp::export]]
145+
NumericVector runit_rlnorm( double a, double b ){
146+
return NumericVector::create(R::rlnorm(a, b), R::rlnorm(a, b));
147+
}
148+
149+
// ------------------- Chi-Squared Distribution
150+
110151
// [[Rcpp::export]]
111152
NumericVector runit_dchisq( double x, double a ){
112153
return NumericVector::create(R::dchisq(x, a, 0), R::dchisq(x, a, 1));
@@ -124,6 +165,13 @@ NumericVector runit_qchisq( double x, double a ){
124165
R::qchisq(x, a, 0, 0), R::qchisq(log(x), a, 0, 1));
125166
}
126167

168+
// [[Rcpp::export]]
169+
NumericVector runit_rchisq( double a ){
170+
return NumericVector::create(R::rchisq(a), R::rchisq(a));
171+
}
172+
173+
// ------------------- Non-central Chi-Squared Distribution
174+
127175
// [[Rcpp::export]]
128176
NumericVector runit_dnchisq( double x, double a, double b ){
129177
return NumericVector::create(R::dnchisq(x, a, b, 0), R::dnchisq(x, a, b, 1));
@@ -141,6 +189,8 @@ NumericVector runit_qnchisq( double x, double a, double b ){
141189
R::qnchisq(x, a, b, 0, 0), R::qnchisq(log(x), a, b, 0, 1));
142190
}
143191

192+
// ------------------- F Distribution
193+
144194
// [[Rcpp::export]]
145195
NumericVector runit_df( double x, double a, double b ){
146196
return NumericVector::create(R::df(x, a, b, 0), R::df(x, a, b, 1));
@@ -158,6 +208,13 @@ NumericVector runit_qf( double x, double a, double b ){
158208
R::qf(x, a, b, 0, 0), R::qf(log(x), a, b, 0, 1));
159209
}
160210

211+
// [[Rcpp::export]]
212+
NumericVector runit_rf( double a, double b ){
213+
return NumericVector::create(R::rf(a, b), R::rf(a, b));
214+
}
215+
216+
// ------------------- Student t Distribution
217+
161218
// [[Rcpp::export]]
162219
NumericVector runit_dt( double x, double a ){
163220
return NumericVector::create(R::dt(x, a, 0), R::dt(x, a, 1));
@@ -175,6 +232,13 @@ NumericVector runit_qt( double x, double a ){
175232
R::qt(x, a, 0, 0), R::qt(log(x), a, 0, 1));
176233
}
177234

235+
// [[Rcpp::export]]
236+
NumericVector runit_rt( double a ){
237+
return NumericVector::create(R::rt(a), R::rt(a));
238+
}
239+
240+
// ------------------- Binomial Distribution
241+
178242
// [[Rcpp::export]]
179243
NumericVector runit_dbinom( double x, double a, double b ){
180244
return NumericVector::create(R::dbinom(x, a, b, 0), R::dbinom(x, a, b, 1));
@@ -192,6 +256,13 @@ NumericVector runit_qbinom( double x, double a, double b ){
192256
R::qbinom(x, a, b, 0, 0), R::qbinom(log(x), a, b, 0, 1));
193257
}
194258

259+
// [[Rcpp::export]]
260+
NumericVector runit_rbinom( double a, double b ){
261+
return NumericVector::create(R::rbinom(a, b), R::rbinom(a, b));
262+
}
263+
264+
// ------------------- Cauchy Distribution
265+
195266
// [[Rcpp::export]]
196267
NumericVector runit_dcauchy( double x, double a, double b ){
197268
return NumericVector::create(R::dcauchy(x, a, b, 0), R::dcauchy(x, a, b, 1));
@@ -209,6 +280,13 @@ NumericVector runit_qcauchy( double x, double a, double b ){
209280
R::qcauchy(x, a, b, 0, 0), R::qcauchy(log(x), a, b, 0, 1));
210281
}
211282

283+
// [[Rcpp::export]]
284+
NumericVector runit_rcauchy( double a, double b ){
285+
return NumericVector::create(R::rcauchy(a, b), R::rcauchy(a, b));
286+
}
287+
288+
// ------------------- Exponential Distribution
289+
212290
// [[Rcpp::export]]
213291
NumericVector runit_dexp( double x, double a ){
214292
return NumericVector::create(R::dexp(x, a, 0), R::dexp(x, a, 1));
@@ -226,6 +304,13 @@ NumericVector runit_qexp( double x, double a ){
226304
R::qexp(x, a, 0, 0), R::qexp(log(x), a, 0, 1));
227305
}
228306

307+
// [[Rcpp::export]]
308+
NumericVector runit_rexp( double a ){
309+
return NumericVector::create(R::rexp(a), R::rexp(a));
310+
}
311+
312+
// ------------------- Geometric Distribution
313+
229314
// [[Rcpp::export]]
230315
NumericVector runit_dgeom( double x, double a ){
231316
return NumericVector::create(R::dgeom(x, a, 0), R::dgeom(x, a, 1));
@@ -243,6 +328,13 @@ NumericVector runit_qgeom( double x, double a ){
243328
R::qgeom(x, a, 0, 0), R::qgeom(log(x), a, 0, 1));
244329
}
245330

331+
// [[Rcpp::export]]
332+
NumericVector runit_rgeom( double a ){
333+
return NumericVector::create(R::rgeom(a), R::rgeom(a));
334+
}
335+
336+
// ------------------- Hypergeometric Distribution
337+
246338
// [[Rcpp::export]]
247339
NumericVector runit_dhyper( double x, double a, double b, double c ){
248340
return NumericVector::create(R::dhyper(x, a, b, c, 0), R::dhyper(x, a, b, c, 1));
@@ -260,6 +352,13 @@ NumericVector runit_qhyper( double x, double a, double b, double c ){
260352
R::qhyper(x, a, b, c, 0, 0), R::qhyper(log(x), a, b, c, 0, 1));
261353
}
262354

355+
// [[Rcpp::export]]
356+
NumericVector runit_rhyper( double a, double b, double c ){
357+
return NumericVector::create(R::rhyper(a, b, c), R::rhyper(a, b, c));
358+
}
359+
360+
// ------------------- Negative Binomial Distribution
361+
263362
// [[Rcpp::export]]
264363
NumericVector runit_dnbinom( double x, double a, double b ){
265364
return NumericVector::create(R::dnbinom(x, a, b, 0), R::dnbinom(x, a, b, 1));
@@ -277,6 +376,13 @@ NumericVector runit_qnbinom( double x, double a, double b ){
277376
R::qnbinom(x, a, b, 0, 0), R::qnbinom(log(x), a, b, 0, 1));
278377
}
279378

379+
// [[Rcpp::export]]
380+
NumericVector runit_rnbinom( double a, double b){
381+
return NumericVector::create(R::rnbinom(a, b), R::rnbinom(a, b));
382+
}
383+
384+
// ------------------- Poisson Distribution
385+
280386
// [[Rcpp::export]]
281387
NumericVector runit_dpois( double x, double a ){
282388
return NumericVector::create(R::dpois(x, a, 0), R::dpois(x, a, 1));
@@ -294,6 +400,13 @@ NumericVector runit_qpois( double x, double a ){
294400
R::qpois(x, a, 0, 0), R::qpois(log(x), a, 0, 1));
295401
}
296402

403+
// [[Rcpp::export]]
404+
NumericVector runit_rpois( double a ){
405+
return NumericVector::create(R::rpois(a), R::rpois(a));
406+
}
407+
408+
// ------------------- Weibull Distribution
409+
297410
// [[Rcpp::export]]
298411
NumericVector runit_dweibull( double x, double a, double b ){
299412
return NumericVector::create(R::dweibull(x, a, b, 0), R::dweibull(x, a, b, 1));
@@ -311,6 +424,13 @@ NumericVector runit_qweibull( double x, double a, double b ){
311424
R::qweibull(x, a, b, 0, 0), R::qweibull(log(x), a, b, 0, 1));
312425
}
313426

427+
// [[Rcpp::export]]
428+
NumericVector runit_rweibull( double a, double b ){
429+
return NumericVector::create(R::rweibull(a, b), R::rweibull(a, b));
430+
}
431+
432+
// ------------------- Logistic Distribution
433+
314434
// [[Rcpp::export]]
315435
NumericVector runit_dlogis( double x, double a, double b ){
316436
return NumericVector::create(R::dlogis(x, a, b, 0), R::dlogis(x, a, b, 1));
@@ -328,6 +448,13 @@ NumericVector runit_qlogis( double x, double a, double b ){
328448
R::qlogis(x, a, b, 0, 0), R::qlogis(log(x), a, b, 0, 1));
329449
}
330450

451+
// [[Rcpp::export]]
452+
NumericVector runit_rlogis( double a, double b ){
453+
return NumericVector::create(R::rlogis(a, b), R::rlogis(a, b));
454+
}
455+
456+
// ------------------- Non-central Beta Distribution
457+
331458
// [[Rcpp::export]]
332459
NumericVector runit_dnbeta( double x, double a, double b, double c ){
333460
return NumericVector::create(R::dnbeta(x, a, b, c, 0), R::dnbeta(x, a, b, c, 1));
@@ -345,6 +472,8 @@ NumericVector runit_qnbeta( double x, double a, double b, double c ){
345472
R::qnbeta(x, a, b, c, 0, 0), R::qnbeta(log(x), a, b, c, 0, 1));
346473
}
347474

475+
// ------------------- Non-central F Distribution
476+
348477
// [[Rcpp::export]]
349478
NumericVector runit_dnf( double x, double a, double b, double c ){
350479
return NumericVector::create(R::dnf(x, a, b, c, 0), R::dnf(x, a, b, c, 1));
@@ -362,6 +491,8 @@ NumericVector runit_qnf( double x, double a, double b, double c ){
362491
R::qnf(x, a, b, c, 0, 0), R::qnf(log(x), a, b, c, 0, 1));
363492
}
364493

494+
// ------------------- Non-central Student t Distribution
495+
365496
// [[Rcpp::export]]
366497
NumericVector runit_dnt( double x, double a, double b ){
367498
return NumericVector::create(R::dnt(x, a, b, 0), R::dnt(x, a, b, 1));
@@ -379,6 +510,8 @@ NumericVector runit_qnt( double x, double a, double b ){
379510
R::qnt(x, a, b, 0, 0), R::qnt(log(x), a, b, 0, 1));
380511
}
381512

513+
// ------------------- Wilcoxon Rank Sum Statistic Distribution
514+
382515
// [[Rcpp::export]]
383516
NumericVector runit_dwilcox( double x, double a, double b ){
384517
return NumericVector::create(R::dwilcox(x, a, b, 0), R::dwilcox(x, a, b, 1));
@@ -396,3 +529,7 @@ NumericVector runit_qwilcox( double x, double a, double b ){
396529
R::qwilcox(x, a, b, 0, 0), R::qwilcox(log(x), a, b, 0, 1));
397530
}
398531

532+
// [[Rcpp::export]]
533+
NumericVector runit_rwilcox( double a, double b ){
534+
return NumericVector::create(R::rwilcox(a, b), R::rwilcox(a, b));
535+
}

0 commit comments

Comments
 (0)