Skip to content

Commit 70a2f4a

Browse files
committed
fix #610 again, correctly this time maybe
1 parent 7ceca72 commit 70a2f4a

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

VERSIONS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ development head (in the master branch):
3939
fix #602, (float)rdirichlet(integer$ n, numeric alpha) function to Eidos for Dirichlet distribution draws
4040
fix #610, distribution draws behave inconsistently with out-of-range parameters
4141
rlnorm() accepted SD < 0 and returned a value; it should error, as rnorm() does (R returns NAN in the SD < 0 case, but erroring is more consistent with Eidos policies)
42-
rexp() returned zero for a rate of 0, and returned non-zero values for rate < 0; R returns NAN; I decided that these cases should also error, consistent with Eidos policies
42+
rexp() returned values for rate < 0; this should also error, consistent with Eidos policies
4343

4444

4545
version 5.1 (Eidos version 4.1):

eidos/eidos_functions_distributions.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,8 +1230,8 @@ EidosValue_SP Eidos_ExecuteFunction_rexp(const std::vector<EidosValue_SP> &p_arg
12301230
{
12311231
double mu0 = arg_mu->NumericAtIndex_NOCAST(0, nullptr);
12321232

1233-
if (mu0 <= 0.0)
1234-
EIDOS_TERMINATION << "ERROR (Eidos_ExecuteFunction_rexp): function rexp() requires mu > 0.0 (" << EidosStringForFloat(mu0) << " supplied)." << EidosTerminate(nullptr);
1233+
if (mu0 < 0.0)
1234+
EIDOS_TERMINATION << "ERROR (Eidos_ExecuteFunction_rexp): function rexp() requires mu >= 0.0 (" << EidosStringForFloat(mu0) << " supplied)." << EidosTerminate(nullptr);
12351235

12361236
EidosValue_Float *float_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Float())->resize_no_initialize(num_draws);
12371237
result_SP = EidosValue_SP(float_result);
@@ -1262,7 +1262,7 @@ EidosValue_SP Eidos_ExecuteFunction_rexp(const std::vector<EidosValue_SP> &p_arg
12621262
{
12631263
double mu = arg_mu->NumericAtIndex_NOCAST((int)draw_index, nullptr);
12641264

1265-
if (mu <= 0.0)
1265+
if (mu < 0.0)
12661266
{
12671267
saw_error = true;
12681268
continue;
@@ -1273,7 +1273,7 @@ EidosValue_SP Eidos_ExecuteFunction_rexp(const std::vector<EidosValue_SP> &p_arg
12731273
}
12741274

12751275
if (saw_error)
1276-
EIDOS_TERMINATION << "ERROR (Eidos_ExecuteFunction_rexp): function rexp() requires mu > 0.0." << EidosTerminate(nullptr);
1276+
EIDOS_TERMINATION << "ERROR (Eidos_ExecuteFunction_rexp): function rexp() requires mu >= 0.0." << EidosTerminate(nullptr);
12771277
}
12781278

12791279
return result_SP;

eidos/eidos_test_functions_statistics.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -852,10 +852,10 @@ void _RunFunctionDistributionTests(void)
852852
EidosAssertScriptSuccess_LV("setSeed(2); abs(rexp(3, 100000) - c(28842.1, 31355.3, 102831.0)) < 0.1;", {true, true, true});
853853
EidosAssertScriptSuccess_LV("setSeed(3); abs(rexp(3, c(10, 100, 1000)) - c(3.65665, 1.5667, 948.946)) < 0.1;", {true, true, true});
854854
EidosAssertScriptRaise("rexp(-1);", 0, "requires n to be");
855-
EidosAssertScriptRaise("rexp(2, -0.001);", 0, "requires mu > 0.0");
856-
EidosAssertScriptRaise("rexp(2, 0);", 0, "requires mu > 0.0");
857-
EidosAssertScriptRaise("rexp(2, c(1.0, -0.001));", 0, "requires mu > 0.0");
858-
EidosAssertScriptRaise("rexp(2, c(1.0, 0));", 0, "requires mu > 0.0");
855+
EidosAssertScriptSuccess_F("rexp(1, 0);", 0.0);
856+
EidosAssertScriptSuccess_FV("rexp(2, 0);", {0.0, 0.0});
857+
EidosAssertScriptRaise("rexp(2, -0.001);", 0, "requires mu >= 0.0");
858+
EidosAssertScriptRaise("rexp(2, c(1.0, -0.001));", 0, "requires mu >= 0.0");
859859
EidosAssertScriptRaise("rexp(3, c(10, 5));", 0, "requires mu to be");
860860
EidosAssertScriptSuccess("rexp(1, NAN);", gStaticEidosValue_FloatNAN);
861861

0 commit comments

Comments
 (0)