/* -----------------------------------------------------------------------------
 * Test probability functions.
 * -------------------------------------------------------------------------- */

-- bernoulli_cdf
SELECT assert(
    bernoulli_cdf(NULL, 1) IS NULL AND
    bernoulli_cdf(1, NULL) IS NULL,
    'Bernoulli CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(bernoulli_cdf('NaN', 1) ) AND
    isnan(bernoulli_cdf(1, 'NaN') ) ,
    'Bernoulli CDF: Wrong handling of NaNs.'
);

SELECT assert(
    bernoulli_cdf(0,   0.3) = 0.7 AND
    bernoulli_cdf(0.7, 0.3) = 0.7 AND
    bernoulli_cdf(0.8, 0.3) = 0.7 AND
    bernoulli_cdf(1,   0.3) = 1 AND
    bernoulli_cdf(2,   0.3) = 1 AND
    bernoulli_cdf('Inf',   0.3) = 1 AND
    bernoulli_cdf('-Inf',   0.3) = 0 AND
    bernoulli_cdf(-0.1,  0.3) = 0,

    'Bernoulli CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT bernoulli_cdf(0.5, -1)$$) AND
    check_if_raises_error($$SELECT bernoulli_cdf(0.5, 2)$$) ,

    'Bernoulli CDF: succ_prob out of range [0,1] does not raise error.'
);

-- bernoulli_pmf
SELECT assert(
    bernoulli_pmf(NULL, 1) IS NULL AND
    bernoulli_pmf(1, NULL) IS NULL,
    'Bernoulli PMF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(bernoulli_pmf(1, 'NaN') ) ,
    'Bernoulli PMF: Wrong handling of NaNs.'
);

SELECT assert(
    bernoulli_pmf(0,   1) = 0 AND
    bernoulli_pmf(1,   1) = 1 AND
    bernoulli_pmf(0,   0.3) = 0.7 AND
    bernoulli_pmf(1,   0.3) = 0.3 AND
    bernoulli_pmf(2,   0.3) = 0 AND
    bernoulli_pmf(-1,   0.3) = 0 AND
    bernoulli_pmf(-1,  0.3) = 0,

    'Bernoulli PMF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT bernoulli_pmf(5, -1)$$) AND
    check_if_raises_error($$SELECT bernoulli_pmf(5, 2)$$) ,

    'Bernoulli PMF: succ_prob out of range [0,1] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT bernoulli_pmf(0.5, 0.3)$$),

    'Bernoulli PMF: random variable not in {0,1} does not raise error.'
);

-- bernoulli_quantile
SELECT assert(
    bernoulli_quantile(NULL, 1) IS NULL AND
    bernoulli_quantile(1, NULL) IS NULL,
    'Bernoulli Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(bernoulli_quantile('NaN', 1) ) AND
    isnan(bernoulli_quantile(1, 'NaN') ) ,
    'Bernoulli Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    bernoulli_quantile(0,   1) = 0 AND
    bernoulli_quantile(1,   1) = 1 AND
    bernoulli_quantile(0,   0.3) = 0 AND
    bernoulli_quantile(0.7,   0.3) = 0 AND
    bernoulli_quantile(0.8,   0.3) = 1 AND
    bernoulli_quantile(1,   0.3) = 1,

    'Bernoulli Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT bernoulli_quantile(0.5, -1)$$) AND
    check_if_raises_error($$SELECT bernoulli_quantile(0.5, 2)$$) ,

    'Bernoulli Quantile: succ_prob out of range [0,1] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT bernoulli_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT bernoulli_quantile(2, 1)$$) ,

    'Bernoulli Quantile: CDF out of range [0,1] does not raise error.'
);


-- beta_cdf
SELECT assert(
    beta_cdf(NULL, 1, 1) IS NULL AND
    beta_cdf(1, NULL, 1) IS NULL AND
    beta_cdf(1, 1, NULL) IS NULL,
    'Beta CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(beta_cdf('NaN', 1, 1) ) AND
    isnan(beta_cdf(1, 'NaN', 1) ) AND
    isnan(beta_cdf(1, 1, 'NaN') ),
    'Beta CDF: Wrong handling of NaNs.'
);

SELECT assert(
    beta_cdf(-1, 1, 1) = 0 AND
    beta_cdf(0, 1, 1) = 0 AND
    beta_cdf(1, 1, 1) = 1 AND
    beta_cdf('Inf', 1, 1) = 1 AND
    relative_error(beta_cdf(0.5, 1, 1), 0.5) < 1e-5 AND

    beta_cdf(-1, 1, 2) = 0 AND
    beta_cdf(0, 1, 2) = 0 AND
    beta_cdf(1, 1, 2) = 1 AND
    beta_cdf('Inf', 1, 2) = 1 AND
    relative_error(beta_cdf(1, 1, 2), 1) < 1e-5,

    'Beta CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT beta_cdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT beta_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT beta_cdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT beta_cdf(0.5, 1, -1)$$),

    'Beta CDF: parameters less or equal to 0 does not raise error.'
);

-- beta_pdf
SELECT assert(
    beta_pdf(NULL, 1, 1) IS NULL AND
    beta_pdf(1, NULL, 1) IS NULL AND
    beta_pdf(1, 1, NULL) IS NULL,
    'Beta PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(beta_pdf('NaN', 1, 1) ) AND
    isnan(beta_pdf(1, 'NaN', 1) ) AND
    isnan(beta_pdf(1, 1, 'NaN') ),
    'Beta PDF: Wrong handling of NaNs.'
);

SELECT assert(
    beta_pdf(-1, 1, 1) = 0 AND
    beta_pdf(-0.1, 1, 1) = 0 AND
    beta_pdf(1.1, 1, 1) = 0 AND
    beta_pdf('Inf', 1, 1) = 0 AND
    relative_error(beta_pdf(0.5, 1, 1), 1) < 1e-5 AND

    beta_pdf(0, 0.5, 1) = 'Inf' AND
    beta_pdf(1, 0.5, 1) = 0.5 AND
    beta_pdf(0, 1, 0.5) = 0.5 AND
    beta_pdf(1, 1, 0.5) = 'Inf' AND
    beta_pdf(0, 0.5, 0.5) = 'Inf' AND
    beta_pdf(1, 0.5, 0.5) = 'Inf' AND

    beta_pdf(-1, 2, 1) = 0 AND
    beta_pdf(-0.1, 2, 1) = 0 AND
    beta_pdf(1.1, 2, 1) = 0 AND
    beta_pdf('Inf', 2, 1) = 0 AND
    relative_error(beta_pdf(0.5, 2, 1), 1) < 1e-5 ,

    'Beta PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT beta_pdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT beta_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT beta_pdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT beta_pdf(0.5, 1, -1)$$),

    'Beta PDF: parameters less or equal to 0 does not raise error.'
);

-- beta_quantile
SELECT assert(
    beta_quantile(NULL, 1, 1) IS NULL AND
    beta_quantile(1, NULL, 1) IS NULL AND
    beta_quantile(1, 1, NULL) IS NULL,
    'Beta Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(beta_quantile('NaN', 1, 1) ) AND
    isnan(beta_quantile(1, 'NaN', 1) ) AND
    isnan(beta_quantile(1, 1, 'NaN') ),
    'Beta Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    beta_quantile(0, 1, 1) = 0 AND
    beta_quantile(1, 1, 1) = 1 AND
    relative_error(beta_quantile(0.8, 1, 1), 0.8) < 1e-5 AND

    beta_quantile(0, 2, 1) = 0 AND
    beta_quantile(1, 2, 1) = 1 AND
    relative_error(beta_quantile(0.8, 2, 1), 0.8944272) < 1e-5 ,

    'Beta Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT beta_quantile(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT beta_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT beta_quantile(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT beta_quantile(0.5, 1, -1)$$),

    'Beta Quantile: parameters less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT beta_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT beta_quantile(2, 1, 1)$$) ,

    'Beta Quantile: CDF out of range [0,1] does not raise error.'
);


-- binomial_cdf
SELECT assert(
    binomial_cdf(NULL, 1, 1) IS NULL AND
    binomial_cdf(1, NULL, 1) IS NULL AND
    binomial_cdf(1, 1, NULL) IS NULL,
    'Binomial CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(binomial_cdf('NaN', 1, 1) ) AND
    isnan(binomial_cdf(1, 1, 'NaN') ),
    'Binomial CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(binomial_cdf(3, 11, 0.4), 0.2962843) < 1e-5 AND
    binomial_cdf(3, 11, 0.4) = binomial_cdf(3.2, 11, 0.4) AND
    binomial_cdf(11, 11, 0.4) = 1 AND
    binomial_cdf(12, 11, 0.4) = 1 AND
    binomial_cdf('-Inf',11, 0.4) = 0 AND
    binomial_cdf('Inf', 11, 0.4) = 1 AND

    binomial_cdf(0,  0, 0.4) = 1  AND
    binomial_cdf(1,  0, 0.4) = 1  AND
    binomial_cdf(-1,  0, 0.4) = 0  AND
    binomial_cdf('-Inf', 0, 0.4) = 0 AND
    binomial_cdf('Inf',  0, 0.4) = 1,

    'Binomial CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT binomial_cdf(0, 1, 2)$$) AND
    check_if_raises_error($$SELECT binomial_cdf(0, 1, -1)$$),

    'Binomial CDF: succ_prob out of range [0,1] does not raise error.'
);

-- binomial_pmf
SELECT assert(
    binomial_pmf(NULL, 1, 1) IS NULL AND
    binomial_pmf(1, NULL, 1) IS NULL AND
    binomial_pmf(1, 1, NULL) IS NULL,
    'Binomial PMF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(binomial_pmf(1, 1, 'NaN') ),
    'Binomial PMF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(binomial_pmf(3, 11, 0.4), 0.1773674) < 1e-5 AND
    binomial_pmf(12, 11, 0.4) = 0 AND
    binomial_pmf(-1, 11, 0.4) = 0 AND

    binomial_pmf(0,  0, 0.4) = 1  AND
    binomial_pmf(1,  0, 0.4) = 0  AND
    binomial_pmf(-1,  0, 0.4) = 0,

    'Binomial PMF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT binomial_pmf(0, 1, 2)$$) AND
    check_if_raises_error($$SELECT binomial_pmf(0, 1, -1)$$),

    'Binomial PMF: succ_prob out of range [0,1] does not raise error.'
);

-- binomial_quantile
SELECT assert(
    binomial_quantile(NULL, 1, 1) IS NULL AND
    binomial_quantile(1, NULL, 1) IS NULL AND
    binomial_quantile(1, 1, NULL) IS NULL,
    'Binomial quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(binomial_quantile('NaN', 1, 1) ) AND
    isnan(binomial_quantile(1, 1, 'NaN') ),
    'Binomial quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(binomial_quantile(0.2962843, 11, 0.4), 3) < 1e-5 AND
    binomial_quantile(0, 11, 0.4) = 0 AND
    binomial_quantile(1, 11, 0.4) = 11 AND
    binomial_quantile(0.5, 20, 1) = 20 AND
    binomial_quantile(0.5, 20, 0) = 0,

    'Binomial quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT binomial_quantile(-1, 1, 0.4)$$) AND
    check_if_raises_error($$SELECT binomial_quantile(2, 1, 0.4)$$),

    'Binomial quantile: succ_prob out of range [0,1] does not raise error.'
);


-- cauchy_cdf
SELECT assert(
    cauchy_cdf(NULL, 1, 1) IS NULL AND
    cauchy_cdf(1, NULL, 1) IS NULL AND
    cauchy_cdf(1, 1, NULL) IS NULL,
    'Cauchy CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(cauchy_cdf('NaN', 1, 1) ) AND
    isnan(cauchy_cdf(1, 'NaN', 1) ) AND
    isnan(cauchy_cdf(1, 1, 'NaN') ),
    'Cauchy CDF: Wrong handling of NaNs.'
);

SELECT assert(
    cauchy_cdf('-Inf', 1, 2) = 0 AND
    cauchy_cdf('Inf', 1, 2) = 1 AND
    relative_error(cauchy_cdf(2, 1, 2), 0.6475836) < 1e-5 AND
    relative_error(cauchy_cdf(-2, 1, 2), 0.187167) < 1e-5,

    'Cauchy CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT cauchy_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT cauchy_cdf(0.5, 1, -1)$$),

    'Cauchy CDF: scale less than or equal to 0 does not raise error.'
);

-- cauchy_pdf
SELECT assert(
    cauchy_pdf(NULL, 1, 1) IS NULL AND
    cauchy_pdf(1, NULL, 1) IS NULL AND
    cauchy_pdf(1, 1, NULL) IS NULL,
    'Cauchy PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(cauchy_pdf('NaN', 1, 1) ) AND
    isnan(cauchy_pdf(1, 'NaN', 1) ) AND
    isnan(cauchy_pdf(1, 1, 'NaN') ),
    'Cauchy PDF: Wrong handling of NaNs.'
);

SELECT assert(
    cauchy_pdf('-Inf', 1, 2) = 0 AND
    cauchy_pdf('Inf', 1, 2) = 0 AND
    relative_error(cauchy_pdf(2, 1, 2), 0.127324) < 1e-5 AND
    relative_error(cauchy_pdf(-2, 1, 2), 0.04897075) < 1e-5,

    'Cauchy PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT cauchy_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT cauchy_pdf(0.5, 1, -1)$$),

    'Cauchy PDF: scale less than or equal to 0 does not raise error.'
);

-- cauchy_quantile
SELECT assert(
    cauchy_quantile(NULL, 1, 1) IS NULL AND
    cauchy_quantile(1, NULL, 1) IS NULL AND
    cauchy_quantile(1, 1, NULL) IS NULL,
    'Cauchy Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(cauchy_quantile('NaN', 1, 1) ) AND
    isnan(cauchy_quantile(1, 'NaN', 1) ) AND
    isnan(cauchy_quantile(1, 1, 'NaN') ),
    'Cauchy Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    cauchy_quantile(0, 1, 1) = '-Inf' AND
    cauchy_quantile(1, 1, 1) =  'Inf' AND
    relative_error(cauchy_quantile(0.6475836, 1, 2), 2) < 1e-5 AND
    relative_error(cauchy_quantile(0.187167, 1, 2), -2) < 1e-5,

    'Cauchy Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT cauchy_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT cauchy_quantile(0.5, 1, -1)$$),

    'Cauchy Quantile: scale less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT cauchy_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT cauchy_quantile(2, 1, 1)$$),

    'Cauchy Quantile: succ_prob out of range [0,1] does not raise error.'
);


-- chi_squared_cdf
SELECT assert(
    chi_squared_cdf(NULL, 1) IS NULL AND
    chi_squared_cdf(1, NULL) IS NULL,
    'Chi-Squared CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(chi_squared_cdf('NaN', 1) ) AND
    isnan(chi_squared_cdf(1, 'NaN') ),
    'Chi-Squared CDF: Wrong handling of NaNs.'
);

SELECT assert(
    chi_squared_cdf(-1, 1) = 0 AND
    chi_squared_cdf(0, 1) = 0 AND
    chi_squared_cdf('Inf', 1) = 1 AND
    relative_error(chi_squared_cdf(1, 1), 0.6826895) < 1e-5,
    'Chi-Squared CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_cdf(1.5, 0)$$),
    'Chi-Squared CDF: degree of freedom equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_cdf(1.5, -1)$$),
    'Chi-Squared CDF: degree of freedom less than 0 does not raise error.'
);

-- chi_squared_pdf
SELECT assert(
    chi_squared_pdf(NULL, 1) IS NULL AND
    chi_squared_pdf(1, NULL) IS NULL,
    'Chi-Squared PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(chi_squared_pdf('NaN', 1) ) AND
    isnan(chi_squared_pdf(1, 'NaN') ),
    'Chi-Squared PDF: Wrong handling of NaNs.'
);

SELECT assert(
    chi_squared_pdf(-1, 1) = 0 AND
    chi_squared_pdf(0, 1) = 'Inf' AND
    chi_squared_pdf(0, 2) = 0.5 AND
    chi_squared_pdf(0, 3) = 0 AND
    chi_squared_pdf('Inf', 1) = 0 AND
    relative_error(chi_squared_pdf(1, 1), 0.2419707) < 1e-5,
    'Chi-Squared PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_pdf(1.5, 0)$$),
    'Chi-Squared PDF: freedom equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_pdf(1.5, -1)$$),
    'Chi-Squared PDF: degree of freedom less than 0 does not raise error.'
);

-- chi_squared_quantile
SELECT assert(
    chi_squared_quantile(NULL, 1) IS NULL AND
    chi_squared_quantile(1, NULL) IS NULL,
    'Chi-Squared Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(chi_squared_quantile('NaN', 1) ) AND
    isnan(chi_squared_quantile(1, 'NaN') ),
    'Chi-Squared Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    chi_squared_quantile(0, 1) = 0 AND
    chi_squared_quantile(0, 2) = 0 AND
    chi_squared_quantile(0, 3) = 0 AND
    chi_squared_quantile(1, 1) = 'Inf' AND
    relative_error(chi_squared_quantile(0.5, 1), 0.4549364) < 1e-5,
    'Chi-Squared Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_quantile(-1, 2)$$),
    'Chi-Squared Quantile: non-positive CDF does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_quantile(1.5, 0)$$),
    'Chi-Squared Quantile: freedom equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT chi_squared_quantile(1.5, -1)$$),
    'Chi-Squared Quantile freedom less than 0 does not raise error.'
);


-- exponential_cdf
SELECT assert(
    exponential_cdf(NULL, 1) IS NULL AND
    exponential_cdf(1, NULL) IS NULL,
    'Exponential CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( exponential_cdf('NaN', 1) ) AND
    isnan( exponential_cdf(1, 'NaN') ),
    'Exponential CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(exponential_cdf(1, 1) , 0.6321206) < 1e-5 AND
    exponential_cdf(-1, 1) = 0 AND
    exponential_cdf(0, 1) = 0 AND
    exponential_cdf('Inf', 1) = 1,

    'Exponential CDF: Wrong values for regular values.'
);

SELECT assert(
    check_if_raises_error($$SELECT exponential_cdf(1, 0)$$) AND
    check_if_raises_error($$SELECT exponential_cdf(1, -1)$$) AND
    check_if_raises_error($$SELECT exponential_cdf(0.5, 'Inf')$$),

    'Exponential CDF: lambda ouside of (0, infinity) does not raise error.'
);

-- exponential_pdf
SELECT assert(
    exponential_pdf(NULL, 1) IS NULL AND
    exponential_pdf(1, NULL) IS NULL,
    'Exponential PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( exponential_pdf('NaN', 1) ) AND
    isnan( exponential_pdf(1, 'NaN') ),
    'Exponential PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(exponential_pdf(1, 1), 0.3678794) < 1e-5 AND
    exponential_pdf(-1, 1) = 0 AND
    exponential_pdf(0, 1) = 1 AND
    exponential_pdf('Inf', 1) = 0,

    'Exponential PDF: Wrong values for regular values.'
);

SELECT assert(
    check_if_raises_error($$SELECT exponential_pdf(1, 0)$$) AND
    check_if_raises_error($$SELECT exponential_pdf(1, -1)$$) AND
    check_if_raises_error($$SELECT exponential_pdf(0.5, 'Inf')$$),

    'Exponential PDF: lambda ouside of (0, infinity) does not raise error.'
);

-- exponential_quantile
SELECT assert(
    exponential_quantile(NULL, 1) IS NULL AND
    exponential_quantile(1, NULL) IS NULL,
    'Exponential quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( exponential_quantile('NaN', 1) ) AND
    isnan( exponential_quantile(1, 'NaN') ),
    'Exponential quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(exponential_quantile(0.6321206, 1) , 1) < 1e-5 AND
    exponential_quantile(0, 1) = 0 AND
    exponential_quantile(1, 1) = 'Inf',

    'Exponential quantile: Wrong values for regular values.'
);

SELECT assert(
    check_if_raises_error($$SELECT exponential_quantile(1, 0)$$) AND
    check_if_raises_error($$SELECT exponential_quantile(1, -1)$$) AND
    check_if_raises_error($$SELECT exponential_quantile(0.5, 'Inf')$$),

    'Exponential quantile: lambda outside of (0, infinity) does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT exponential_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT exponential_quantile(2, 1)$$),

    'Exponential quantile: succ_prob out of range [0,1] does not raise error.'
);


-- extreme_value_cdf
SELECT assert(
    extreme_value_cdf(NULL, 1, 1) IS NULL AND
    extreme_value_cdf(1, NULL, 1) IS NULL AND
    extreme_value_cdf(1, 1, NULL) IS NULL,
    'Extreme Value CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(extreme_value_cdf('NaN', 1, 1) ) AND
    isnan(extreme_value_cdf(1, 'NaN', 1) ) AND
    isnan(extreme_value_cdf(1, 1, 'NaN') ),
    'Extreme Value CDF: Wrong handling of NaNs.'
);

SELECT assert(
    extreme_value_cdf('-Inf', 1, 2) = 0 AND
    extreme_value_cdf('Inf', 1, 2) = 1 AND
    relative_error(extreme_value_cdf(3, 1, 2), 0.6922006) < 1e-5 AND
    relative_error(extreme_value_cdf(2, 1, 2), 0.5452392) < 1e-5 AND
    relative_error(extreme_value_cdf(0, 1, 2), 0.1922956) < 1e-5 AND
    relative_error(extreme_value_cdf(-1, 1, 2), 0.06598804) < 1e-5,

    'Extreme Value CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT extreme_value_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT extreme_value_cdf(0.5, 1, -1)$$) AND
    check_if_raises_error($$SELECT extreme_value_cdf(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_cdf(0.5, '-Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_cdf(0.5, 0, 'Inf')$$),

    'Extreme Value CDF: scale outside of (0, infinity) does not raise error.'
);

-- extreme_value_pdf
SELECT assert(
    extreme_value_pdf(NULL, 1, 1) IS NULL AND
    extreme_value_pdf(1, NULL, 1) IS NULL AND
    extreme_value_pdf(1, 1, NULL) IS NULL,
    'Extreme Value PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(extreme_value_pdf('NaN', 1, 1) ) AND
    isnan(extreme_value_pdf(1, 'NaN', 1) ) AND
    isnan(extreme_value_pdf(1, 1, 'NaN') ),
    'Extreme Value PDF: Wrong handling of NaNs.'
);

SELECT assert(
    extreme_value_pdf('-Inf', 1, 1) = 0 AND
    extreme_value_pdf('Inf', 1, 1) = 0 AND
    relative_error(extreme_value_pdf(3, 1, 2), 0.1273232) < 1e-5 AND
    relative_error(extreme_value_pdf(2, 1, 2), 0.1653521) < 1e-5 AND
    relative_error(extreme_value_pdf(0, 1, 2), 0.158521) < 1e-5 AND
    relative_error(extreme_value_pdf(-1, 1, 2), 0.08968704) < 1e-5,

    'Extreme Value PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT extreme_value_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT extreme_value_pdf(0.5, 1, -1)$$) AND
    check_if_raises_error($$SELECT extreme_value_pdf(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_pdf(0.5, '-Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_pdf(0.5, 0, 'Inf')$$),

    'Extreme Value PDF: scale outside of (0, infinity) does not raise error.'
);

-- extreme_value_quantile
SELECT assert(
    extreme_value_quantile(NULL, 1, 1) IS NULL AND
    extreme_value_quantile(1, NULL, 1) IS NULL AND
    extreme_value_quantile(1, 1, NULL) IS NULL,
    'Extreme Value Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(extreme_value_quantile('NaN', 1, 1) ) AND
    isnan(extreme_value_quantile(1, 'NaN', 1) ) AND
    isnan(extreme_value_quantile(1, 1, 'NaN') ),
    'Extreme Value Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    extreme_value_quantile(0, 1, 1) = '-Inf' AND
    extreme_value_quantile(1, 1, 1) =  'Inf' AND
    relative_error(extreme_value_quantile(0.6922006, 1, 2), 3) < 1e-5 AND
    relative_error(extreme_value_quantile(0.5452392, 1, 2), 2) < 1e-5 AND
    abs(extreme_value_quantile(0.1922956, 1, 2)) < 1e-5 AND
    relative_error(extreme_value_quantile(0.06598804, 1, 2), -1) < 1e-5,

    'Extreme Value Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT extreme_value_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT extreme_value_quantile(0.5, 1, -1)$$) AND
    check_if_raises_error($$SELECT extreme_value_quantile(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_quantile(0.5, '-Inf', 1)$$) AND
    check_if_raises_error($$SELECT extreme_value_quantile(0.5, 0, 'Inf')$$),

    'Extreme Value Quantile: scale outside of (0, infinity) does not raise error.'
);


-- fisher_f_cdf
SELECT assert(
    fisher_f_cdf(NULL, 1, 1) IS NULL AND
    fisher_f_cdf(1, NULL, 1) IS NULL AND
    fisher_f_cdf(1, 1, NULL) IS NULL,
    'Fisher F CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(fisher_f_cdf('NaN', 1, 1) ) AND
    isnan(fisher_f_cdf(1, 'NaN', 1) ) AND
    isnan(fisher_f_cdf(1, 1, 'NaN') ),
    'Fisher F CDF: Wrong handling of NaNs.'
);

SELECT assert(
    fisher_f_cdf(-1, 1, 1) = 0 AND
    fisher_f_cdf(0, 1, 1) = 0 AND
    fisher_f_cdf('Inf', 1, 1) = 1 AND
    relative_error(fisher_f_cdf(1, 1, 1), 0.5) < 1e-5 AND

    fisher_f_cdf(-1, 1, 2) = 0 AND
    fisher_f_cdf(0, 1, 2) = 0 AND
    fisher_f_cdf('Inf', 1, 2) = 1 AND
    relative_error(fisher_f_cdf(1, 1, 2), 0.5773503) < 1e-5,

    'Fisher F CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT fisher_f_cdf(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_cdf(1.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT fisher_f_cdf(1.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_cdf(1.5, 1, -1)$$),

    'Fisher F CDF: parameters less or equal to 0 does not raise error.'
);

-- fisher_f_pdf
SELECT assert(
    fisher_f_pdf(NULL, 1, 1) IS NULL AND
    fisher_f_pdf(1, NULL, 1) IS NULL AND
    fisher_f_pdf(1, 1, NULL) IS NULL,
    'Fisher F PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(fisher_f_pdf('NaN', 1, 1) ) AND
    isnan(fisher_f_pdf(1, 'NaN', 1) ) AND
    isnan(fisher_f_pdf(1, 1, 'NaN') ),
    'Fisher F PDF: Wrong handling of NaNs.'
);

SELECT assert(
    fisher_f_pdf(-1, 1, 1) = 0 AND
    fisher_f_pdf(0, 1, 1) = 'Inf' AND
    fisher_f_pdf('Inf', 1, 1) = 0 AND
    relative_error(fisher_f_pdf(1, 1, 1), 0.1591549) < 1e-5 AND

    fisher_f_pdf(-1, 2, 1) = 0 AND
    fisher_f_pdf(0, 2, 1) = 1 AND
    fisher_f_pdf('Inf', 2, 1) = 0 AND
    relative_error(fisher_f_pdf(1, 2, 1), 0.1924501) < 1e-5 AND

    fisher_f_pdf(-1, 3, 1) = 0 AND
    fisher_f_pdf(0, 3, 1) = 0 AND
    fisher_f_pdf('Inf', 3, 1) = 0 AND
    relative_error(fisher_f_pdf(1, 3, 1), 0.2067483) < 1e-5,

    'Fisher F PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT fisher_f_pdf(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_pdf(1.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT fisher_f_pdf(1.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_pdf(1.5, 1, -1)$$),

    'Fisher F PDF: parameters less or equal to 0 does not raise error.'
);

-- fisher_f_quantile
SELECT assert(
    fisher_f_quantile(NULL, 1, 1) IS NULL AND
    fisher_f_quantile(1, NULL, 1) IS NULL AND
    fisher_f_quantile(1, 1, NULL) IS NULL,
    'Fisher F Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(fisher_f_quantile('NaN', 1, 1) ) AND
    isnan(fisher_f_quantile(1, 'NaN', 1) ) AND
    isnan(fisher_f_quantile(1, 1, 'NaN') ) AND
    isnan(fisher_f_quantile(.5, 1, 'NaN') ),
    'Fisher F Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    fisher_f_quantile(0, 1, 1) = 0 AND
    fisher_f_quantile(1, 1, 1) = 'Inf' AND
    relative_error(fisher_f_quantile(0.8, 1, 1), 9.472136) < 1e-5 AND

    fisher_f_quantile(0, 2, 1) = 0 AND
    fisher_f_quantile(1, 2, 1) = 'Inf' AND
    relative_error(fisher_f_quantile(0.8, 2, 1), 12) < 1e-5 AND

    fisher_f_quantile(0, 3, 1) = 0 AND
    fisher_f_quantile(1, 3, 1) = 'inf' AND
    relative_error(fisher_f_quantile(0.8, 3, 1), 13.06393) < 1e-5,

    'Fisher F Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT fisher_f_quantile(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_quantile(1.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT fisher_f_quantile(1.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_quantile(1.5, 1, -1)$$),

    'Fisher F Quantile: parameters less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT fisher_f_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT fisher_f_quantile(2, 1, 1)$$) ,

    'Fisher F Quantile: CDF out of range [0,1] does not raise error.'
);


-- gamma_cdf
SELECT assert(
    gamma_cdf(NULL, 1, 1) IS NULL AND
    gamma_cdf(1, NULL, 1) IS NULL AND
    gamma_cdf(1, 1, NULL) IS NULL,
    'Gamma CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(gamma_cdf('NaN', 1, 1) ) AND
    isnan(gamma_cdf(1, 'NaN', 1) ) AND
    isnan(gamma_cdf(1, 1, 'NaN') ),
    'Gamma CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(gamma_cdf(0.5, 0.5, 2), 0.5204999) < 1e-5 AND
    gamma_cdf(0, 0.5, 2) = 0 AND
    gamma_cdf(-1, 0.5, 2) = 0 AND

    relative_error(gamma_cdf(0.5, 1, 2), 0.2211992) < 1e-5 AND
    gamma_cdf(0, 1, 2) = 0 AND
    gamma_cdf(-1, 1, 2) = 0,

    'Gamma CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT gamma_cdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT gamma_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT gamma_cdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT gamma_cdf(0.5, 1, -1)$$) ,

    'Gamma CDF: scale or shape less than or equal to 0 does not raise error.'
);


-- gamma_pdf
SELECT assert(
    gamma_pdf(NULL, 1, 1) IS NULL AND
    gamma_pdf(1, NULL, 1) IS NULL AND
    gamma_pdf(1, 1, NULL) IS NULL,
    'Gamma PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(gamma_pdf('NaN', 1, 1) ) AND
    isnan(gamma_pdf(1, 'NaN', 1) ) AND
    isnan(gamma_pdf(1, 1, 'NaN') ),
    'Gamma PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(gamma_pdf(0.5, 0.5, 2), 0.4393913) < 1e-5 AND
    gamma_pdf(0, 0.5, 2) = 'Inf' AND
    gamma_pdf(-1, 0.5, 2) = 0 AND

    relative_error(gamma_pdf(0.5, 1, 2), 0.3894004) < 1e-5 AND
    gamma_pdf(0, 1, 2) = 0.5 AND
    gamma_pdf(-1, 1, 2) = 0 ,

    'Gamma PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT gamma_pdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT gamma_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT gamma_pdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT gamma_pdf(0.5, 1, -1)$$) ,

    'Gamma PDF: scale or shape less than or equal to 0 does not raise error.'
);


-- gamma_quantile
SELECT assert(
    gamma_quantile(NULL, 1, 1) IS NULL AND
    gamma_quantile(1, NULL, 1) IS NULL AND
    gamma_quantile(1, 1, NULL) IS NULL,
    'Gamma Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(gamma_quantile('NaN', 1, 1) ) AND
    isnan(gamma_quantile(1, 'NaN', 1) ) AND
    isnan(gamma_quantile(1, 1, 'NaN') ),
    'Gamma Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(gamma_quantile(0.5, 1, 2), 1.386294) < 1e-5 AND
    gamma_quantile(0, 1, 2) = 0 AND
    gamma_quantile(1, 1, 2) = 'Inf' ,

    'Gamma Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT gamma_quantile(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT gamma_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT gamma_quantile(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT gamma_quantile(0.5, 1, -1)$$) ,

    'Gamma Quantile: scale or shape less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT gamma_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT gamma_quantile(2, 1, 1)$$) ,

    'Gamma Quantile: CDF out of range [0,1] does not raise error.'
);


-- geometric_cdf
SELECT assert(
    geometric_cdf(NULL, 1) IS NULL AND
    geometric_cdf(1, NULL) IS NULL,
    'Geometric CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(geometric_cdf('NaN', 1) ) AND
    isnan(geometric_cdf(1, 'NaN') ) ,
    'Geometric CDF: Wrong handling of NaNs.'
);

SELECT assert(
    geometric_cdf(0,   0.3) = 0.3 AND
    geometric_cdf(0.7, 0.3) = 0.3 AND
    relative_error(geometric_cdf(1,   0.3), 0.51) < 1e-5 AND
    relative_error(geometric_cdf(2,   0.3), 0.657) < 1e-5 AND
    geometric_cdf('Inf',   0.3) = 1 AND
    geometric_cdf('-Inf',   0.3) = 0 AND
    geometric_cdf(-0.1,  0.3) = 0,

    'Geometric CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT geometric_cdf(5, -1)$$) AND
    check_if_raises_error($$SELECT geometric_cdf(5, 2)$$) ,

    'Geometric CDF: succ_prob out of range [0,1] does not raise error.'
);

-- geometric_pmf
SELECT assert(
    geometric_pmf(NULL, 1) IS NULL AND
    geometric_pmf(1, NULL) IS NULL,
    'Geometric PMF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(geometric_pmf(1, 'NaN') ) ,
    'Geometric PMF: Wrong handling of NaNs.'
);

SELECT assert(
    geometric_pmf(0,   0.3) = 0.3 AND
    relative_error(geometric_pmf(1,   0.3), 0.21) < 1e-5 AND
    relative_error(geometric_pmf(2,   0.3), 0.147) < 1e-5 AND
    geometric_pmf(-1,   0.3) = 0 ,

    'Geometric PMF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT geometric_pmf(5, -1)$$) AND
    check_if_raises_error($$SELECT geometric_pmf(5, 2)$$) ,

    'Geometric PMF: succ_prob out of range [0,1] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT geometric_pmf(0.5, 0.3)$$),

    'Geometric PMF: random variable not in {.., -1, 0, 1, 2, ...} does not raise error.'
);

-- geometric_quantile
SELECT assert(
    geometric_quantile(NULL, 1) IS NULL AND
    geometric_quantile(1, NULL) IS NULL,
    'Geometric Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(geometric_quantile('NaN', 1) ) AND
    isnan(geometric_quantile(1, 'NaN') ) ,
    'Geometric Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    geometric_quantile(0.3,   0.3) = 0 AND
    relative_error(geometric_quantile(0.51,   0.3), 1) < 1e-5 AND
    relative_error(geometric_quantile(0.657,   0.3), 2) < 1e-5 AND
    geometric_quantile(0,   0.3) = 0 AND
    geometric_quantile(1,   0.3) = 'Inf',

    'Geometric Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT geometric_quantile(0.5, -1)$$) AND
    check_if_raises_error($$SELECT geometric_quantile(0.5, 2)$$) ,

    'Geometric Quantile: succ_prob out of range [0,1] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT geometric_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT geometric_quantile(2, 1)$$) ,

    'Geometric Quantile: CDF out of range [0,1] does not raise error.'
);


-- hypergeometric cdf
SELECT assert(
    hypergeometric_cdf(NULL, 50, 30, 500) IS NULL AND
    hypergeometric_cdf(1, NULL, 30, 500) IS NULL AND
    hypergeometric_cdf(1, 50, NULL, 500) IS NULL AND
    hypergeometric_cdf(1, 50, 30, NULL) IS NULL,
    'Hypergeomitric CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(hypergeometric_cdf('NaN', 50, 30, 500)) ,
    'Hypergeomitric CDF: Wrong handling of NaNs.'
);

SELECT assert(
    hypergeometric_cdf(-1 ,50, 30, 500) = 0 AND
    relative_error(hypergeometric_cdf(0 ,50, 30, 500), 0.03832346) < 1e-5 AND
    hypergeometric_cdf(0.7 ,50, 30, 500) = hypergeometric_cdf(0 ,50, 30, 500) AND
    relative_error(hypergeometric_cdf(10 ,50, 30, 500), 0.9999567) < 1e-5 AND
    hypergeometric_cdf(30 ,50, 30, 500) = 1 AND
    hypergeometric_cdf('-Inf' ,50, 30, 500) = 0 AND
    hypergeometric_cdf('Inf' ,50, 30, 500) = 1,

    'Hypergeomitric CDF: Wrong handling of regular values.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_cdf(0, 30, 50, -1)$$) AND
    check_if_raises_error($$select hypergeometric_cdf(0, 30, 50, 0)$$),
    'Hypergeometric CDF: total less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_cdf(0, -1, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_cdf(0, 0, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_cdf(0, 500, 50, 500)$$) AND
    check_if_raises_error($$select hypergeometric_cdf(0, 501, 50, 500)$$),
    'Hypergeometric CDF: defective out of range [0,total] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_cdf(0, 30, -1, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_cdf(0, 30, 0, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_cdf(0, 30, 500, 500)$$) AND
    check_if_raises_error($$select hypergeometric_cdf(0, 30, 501, 500)$$),
    'Hypergeometric CDF: sample_count out of range [0,total] does not raise error.'
);

-- hypergeometric PMF
SELECT assert(
    hypergeometric_pmf(NULL, 50, 30, 500) IS NULL AND
    hypergeometric_pmf(1, NULL, 30, 500) IS NULL AND
    hypergeometric_pmf(1, 50, NULL, 500) IS NULL AND
    hypergeometric_pmf(1, 50, 30, NULL) IS NULL,
    'Hypergeomitric PDF: Wrong handling of NULLs.'
);

SELECT assert(
    hypergeometric_pmf(-1 ,50, 30, 500) = 0 AND
    relative_error(hypergeometric_pmf(0 ,50, 30, 500), 0.03832346) < 1e-5 AND
    relative_error(hypergeometric_pmf(10,50, 30, 500), 0.0002206837) < 1e-5 AND
    hypergeometric_pmf(31,50, 30, 500) = 0,

    'Hypergeomitric PDF: Wrong handling of regular values.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_pmf(0, 30, 50, -1)$$) AND
    check_if_raises_error($$select hypergeometric_pmf(0, 30, 50, 0)$$),
    'Hypergeometric PMF: total less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_pmf(0, -1, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_pmf(0, 0, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_pmf(0, 500, 50, 500)$$) AND
    check_if_raises_error($$select hypergeometric_pmf(0, 501, 50, 500)$$),
    'Hypergeometric PMF: defective out of range [0,total] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_pmf(0, 30, -1, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_pmf(0, 30, 0, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_pmf(0, 30, 500, 500)$$) AND
    check_if_raises_error($$select hypergeometric_pmf(0, 30, 501, 500)$$),
    'Hypergeometric PMF: sample_count out of range [0,total] does not raise error.'
);

-- hypergeometric quantile
SELECT assert(
    hypergeometric_quantile(NULL, 50, 30, 500) IS NULL AND
    hypergeometric_quantile(1, NULL, 30, 500) IS NULL AND
    hypergeometric_quantile(1, 50, NULL, 500) IS NULL AND
    hypergeometric_quantile(1, 50, 30, NULL) IS NULL,
    'Hypergeomitric Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(hypergeometric_quantile('NaN', 50, 30, 500)),
    'Hypergeomitric Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    hypergeometric_quantile(0, 50, 30, 500) = 0 AND
    abs(hypergeometric_quantile(0.03832346, 50, 30, 500)) < 1e-5 AND
    relative_error(hypergeometric_quantile(0.9999567, 50, 30, 500), 10) < 1e-5 AND
    hypergeometric_quantile(1 ,50, 30, 500) = 30 ,

    'Hypergeomitric Quantile: Wrong handling of regular values.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_quantile(0, 30, 50, -1)$$) AND
    check_if_raises_error($$select hypergeometric_quantile(0, 30, 50, 0)$$),
    'Hypergeometric Quantile: total less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_quantile(0, -1, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_quantile(0, 0, 50, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_quantile(0, 500, 50, 500)$$) AND
    check_if_raises_error($$select hypergeometric_quantile(0, 501, 50, 500)$$),
    'Hypergeometric Quantile: defective out of range [0,total] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_quantile(0, 30, -1, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_quantile(0, 30, 0, 500)$$) AND
    NOT check_if_raises_error($$select hypergeometric_quantile(0, 30, 500, 500)$$) AND
    check_if_raises_error($$select hypergeometric_quantile(0, 30, 501, 500)$$),
    'Hypergeometric Quantile: sample_count out of range [0,total] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$select hypergeometric_quantile(-1, 30, 50, 500)$$)  AND
    check_if_raises_error($$select hypergeometric_quantile(1.1, 30, 50, 500)$$),
    'Hypergeometric Quantile: CDF out of range [0,1] does not raise error.'
);


-- inverse_gamma_cdf
SELECT assert(
    inverse_gamma_cdf(NULL, 1, 1) IS NULL AND
    inverse_gamma_cdf(1, NULL, 1) IS NULL AND
    inverse_gamma_cdf(1, 1, NULL) IS NULL,
    'Inverse Gamma CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(inverse_gamma_cdf('NaN', 1, 1) ) AND
    isnan(inverse_gamma_cdf(1, 'NaN', 1) ) AND
    isnan(inverse_gamma_cdf(1, 1, 'NaN') ),
    'Inverse Gamma CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(inverse_gamma_cdf(0.5, 1, 2), 0.01831564) < 1e-5 AND
    inverse_gamma_cdf('Inf', 1, 2) = 1 AND
    inverse_gamma_cdf('-Inf', 1, 2) = 0 AND
    inverse_gamma_cdf(-1, 1, 2) = 0,

    'Inverse Gamma CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT inverse_gamma_cdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_cdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_cdf(0.5, 1, -1)$$) ,

    'Inverse Gamma CDF: scale or shape less than or equal to 0 does not raise error.'
);

-- inverse_gamma_pdf
SELECT assert(
    inverse_gamma_pdf(NULL, 1, 1) IS NULL AND
    inverse_gamma_pdf(1, NULL, 1) IS NULL AND
    inverse_gamma_pdf(1, 1, NULL) IS NULL,
    'Inverse Gamma PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(inverse_gamma_pdf('NaN', 1, 1) ) AND
    isnan(inverse_gamma_pdf(1, 'NaN', 1) ) AND
    isnan(inverse_gamma_pdf(1, 1, 'NaN') ),
    'Inverse Gamma PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(inverse_gamma_pdf(0.5, 1, 2), 0.1465251) < 1e-5 AND
    inverse_gamma_pdf('Inf', 1, 2) = 0 AND
    inverse_gamma_pdf('-Inf', 1, 2) = 0 AND
    inverse_gamma_pdf(-1, 1, 2) = 0,

    'Inverse Gamma PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT inverse_gamma_pdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_pdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_pdf(0.5, 1, -1)$$) ,

    'Inverse Gamma PDF: scale or shape less than or equal to 0 does not raise error.'
);

-- inverse_gamma_quantile
SELECT assert(
    inverse_gamma_quantile(NULL, 1, 1) IS NULL AND
    inverse_gamma_quantile(1, NULL, 1) IS NULL AND
    inverse_gamma_quantile(1, 1, NULL) IS NULL,
    'Inverse Gamma Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(inverse_gamma_quantile('NaN', 1, 1) ) AND
    isnan(inverse_gamma_quantile(1, 'NaN', 1) ) AND
    isnan(inverse_gamma_quantile(1, 1, 'NaN') ),
    'Inverse Gamma Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    inverse_gamma_quantile(0, 1, 2) = 0 AND
    relative_error(inverse_gamma_quantile(0.01831564, 1, 2), 0.5) < 1e-5 AND
    inverse_gamma_quantile(1, 1, 2) = 'Inf',

    'Inverse Gamma Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT inverse_gamma_quantile(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_quantile(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_quantile(0.5, 1, -1)$$) ,

    'Inverse Gamma Quantile: scale or shape less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT inverse_gamma_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT inverse_gamma_quantile(2, 1, 1)$$) ,

    'Inverse Gamma Quantile: CDF out of range [0,1] does not raise error.'
);


-- laplace_cdf
SELECT assert(
    laplace_cdf(NULL, 1, 1) IS NULL AND
    laplace_cdf(1, NULL, 1) IS NULL AND
    laplace_cdf(1, 1, NULL) IS NULL,
    'Laplace CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(laplace_cdf('NaN', 1, 1) ) AND
    isnan(laplace_cdf(1, 'NaN', 1) ) AND
    isnan(laplace_cdf(1, 1, 'NaN') ),
    'Laplace CDF: Wrong handling of NaNs.'
);

SELECT assert(
    laplace_cdf('-Inf', 1, 1) = 0 AND
    laplace_cdf('Inf', 1, 1) = 1 AND
    relative_error(laplace_cdf(2, 1, 1), 0.8160603) < 1e-5 AND
    relative_error(laplace_cdf(-2, 1, 1), 0.02489353) < 1e-5,

    'Laplace CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT laplace_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT laplace_cdf(0.5, 1, -1)$$),

    'Laplace CDF: scale less than or equal to 0 does not raise error.'
);

-- laplace_pdf
SELECT assert(
    laplace_pdf(NULL, 1, 1) IS NULL AND
    laplace_pdf(1, NULL, 1) IS NULL AND
    laplace_pdf(1, 1, NULL) IS NULL,
    'Laplace PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(laplace_pdf('NaN', 1, 1) ) AND
    isnan(laplace_pdf(1, 'NaN', 1) ) AND
    isnan(laplace_pdf(1, 1, 'NaN') ),
    'Laplace PDF: Wrong handling of NaNs.'
);

SELECT assert(
    laplace_pdf('-Inf', 1, 1) = 0 AND
    laplace_pdf('Inf', 1, 1) = 0 AND
    relative_error(laplace_pdf(2, 1, 1), 0.1839397) < 1e-5 AND
    relative_error(laplace_pdf(-2, 1, 1), 0.02489353) < 1e-5,

    'Laplace PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT laplace_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT laplace_pdf(0.5, 1, -1)$$),

    'Laplace PDF: scale less than or equal to 0 does not raise error.'
);

-- laplace_quantile
SELECT assert(
    laplace_quantile(NULL, 1, 1) IS NULL AND
    laplace_quantile(1, NULL, 1) IS NULL AND
    laplace_quantile(1, 1, NULL) IS NULL,
    'Laplace Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(laplace_quantile('NaN', 1, 1) ) AND
    isnan(laplace_quantile(1, 'NaN', 1) ) AND
    isnan(laplace_quantile(1, 1, 'NaN') ),
    'Laplace Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    laplace_quantile(0, 1, 1) = '-Inf' AND
    laplace_quantile(1, 1, 1) =  'Inf' AND
    relative_error(laplace_quantile(0.8160603, 1, 1), 2) < 1e-5 AND
    relative_error(laplace_quantile(0.02489353, 1, 1), -2) < 1e-5,

    'Laplace Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT laplace_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT laplace_quantile(0.5, 1, -1)$$),

    'Laplace Quantile: scale less than or equal to 0 does not raise error.'
);


-- logistic_cdf
SELECT assert(
    logistic_cdf(NULL, 1, 1) IS NULL AND
    logistic_cdf(1, NULL, 1) IS NULL AND
    logistic_cdf(1, 1, NULL) IS NULL,
    'Logistic CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(logistic_cdf('NaN', 1, 1) ) AND
    isnan(logistic_cdf(1, 'NaN', 1) ) AND
    isnan(logistic_cdf(1, 1, 'NaN') ),
    'Logistic CDF: Wrong handling of NaNs.'
);

SELECT assert(
    logistic_cdf('-Inf', 1, 2) = 0 AND
    logistic_cdf('Inf', 1, 2) = 1 AND
    relative_error(logistic_cdf(3, 1, 2), 0.7310586) < 1e-5 AND
    relative_error(logistic_cdf(2, 1, 2), 0.6224593) < 1e-5 AND
    relative_error(logistic_cdf(0, 1, 2), 0.3775407) < 1e-5 AND
    relative_error(logistic_cdf(-1, 1, 2), 0.2689414) < 1e-5,

    'Logistic CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT logistic_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT logistic_cdf(0.5, 1, -1)$$),

    'Logistic CDF: scale less than or equal to 0 does not raise error.'
);

-- logistic_pdf
SELECT assert(
    logistic_pdf(NULL, 1, 1) IS NULL AND
    logistic_pdf(1, NULL, 1) IS NULL AND
    logistic_pdf(1, 1, NULL) IS NULL,
    'Logistic PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(logistic_pdf('NaN', 1, 1) ) AND
    isnan(logistic_pdf(1, 'NaN', 1) ) AND
    isnan(logistic_pdf(1, 1, 'NaN') ),
    'Logistic PDF: Wrong handling of NaNs.'
);

SELECT assert(
    logistic_pdf('-Inf', 1, 1) = 0 AND
    logistic_pdf('Inf', 1, 1) = 0 AND
    relative_error(logistic_pdf(3, 1, 2), 0.09830597) < 1e-5 AND
    relative_error(logistic_pdf(2, 1, 2), 0.1175019) < 1e-5 AND
    relative_error(logistic_pdf(0, 1, 2), 0.1175019) < 1e-5 AND
    relative_error(logistic_pdf(-1, 1, 2), 0.09830597) < 1e-5,

    'Logistic PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT logistic_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT logistic_pdf(0.5, 1, -1)$$),

    'Logistic PDF: scale less than or equal to 0 does not raise error.'
);

-- logistic_quantile
SELECT assert(
    logistic_quantile(NULL, 1, 1) IS NULL AND
    logistic_quantile(1, NULL, 1) IS NULL AND
    logistic_quantile(1, 1, NULL) IS NULL,
    'Logistic Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(logistic_quantile('NaN', 1, 1) ) AND
    isnan(logistic_quantile(1, 'NaN', 1) ) AND
    isnan(logistic_quantile(1, 1, 'NaN') ),
    'Logistic Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    logistic_quantile(0, 1, 1) = '-Inf' AND
    logistic_quantile(1, 1, 1) =  'Inf' AND
    relative_error(logistic_quantile(0.7310586, 1, 2), 3) < 1e-5 AND
    relative_error(logistic_quantile(0.6224593, 1, 2), 2) < 1e-5 AND
    abs(logistic_quantile(0.3775407, 1, 2)) < 1e-5 AND
    relative_error(logistic_quantile(0.2689414, 1, 2), -1) < 1e-5,

    'Logistic Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT logistic_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT logistic_quantile(0.5, 1, -1)$$),

    'Logistic Quantile: scale less than or equal to 0 does not raise error.'
);


-- lognormal_cdf
SELECT assert(
    lognormal_cdf(NULL, 1, 1) IS NULL AND
    lognormal_cdf(1, NULL, 1) IS NULL AND
    lognormal_cdf(1, 1, NULL) IS NULL,
    'Log-normal CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(lognormal_cdf('NaN', 1, 1) ) AND
    isnan(lognormal_cdf(1, 'NaN', 1) ) AND
    isnan(lognormal_cdf(1, 1, 'NaN') ),
    'Log-normal CDF: Wrong handling of NaNs.'
);

SELECT assert(
    lognormal_cdf('-Inf', 1, 2) = 0 AND
    lognormal_cdf('Inf', 1, 2) = 1 AND
    relative_error(lognormal_cdf(3, 1, 2), 0.5196623) < 1e-5 AND
    relative_error(lognormal_cdf(2, 1, 2), 0.439031) < 1e-5 AND
    lognormal_cdf(0, 1, 2) = 0 AND
    lognormal_cdf(-1, 1, 2) = 0,

    'Log-normal CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_cdf(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT lognormal_cdf(0.5, '-Inf', 1)$$),

    'Log-normal CDF: non-finite location does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT lognormal_cdf(0.5, 1, -1)$$),

    'Log-normal CDF: scale less than or equal to 0 does not raise error.'
);

-- lognormal_pdf
SELECT assert(
    lognormal_pdf(NULL, 1, 1) IS NULL AND
    lognormal_pdf(1, NULL, 1) IS NULL AND
    lognormal_pdf(1, 1, NULL) IS NULL,
    'Log-normal PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(lognormal_pdf('NaN', 1, 1) ) AND
    isnan(lognormal_pdf(1, 'NaN', 1) ) AND
    isnan(lognormal_pdf(1, 1, 'NaN') ),
    'Log-normal PDF: Wrong handling of NaNs.'
);

SELECT assert(
    lognormal_pdf('-Inf', 1, 1) = 0 AND
    lognormal_pdf('Inf', 1, 1) = 0 AND
    relative_error(lognormal_pdf(3, 1, 2), 0.06640961) < 1e-5 AND
    relative_error(lognormal_pdf(2, 1, 2), 0.09856858) < 1e-5 AND
    lognormal_pdf(0, 1, 2) = 0 AND
    lognormal_pdf(-1, 1, 2) = 0,

    'Log-normal PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_pdf(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT lognormal_pdf(0.5, '-Inf', 1)$$),

    'Log-normal PDF: non-finite location does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT lognormal_pdf(0.5, 1, -1)$$),

    'Log-normal PDF: scale less than or equal to 0 does not raise error.'
);

-- lognormal_quantile
SELECT assert(
    lognormal_quantile(NULL, 1, 1) IS NULL AND
    lognormal_quantile(1, NULL, 1) IS NULL AND
    lognormal_quantile(1, 1, NULL) IS NULL,
    'Log-normal Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(lognormal_quantile('NaN', 1, 1) ) AND
    isnan(lognormal_quantile(1, 'NaN', 1) ) AND
    isnan(lognormal_quantile(1, 1, 'NaN') ),
    'Log-normal Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    lognormal_quantile(0, 1, 1) = 0 AND
    lognormal_quantile(1, 1, 1) =  'Inf' AND
    relative_error(lognormal_quantile(0.5196623, 1, 2), 3) < 1e-5 AND
    relative_error(lognormal_quantile(0.439031, 1, 2), 2) < 1e-5,

    'Log-normal Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_quantile(0.5, 'Inf', 1)$$) AND
    check_if_raises_error($$SELECT lognormal_quantile(0.5, '-Inf', 1)$$),

    'Log-normal Quantile: non-finite location does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT lognormal_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT lognormal_quantile(0.5, 1, -1)$$),

    'Log-normal Quantile: scale less than or equal to 0 does not raise error.'
);


-- negative_binomial_cdf
SELECT assert(
    negative_binomial_cdf(NULL, 1, 1) IS NULL AND
    negative_binomial_cdf(1, NULL, 1) IS NULL AND
    negative_binomial_cdf(1, 1, NULL) IS NULL,
    'Negative binomial CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(negative_binomial_cdf(1, 1, 'NaN') ),
    'Negative binomial CDF: Wrong handling of NaNs.'
);

SELECT assert(
    negative_binomial_cdf(-1,11, 0.4) = 0 AND
    relative_error(negative_binomial_cdf(3, 11, 0.4), 0.003906407) < 1e-5 AND
    negative_binomial_cdf(3, 11, 0.4) = negative_binomial_cdf(3.2, 11, 0.4) AND
    relative_error(negative_binomial_cdf(11, 11, 0.4), 0.22805) < 1e-5 AND
    relative_error(negative_binomial_cdf(12, 11, 0.4), 0.2870893) < 1e-5 AND
    negative_binomial_cdf('-Inf',11, 0.4) = 0 AND
    negative_binomial_cdf('Inf', 11, 0.4) = 1,

    'Negative binomial CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_cdf(0, 0, 1)$$) AND
    check_if_raises_error($$SELECT negative_binomial_cdf(0, -1, 1)$$) ,

    'Negative binomial CDF: non positive trials does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_cdf(0, 1, 0)$$) AND
    check_if_raises_error($$SELECT negative_binomial_cdf(0, 1, 2)$$) AND
    check_if_raises_error($$SELECT negative_binomial_cdf(0, 1, -1)$$),

    'Negative binomial CDF: succ_prob out of range (0,1] does not raise error.'
);

-- negative_binomial_pmf
SELECT assert(
    negative_binomial_pmf(NULL, 1, 1) IS NULL AND
    negative_binomial_pmf(1, NULL, 1) IS NULL AND
    negative_binomial_pmf(1, 1, NULL) IS NULL,
    'Negative binomial PMF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(negative_binomial_pmf(1, 1, 'NaN') ),
    'Negative binomial PMF: Wrong handling of NaNs.'
);

SELECT assert(
    negative_binomial_pmf(-1,11, 0.4) = 0 AND
    relative_error(negative_binomial_pmf(3, 11, 0.4), 0.002591073) < 1e-5 AND
    relative_error(negative_binomial_pmf(11, 11, 0.4), 0.05367213) < 1e-5 AND
    relative_error(negative_binomial_pmf(12, 11, 0.4), 0.05903934) < 1e-5 ,

    'Negative binomial PMF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_pmf(0, 0, 1)$$) AND
    check_if_raises_error($$SELECT negative_binomial_pmf(0, -1, 1)$$) ,

    'Negative binomial PMF: non positive trials does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_pmf(0, 1, 0)$$) AND
    check_if_raises_error($$SELECT negative_binomial_pmf(0, 1, 2)$$) AND
    check_if_raises_error($$SELECT negative_binomial_pmf(0, 1, -1)$$),

    'Negative binomial PMF: succ_prob out of range (0,1] does not raise error.'
);

-- negative_binomial_quantile
SELECT assert(
    negative_binomial_quantile(NULL, 1, 1) IS NULL AND
    negative_binomial_quantile(1, NULL, 1) IS NULL AND
    negative_binomial_quantile(1, 1, NULL) IS NULL,
    'Negative binomial Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(negative_binomial_quantile(1, 1, 'NaN') ),
    'Negative binomial Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    negative_binomial_quantile(0,11, 0.4) = 0 AND
    relative_error(negative_binomial_quantile(0.003906407, 11, 0.4), 3) < 1e-5 AND
    relative_error(negative_binomial_quantile(0.22805, 11, 0.4), 11) < 1e-5 AND
    relative_error(negative_binomial_quantile(0.287089336441514, 11, 0.4), 12) < 1e-5 AND
    negative_binomial_quantile(1, 11, 0.4) = 'Inf' AND
    negative_binomial_quantile(0.5, 20, 1) = 0,

    'Negative binomial Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_quantile(0, 0, 1)$$) AND
    check_if_raises_error($$SELECT negative_binomial_quantile(0, -1, 1)$$) ,

    'Negative binomial Quantile: non positive trials does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_quantile(0, 1, 0)$$) AND
    check_if_raises_error($$SELECT negative_binomial_quantile(0, 1, 2)$$) AND
    check_if_raises_error($$SELECT negative_binomial_quantile(0, 1, -1)$$),

    'Negative binomial Quantile: succ_prob out of range (0,1] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT negative_binomial_quantile(-1, 1, 0.4)$$) AND
    check_if_raises_error($$SELECT negative_binomial_quantile(2, 1, 0.4)$$),

    'Negative binomial quantile: probability out of range [0,1] does not raise error.'
);


-- non_central_beta_cdf
SELECT assert(
    non_central_beta_cdf(NULL, 1, 1, 1) IS NULL AND
    non_central_beta_cdf(1, NULL, 1, 1) IS NULL AND
    non_central_beta_cdf(1, 1, NULL, 1) IS NULL ANd
    non_central_beta_cdf(1, 1, 1, NULL) IS NULL,
    'Non-central beta CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_beta_cdf('NaN', 1, 1, 1) ) AND
    isnan(non_central_beta_cdf(1, 'NaN', 1, 1) ) AND
    isnan(non_central_beta_cdf(1, 1, 'NaN', 1) ) ANd
    isnan(non_central_beta_cdf(1, 1, 1, 'NaN') ),
    'Non-central beta CDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_beta_cdf(-1, 1, 2, 3) = 0 AND
    non_central_beta_cdf(0, 1, 2, 3) = 0 AND
    relative_error(non_central_beta_cdf(0.5, 1, 2, 3), 0.4428436) < 1e-5 AND
    non_central_beta_cdf(1, 1, 2, 3) = 1 AND
    non_central_beta_cdf('Inf', 1, 2, 3) = 1 AND
    non_central_beta_cdf(0, 0.5, 2, 3) = 0 AND
    non_central_beta_cdf(1, 1, 0.5, 3) = 1 AND
    non_central_beta_cdf(0, 0.5, 0.5, 3) = 0 AND
    non_central_beta_cdf(1, 0.5, 0.5, 3) = 1,

    'Non-central beta CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_cdf(0.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_cdf(0.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_cdf(0.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_cdf(0.5, 1, -1, 1)$$),

    'Non-central beta CDF: shape parameters less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_cdf(0.5, 1, 2, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_beta_cdf(0.5, 1, 2, 0)$$),
    'Non-central beta CDF: non-centrality less than 0 does not raise error.'
);

-- non_central_beta_pdf
SELECT assert(
    non_central_beta_pdf(NULL, 1, 1, 1) IS NULL AND
    non_central_beta_pdf(1, NULL, 1, 1) IS NULL AND
    non_central_beta_pdf(1, 1, NULL, 1) IS NULL ANd
    non_central_beta_pdf(1, 1, 1, NULL) IS NULL,
    'Non-central beta PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_beta_pdf('NaN', 1, 1, 1) ) AND
    isnan(non_central_beta_pdf(1, 'NaN', 1, 1) ) AND
    isnan(non_central_beta_pdf(1, 1, 'NaN', 1) ) ANd
    isnan(non_central_beta_pdf(1, 1, 1, 'NaN') ),
    'Non-central beta PDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_beta_pdf(-1, 1, 2, 3) = 0 AND
    relative_error(non_central_beta_pdf(0, 1, 2, 3), 2. * exp(-3./2.)) < 1e-5 AND
    relative_error(non_central_beta_pdf(0.5, 1, 2, 3), 1.313769) < 1e-5 AND
    non_central_beta_pdf(1, 1, 2, 3) = 0 AND
    non_central_beta_pdf('Inf', 1, 2, 3) = 0 AND
    non_central_beta_pdf(0, 0.5, 2, 3) = 'Inf' AND
    non_central_beta_pdf(1, 1, 0.5, 3) = 'Inf' AND
    non_central_beta_pdf(0, 0.5, 0.5, 3) = 'Inf' AND
    non_central_beta_pdf(1, 0.5, 0.5, 3) = 'Inf',

    'Non-central beta PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_pdf(0.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_pdf(0.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_pdf(0.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_pdf(0.5, 1, -1, 1)$$),

    'Non-central beta PDF: shape parameters less or equal to 0 does not raise error.'
);


SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_pdf(0.5, 1, 2, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_beta_pdf(0.5, 1, 2, 0)$$),
    'Non-central beta PDF: non-centrality less than 0 does not raise error.'
);

-- non_central_beta_quantile
SELECT assert(
    non_central_beta_quantile(NULL, 1, 1, 1) IS NULL AND
    non_central_beta_quantile(1, NULL, 1, 1) IS NULL AND
    non_central_beta_quantile(1, 1, NULL, 1) IS NULL ANd
    non_central_beta_quantile(1, 1, 1, NULL) IS NULL,
    'Non-central beta Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_beta_quantile('NaN', 1, 1, 1) ) AND
    isnan(non_central_beta_quantile(1, 'NaN', 1, 1) ) AND
    isnan(non_central_beta_quantile(1, 1, 'NaN', 1) ) ANd
    isnan(non_central_beta_quantile(1, 1, 1, 'NaN') ),
    'Non-central beta Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_beta_quantile(0, 1, 2, 3) = 0 AND
    relative_error(non_central_beta_quantile(0.4428436, 1, 2, 3), 0.5) < 1e-5 AND
    non_central_beta_quantile(1, 1, 2, 3) = 1 AND
    non_central_beta_quantile(0, 0.5, 0.5, 3) = 0 AND
    non_central_beta_quantile(1, 0.5, 0.5, 3) = 1,

    'Non-central beta Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_quantile(0.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_quantile(0.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_quantile(0.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_quantile(0.5, 1, -1, 1)$$),

    'Non-central beta Quantile: shape parameters less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_quantile(0.5, 1, 2, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_beta_quantile(0.5, 1, 2, 0)$$),
    'Non-central beta Quantile: non-centrality less than 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_beta_quantile(-1, 1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_beta_quantile(2, 1, 1, 1)$$) ,

    'Non-central beta Quantile: CDF out of range [0,1] does not raise error.'
);


-- non_central_chi_squared_cdf
SELECT assert(
    non_central_chi_squared_cdf(NULL, 1, 1) IS NULL AND
    non_central_chi_squared_cdf(1, NULL, 1) IS NULL AND
    non_central_chi_squared_cdf(1, 1, NULL) IS NULL,
    'Non-central chi-squared CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_chi_squared_cdf('NaN', 1, 1) ) AND
    isnan(non_central_chi_squared_cdf(1, 'NaN', 1) ) AND
    isnan(non_central_chi_squared_cdf(1, 1, 'NaN') ),
    'Non-central chi-squared CDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_chi_squared_cdf(0, 1, 3) = 0 AND
    non_central_chi_squared_cdf(-1, 2, 3) = 0 AND
    non_central_chi_squared_cdf(0, 2, 3) = 0 AND
    non_central_chi_squared_cdf('Inf', 2, 3) = 1 AND
    relative_error(non_central_chi_squared_cdf(1, 2, 3), 0.1218255) < 1e-5,
    'Non-central chi-squared CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_cdf(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_chi_squared_cdf(1.5, -1, 1)$$),
    'Non-central chi-squared CDF: degree of freedom less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_cdf(1.5, 1, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_chi_squared_cdf(1.5, 1, 0)$$),
    'Non-central chi-squared CDF: non-centrality less than to 0 does not raise error.'
);

-- non_central_chi_squared_pdf
SELECT assert(
    non_central_chi_squared_pdf(NULL, 1, 1) IS NULL AND
    non_central_chi_squared_pdf(1, NULL, 1) IS NULL AND
    non_central_chi_squared_pdf(1, 1, NULL) IS NULL,
    'Non-central chi-squared PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_chi_squared_pdf('NaN', 1, 1) ) AND
    isnan(non_central_chi_squared_pdf(1, 'NaN', 1) ) AND
    isnan(non_central_chi_squared_pdf(1, 1, 'NaN') ),
    'Non-central chi-squared PDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_chi_squared_pdf(0, 1, 3) = 'Inf' AND
    non_central_chi_squared_pdf(-1, 2, 3) = 0 AND
    relative_error(non_central_chi_squared_pdf(0, 2, 3), 0.1115651) < 1e-5 AND
    non_central_chi_squared_pdf('Inf', 2, 3) = 0 AND
    relative_error(non_central_chi_squared_pdf(1, 2, 3), 0.1287654) < 1e-5,
    'Non-central chi-squared PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_pdf(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_chi_squared_pdf(1.5, -1, 1)$$),
    'Non-central chi-squared PDF: degree of freedom less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_pdf(1.5, 1, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_chi_squared_pdf(1.5, 1, 0)$$),
    'Non-central chi-squared PDF: non-centrality less than 0 does not raise error.'
);

-- non_central_chi_squared_quantile
SELECT assert(
    non_central_chi_squared_quantile(NULL, 1, 1) IS NULL AND
    non_central_chi_squared_quantile(1, NULL, 1) IS NULL AND
    non_central_chi_squared_quantile(1, 1, NULL) IS NULL,
    'Non-central chi-squared Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_chi_squared_quantile('NaN', 1, 1) ) AND
    isnan(non_central_chi_squared_quantile(1, 'NaN', 1) ) AND
    isnan(non_central_chi_squared_quantile(1, 1, 'NaN') ),
    'Non-central chi-squared Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_chi_squared_quantile(0, 1, 3) = 0 AND
    non_central_chi_squared_quantile(0, 2, 3) = 0 AND
    non_central_chi_squared_quantile(1, 2, 3) > 1.79769313486231e+308 AND
    relative_error(non_central_chi_squared_quantile(0.1218255, 2, 3), 1) < 1e-5,
    'Non-central chi-squared Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_quantile(1.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_chi_squared_quantile(1.5, -1, 1)$$),
    'Non-central chi-squared Quantile: degree of freedom less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_quantile(0.5, 1, -1)$$) AND
    NOT check_if_raises_error($$SELECT non_central_chi_squared_quantile(0.5, 1, 0)$$),
    'Non-central chi-squared Quantile: non-centrality less than 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_chi_squared_quantile(-1, 2)$$) AND
    check_if_raises_error($$SELECT non_central_chi_squared_quantile(1.5, 0)$$),
    'Non-central chi-squared Quantile: CDF out of range [0,1] does not raise error.'
);


-- non_central_f_cdf
SELECT assert(
    non_central_f_cdf(NULL, 1, 1, 1) IS NULL AND
    non_central_f_cdf(1, NULL, 1, 1) IS NULL AND
    non_central_f_cdf(1, 1, NULL, 1) IS NULL AND
    non_central_f_cdf(1, 1, 1, NULL) IS NULL,
    'Non-central fisher f CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_f_cdf('nan', 1, 1, 1 )) AND
    isnan(non_central_f_cdf(1, 'NaN', 1, 1 )) AND
    isnan(non_central_f_cdf(1, 1, 'NaN', 1 )) AND
    isnan(non_central_f_cdf(1, 1, 1, 'NaN' )),
    'Non-central fisher f CDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_f_cdf(-1, 1, 2, 3) = 0 AND
    non_central_f_cdf(0, 1, 2, 3) = 0 AND
    relative_error(non_central_f_cdf(1, 1, 2, 3), 0.2123953) < 1e-5 AND
    non_central_f_cdf('Inf', 1, 2, 3) = 1,

    'Non-central fisher f CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_cdf(1.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_cdf(1.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_cdf(1.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_cdf(1.5, 1, -1, 1)$$),

    'Non-central fisher f CDF: degrees of freedom less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_cdf(1.5, 1, 1, -1)$$),

    'Non-central fisher f CDF: non-centrality less than 0 does not raise error.'
);

-- non_central_f_pdf
SELECT assert(
    non_central_f_pdf(NULL, 1, 1, 1) IS NULL AND
    non_central_f_pdf(1, NULL, 1, 1) IS NULL AND
    non_central_f_pdf(1, 1, NULL, 1) IS NULL AND
    non_central_f_pdf(1, 1, 1, NULL) IS NULL,
    'Non-central fisher f PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_f_pdf('NaN', 1, 1, 1 )) AND
    isnan(non_central_f_pdf(1, 'NaN', 1, 1 )) AND
    isnan(non_central_f_pdf(1, 1, 'NaN', 1 )) AND
    isnan(non_central_f_pdf(1, 1, 1, 'NaN' )),
    'Non-central fisher f PDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_f_pdf(-1, 1, 2, 3) = 0 AND
    non_central_f_pdf(0, 1, 2, 3) = 'Inf' AND
    relative_error(non_central_f_pdf(0, 2, 2, 3), exp(-3./2.)) < 1e-5 AND
    relative_error(non_central_f_pdf(1, 1, 2, 3), 0.1415969) < 1e-5 AND
    non_central_f_pdf('Inf', 1, 2, 3) = 0,

    'Non-central fisher f PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_pdf(1.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_pdf(1.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_pdf(1.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_pdf(1.5, 1, -1, 1)$$),

    'Non-central fisher f PDF: degrees of freedom less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_pdf(1.5, 1, 1, -1)$$),

    'Non-central fisher f PDF: non-centrality less than 0 does not raise error.'
);

-- non_central_f_quantile
SELECT assert(
    non_central_f_quantile(NULL, 1, 1, 1) IS NULL AND
    non_central_f_quantile(1, NULL, 1, 1) IS NULL AND
    non_central_f_quantile(1, 1, NULL, 1) IS NULL AND
    non_central_f_quantile(1, 1, 1, NULL) IS NULL,
    'Non-central fisher f Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(non_central_f_quantile('NaN', 1, 1, 1 )) AND
    isnan(non_central_f_quantile(1, 'NaN', 1, 1 )) AND
    isnan(non_central_f_quantile(1, 1, 'NaN', 1 )) AND
    isnan(non_central_f_quantile(1, 1, 1, 'NaN' )),

    'Non-central fisher f Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_f_quantile(0, 1, 2, 3) = 0 AND
    relative_error(non_central_f_quantile(0.2123953, 1, 2, 3), 1) < 1e-5 AND
    non_central_f_quantile(1, 1, 2, 3) = 'Inf',

    'Non-central fisher f Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_quantile(1.5, 0, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_quantile(1.5, 1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_quantile(1.5, -1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_quantile(1.5, 1, -1, 1)$$),

    'Non-central fisher f Quantile: degrees of freedom less or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_quantile(1.5, 1, 1, -1)$$),

    'Non-central fisher f Quantile: non-centrality less than 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_f_quantile(-1, 1, 1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_f_quantile(2, 1, 1, 1)$$) ,

    'Non-central fisher f Quantile: CDF out of range [0,1] does not raise error.'
);


-- non_central_t_cdf
SELECT assert(
    non_central_t_cdf(NULL, 1, 1) IS NULL AND
    non_central_t_cdf(1, NULL, 1) IS NULL ANd
    non_central_t_cdf(1, 1, NULL) IS NULL,
    'Noncentral Students-t CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( non_central_t_cdf('NaN', 1, 1) ) AND
    isnan( non_central_t_cdf(1, 'NaN', 1) ) AND
    isnan( non_central_t_cdf(1, 1, 'NaN') ),
    'Noncentral Students-t CDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_t_cdf('-Inf', 1, 1) = 0 AND
    non_central_t_cdf('Inf', 1, 1) = 1 AND
    relative_error(non_central_t_cdf(3, 1, 1), 0.7301026) < 1e-5 AND
    relative_error(non_central_t_cdf(-3, 1, 1), 0.02172704) < 1e-5,

    'Noncentral Students-t CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_t_cdf(1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_t_cdf(1, -1, 0)$$),
    'Noncentral Students-t CDF: Non-positive degree of freedom (nu) does not raise error.'
);

-- non_central_t_pdf
SELECT assert(
    non_central_t_pdf(NULL, 1, 1) IS NULL AND
    non_central_t_pdf(1, NULL, 1) IS NULL ANd
    non_central_t_pdf(1, 1, NULL) IS NULL,
    'Noncentral Students-t PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( non_central_t_pdf('NaN', 1, 1) ) AND
    isnan( non_central_t_pdf(1, 'NaN', 1) ) AND
    isnan( non_central_t_pdf(1, 1, 'NaN') ),
    'Noncentral Students-t PDF: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_t_pdf('-Inf', 1, 1) = 0 AND
    non_central_t_pdf('Inf', 1, 1) = 0 AND
    relative_error(non_central_t_pdf(3, 1, 1), 0.07896827) < 1e-5 AND
    relative_error(non_central_t_pdf(-3, 1, 1), 0.006965928) < 1e-5,

    'Noncentral Students-t PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_t_pdf(1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_t_pdf(1, -1, 0)$$),
    'Noncentral Students-t PDF: Non-positive degree of freedom (nu) does not raise error.'
);

-- non_central_t_quantile
SELECT assert(
    non_central_t_quantile(NULL, 1, 1) IS NULL AND
    non_central_t_quantile(1, NULL, 1) IS NULL ANd
    non_central_t_quantile(1, 1, NULL) IS NULL,
    'Noncentral Students-t Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( non_central_t_quantile('NaN', 1, 1) ) AND
    isnan( non_central_t_quantile(1, 'NaN', 1) ) AND
    isnan( non_central_t_quantile(1, 1, 'NaN') ),
    'Noncentral Students-t Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    non_central_t_quantile(0, 1, 1) = '-Inf' AND
    non_central_t_quantile(1, 1, 1) = 'Inf' AND
    relative_error(non_central_t_quantile(0.7301026, 1, 1), 3) < 1e-5 AND
    relative_error(non_central_t_quantile(0.02172704, 1, 1), -3) < 1e-5,

    'Noncentral Students-t Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_t_quantile(1, 0, 1)$$) AND
    check_if_raises_error($$SELECT non_central_t_quantile(1, -1, 0)$$),
    'Noncentral Students-t Quantile: Non-positive degree of freedom (nu) does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT non_central_t_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT non_central_t_quantile(2, 1)$$) ,

    'Noncentral Students-t Quantile: CDF out of range [0,1] does not raise error.'
);


-- normal_cdf
SELECT assert(
    normal_cdf(NULL, 0, 1) IS NULL AND
    normal_cdf(0, NULL, 1) IS NULL AND
    normal_cdf(0, 0, NULL) IS NULL,
    'Normal CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(normal_cdf('NaN', 0, 1)) AND
    isnan(normal_cdf(0, 'NaN', 1)) AND
    isnan(normal_cdf(0, 0, 'NaN')),
    'Normal CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(normal_cdf(0.5, 0, 1), 0.6914625) < 1e-5 AND
    relative_error(normal_cdf(-0.5, 0, 1), 0.3085375) < 1e-5 AND
    relative_error(normal_cdf(0, 0, 1), 0.5) < 1e-5 AND
    normal_cdf('Infinity', 0, 1) = 1 AND
    normal_cdf('-Infinity', 0, 1) = 0,
    'Normal CDF: Wrong values with mu = 0, signma = 1.'
);

SELECT assert(
    relative_error(normal_cdf(0.5, -1, 2), 0.7733726) < 1e-5 AND
    relative_error(normal_cdf(-0.5, -1, 2), 0.5987063) < 1e-5 AND
    relative_error(normal_cdf(0, -1, 2), 0.6914625) < 1e-5 AND
    relative_error(normal_cdf('Infinity', -1, 2), 1) < 1e-5 AND
    normal_cdf('-Infinity', -1, 2) = 0,
    'Normal CDF: Wrong values with mu = -1, signma = 2.'
);

SELECT assert(
    check_if_raises_error($$SELECT normal_cdf(0.5, -2, -1)$$),
    'Normal CDF: Non-positive sigma does not raise error.'
);

-- normal_pdf
CREATE OR REPLACE FUNCTION _test_normal_pdf(t float8, mu float8, sigma float8) RETURNS float8 AS $$
    select exp(-1*($1 - $2)^2/(2*($3^2)))/sqrt(2*pi()*$3^2);
$$LANGUAGE 'sql' STRICT IMMUTABLE;

SELECT assert(
    normal_pdf(NULL, 0, 1) IS NULL AND
    normal_pdf(0, NULL, 1) IS NULL AND
    normal_pdf(0, 0, NULL) IS NULL,
    'Normal PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(normal_pdf('NaN', 0, 1)) AND
    isnan(normal_pdf(0, 'NaN', 1)) AND
    isnan(normal_pdf(0, 0, 'NaN')),
    'Normal PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(normal_pdf(0.5, 0, 1), _test_normal_pdf(0.5, 0, 1)) < 1e-5 AND
    relative_error(normal_pdf(-0.5, 0, 1), _test_normal_pdf(-0.5, 0, 1)) < 1e-5 AND
    relative_error(normal_pdf(0, 0, 1), _test_normal_pdf(0, 0, 1)) < 1e-5 AND
    normal_pdf('Infinity', 0, 1) = 0 AND
    normal_pdf('-Infinity', 0, 1) = 0,
    'Normal PDF: Wrong values with mu = 0, signma = 1.'
);

SELECT assert(
    relative_error(normal_pdf(0.5, -1, 2), _test_normal_pdf(0.5, -1, 2)) < 1e-5 AND
    relative_error(normal_pdf(-0.5, -1, 2), _test_normal_pdf(-0.5, -1, 2)) < 1e-5 AND
    relative_error(normal_pdf(0, -1, 2), _test_normal_pdf(0, -1, 2)) < 1e-5 AND
    normal_pdf('Infinity', -1, 2) = 0 AND
    normal_pdf('-Infinity', -1, 2) = 0,
    'Normal PDF: Wrong values with mu = -1, signma = 2.'
);

SELECT assert(
    check_if_raises_error($$SELECT normal_pdf(0.5, -2, -1)$$),
    'Normal PDF: Non-positive sigma does not raise error.'
);

DROP FUNCTION _test_normal_pdf(t float8, mu float8, sigma float8);

-- normal_quantile
SELECT assert(
    normal_quantile(NULL, 0, 1) IS NULL AND
    normal_quantile(0, NULL, 1) IS NULL AND
    normal_quantile(0, 0, NULL) IS NULL,
    'Normal Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(normal_quantile('NaN', 0, 1)) AND
    isnan(normal_quantile(0, 'NaN', 1)) AND
    isnan(normal_quantile(0, 0, 'NaN')),
    'Normal Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    normal_quantile(1, 0, 1) = 'Inf'::float8,
    'Normal Quantile: Wrong value for CDF = 1'
);

SELECT assert(
    normal_quantile(0, 0, 1) = '-Inf'::float8,
    'Normal Quantile: Wrong value for CDF = 0'
);

SELECT assert(
    abs(normal_quantile(0.5, 0, 1)) < 1e-5 AND
    relative_error(normal_quantile(0.6, 0, 1), 0.2533471) < 1e-5 AND
    normal_quantile(0, 0, 1) = '-Inf',
    'Normal Quantile: Wrong values with mu = 0, signma = 1.'
);

SELECT assert(
    relative_error(normal_quantile(0.5, -1, 2), -1) < 1e-5 AND
    relative_error(normal_quantile(0.6, -1, 2), -0.4933058) < 1e-5 AND
    normal_quantile(0, -1, 2) = '-inf',
    'Normal Quantile: Wrong values with mu = -1, signma = 2.'
);

SELECT assert(
    check_if_raises_error($$SELECT normal_quantile(0.5, -2, -1)$$),
    'Normal Quantile: Non-positive sigma does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT normal_quantile(-0.5, -2, 1)$$),
    'Normal Quantile: Non-positive CDF does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT normal_quantile(1.5, -2, 1)$$),
    'Normal Quantile: CDF bigger than 1 does not raise error.'
);


-- pareto_cdf
SELECT assert(
    pareto_cdf(NULL, 1, 1) IS NULL AND
    pareto_cdf(1, NULL, 1) IS NULL AND
    pareto_cdf(1, 1, NULL) IS NULL,
    'Pareto CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(pareto_cdf('NaN', 1, 1) ) AND
    isnan(pareto_cdf(1, 'NaN', 1) ) AND
    isnan(pareto_cdf(1, 1, 'NaN') ),
    'Pareto CDF: Wrong handling of NaNs.'
);

SELECT assert(
    pareto_cdf(-1, 1, 1) = 0 AND
    pareto_cdf(0, 1, 1) = 0 AND
    pareto_cdf(1, 1, 1) = 0 AND
    pareto_cdf(2, 1, 1) = 0.5 AND
    pareto_cdf(2, 2, 3) = 0 AND
    pareto_cdf('Inf', 1, 1) = 1,

    'Pareto CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_cdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT pareto_cdf(0.5, -1, 1)$$),

    'Pareto CDF: location less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT pareto_cdf(0.5, 1, -1)$$),

    'Pareto CDF: shape less than or equal to 0 does not raise error.'
);

-- pareto_pdf
SELECT assert(
    pareto_pdf(NULL, 1, 1) IS NULL AND
    pareto_pdf(1, NULL, 1) IS NULL AND
    pareto_pdf(1, 1, NULL) IS NULL,
    'Pareto PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(pareto_pdf('NaN', 1, 1) ) AND
    isnan(pareto_pdf(1, 'NaN', 1) ) AND
    isnan(pareto_pdf(1, 1, 'NaN') ),
    'Pareto PDF: Wrong handling of NaNs.'
);

SELECT assert(
    pareto_pdf(-1, 1, 1) = 0 AND
    pareto_pdf(0, 1, 1) = 0 AND
    pareto_pdf(1, 1, 1) = 1 AND
    pareto_pdf(2, 1, 1) = 0.25 AND
    pareto_pdf(2, 2, 3) = 3. * 2^3 / 2^(3 + 1) /* = 1.5 (exactly representable) */ AND
    pareto_pdf('Inf', 1, 1) = 0,

    'Pareto PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_pdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT pareto_pdf(0.5, -1, 1)$$),

    'Pareto PDF: location less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT pareto_pdf(0.5, 1, -1)$$),

    'Pareto PDF: shape less than or equal to 0 does not raise error.'
);

-- pareto_quantile
SELECT assert(
    pareto_quantile(NULL, 1, 1) IS NULL AND
    pareto_quantile(1, NULL, 1) IS NULL AND
    pareto_quantile(1, 1, NULL) IS NULL,
    'Pareto Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(pareto_quantile('NaN', 1, 1) ) AND
    isnan(pareto_quantile(1, 'NaN', 1) ) AND
    isnan(pareto_quantile(1, 1, 'NaN') ),
    'Pareto Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    pareto_quantile(1, 1, 1) = 'Inf' AND
    pareto_quantile(0.5, 1, 1) = 2 AND
    pareto_quantile(0, 1, 1) = 1,

    'Pareto Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_quantile(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT pareto_quantile(0.5, -1, 1)$$),

    'Pareto Quantile: location less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT pareto_quantile(0.5, 1, -1)$$),

    'Pareto Quantile: shape less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT pareto_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT pareto_quantile(2, 1)$$) ,

    'Pareto Quantile: CDF out of range [0,1] does not raise error.'
);


-- poisson_cdf
SELECT assert(
    poisson_cdf(NULL, 1) IS NULL AND
    poisson_cdf(1, NULL) IS NULL,
    'Poisson CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(poisson_cdf('NaN', 1) ) AND
    isnan(poisson_cdf(1, 'NaN') ) ,
    'Poisson CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(poisson_cdf(0,   0.3), 0.7408182) < 1e-5 AND
    poisson_cdf(0.7, 0.3) = poisson_cdf(0,   0.3) AND
    relative_error(poisson_cdf(1,   0.3), 0.9630637) < 1e-5 AND
    relative_error(poisson_cdf(2,   0.3), 0.9964005) < 1e-5 AND
    poisson_cdf('Inf',   0.3) = 1 AND
    poisson_cdf('-Inf',   0.3) = 0 AND
    poisson_cdf(-0.1,  0.3) = 0,

    'Poisson CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT poisson_cdf(5, -1)$$) AND
    check_if_raises_error($$SELECT poisson_cdf(5, 0)$$) ,

    'Poisson CDF: mean less than or equal to 0 does not raise error.'
);

-- poisson_pmf
SELECT assert(
    poisson_pmf(NULL, 1) IS NULL AND
    poisson_pmf(1, NULL) IS NULL,
    'Poisson PMF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(poisson_pmf(1, 'NaN') ) ,
    'Poisson PMF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(poisson_pmf(0,   0.3), 0.7408182) < 1e-5  AND
    relative_error(poisson_pmf(1,   0.3), 0.2222455) < 1e-5 AND
    relative_error(poisson_pmf(2,   0.3), 0.03333682) < 1e-5 AND
    poisson_pmf(-1,   0.3) = 0,

    'Poisson PMF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT poisson_pmf(5, -1)$$) AND
    check_if_raises_error($$SELECT poisson_pmf(5, 0)$$) ,

    'Poisson PMF: less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT poisson_pmf(0.5, 0.3)$$),

    'Poisson PMF: random variable not in {.., -1, 0, 1, 2, ...} does not raise error.'
);

-- poisson_quantile
SELECT assert(
    poisson_quantile(NULL, 1) IS NULL AND
    poisson_quantile(1, NULL) IS NULL,
    'Poisson Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(poisson_quantile('NaN', 1) ) AND
    isnan(poisson_quantile(1, 'NaN') ) ,
    'Poisson Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    abs(poisson_quantile(0.7408182,   0.3)) < 1e-5 AND
    relative_error(poisson_quantile(0.963063686886233,   0.3), 1) < 1e-5 AND
    relative_error(poisson_quantile(0.9964005,   0.3), 2) < 1e-5 AND
    poisson_quantile(0,   0.3) = 0 AND
    poisson_quantile(1,   0.3) = 'Inf',

    'Poisson Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT poisson_quantile(0.5, -1)$$) AND
    check_if_raises_error($$SELECT poisson_quantile(0.5, 0)$$) ,

    'Poisson Quantile: less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT poisson_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT poisson_quantile(2, 1)$$) ,

    'Poisson Quantile: CDF out of range [0,1] does not raise error.'
);


-- rayleigh_cdf
SELECT assert(
    rayleigh_cdf(NULL, 1) IS NULL AND
    rayleigh_cdf(1, NULL) IS NULL,
    'Rayleigh CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(rayleigh_cdf('NaN', 1)) AND
    isnan(rayleigh_cdf(1, 'NaN')) ,
    'Rayleigh CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(rayleigh_cdf(2,3), 0.1992626) < 1e-5 AND
    rayleigh_cdf(0,3) = 0 AND
    rayleigh_cdf(-1,3) = 0 AND
    rayleigh_cdf('-Inf',2) = 0 AND
    rayleigh_cdf('Inf',2) = 1,

    'Rayleigh CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT rayleigh_cdf(0.5, 0)$$) AND
    check_if_raises_error($$SELECT rayleigh_cdf(0.5, -1)$$) AND
    check_if_raises_error($$SELECT rayleigh_cdf(0.5, '-Inf')$$) AND
    check_if_raises_error($$SELECT rayleigh_cdf(0.5, 'Inf')$$),

    'Rayleigh CDF: shape outside (0, infinity) does not raise error.'
);

-- rayleigh_pdf
SELECT assert(
    rayleigh_pdf(NULL, 1) IS NULL AND
    rayleigh_pdf(1, NULL) IS NULL,
    'Rayleigh PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(rayleigh_pdf('NaN', 1)) AND
    isnan(rayleigh_pdf(1, 'NaN')) ,
    'Rayleigh PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(rayleigh_pdf(2,3), 0.1779416) < 1e-5 AND
    rayleigh_pdf(0,3) = 0 AND
    rayleigh_pdf(-1,3) = 0 AND
    rayleigh_pdf('-Inf',2) = 0 AND
    rayleigh_pdf('Inf',2) = 0,

    'Rayleigh PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT rayleigh_pdf(0.5, 0)$$) AND
    check_if_raises_error($$SELECT rayleigh_pdf(0.5, -1)$$) AND
    check_if_raises_error($$SELECT rayleigh_pdf(0.5, '-Inf')$$) AND
    check_if_raises_error($$SELECT rayleigh_pdf(0.5, 'Inf')$$),

    'Rayleigh PDF: shape outside (0, infinity) does not raise error.'
);

-- rayleigh_quantile
SELECT assert(
    rayleigh_quantile(NULL, 1) IS NULL AND
    rayleigh_quantile(1, NULL) IS NULL,
    'Rayleigh Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(rayleigh_quantile('NaN', 1)) AND
    isnan(rayleigh_quantile(1, 'NaN')) ,
    'Rayleigh Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(rayleigh_quantile(0.1992626,3), 2) < 1e-5 AND
    rayleigh_quantile(0,3) = 0 AND
    rayleigh_quantile(1,3) = 'Inf',

    'Rayleigh Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT rayleigh_quantile(0.5, 0)$$) AND
    check_if_raises_error($$SELECT rayleigh_quantile(0.5, -1)$$) AND
    check_if_raises_error($$SELECT rayleigh_quantile(0.5, '-Inf')$$) AND
    check_if_raises_error($$SELECT rayleigh_quantile(0.5, 'Inf')$$),

    'Rayleigh Quantile: shape outside (0, infinity) does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT rayleigh_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT rayleigh_quantile(2, 1)$$) ,

    'Rayleigh Quantile: CDF out of range [0,1] does not raise error.'
);


-- students_t_cdf
SELECT assert(
    students_t_cdf(NULL, 1) IS NULL AND
    students_t_cdf(1, NULL) IS NULL,
    $$Student's t CDF: Wrong handling of NULLs.$$
);

SELECT assert(
    isnan( students_t_cdf('NaN', 1) ) AND
    isnan( students_t_cdf(1, 'NaN') ),
    $$Student's t CDF: Wrong handling of NaNs.$$
);

SELECT assert(
    relative_error(students_t_cdf(0, 1000001), 0.5) < 0.0001 AND
    relative_error(students_t_cdf(1, 1000001) + students_t_cdf(-1, 1000001), 1.0) < 1e-5 AND

    relative_error(students_t_cdf(0, 201), 0.5) < 0.0001 AND
    relative_error(students_t_cdf(1, 201) + students_t_cdf(-1, 201), 1.0) < 0.001 AND

    relative_error(students_t_cdf(0, 5), 0.5) < 0.0001 AND
    relative_error(students_t_cdf(1, 5) + students_t_cdf(-1, 5), 1.0) < 0.001 AND

    relative_error(students_t_cdf(0, 4.5), 0.5) < 0.0001 AND
    relative_error(students_t_cdf(1, 4.5) + students_t_cdf(-1, 4.5), 1.0) < 0.001,

    $$Student's t CDF: Distribution is not symmetric.$$
);

SELECT assert(
    relative_error(students_t_cdf(1, 1), 1.0/2 + 1.0/pi() * atan(1)) < 0.0001 AND
    relative_error(students_t_cdf(-1, 1), 1.0/2 + 1.0/pi() * atan(-1)) < 0.0001 AND
    relative_error(students_t_cdf(2, 1), 1.0/2 + 1.0/pi() * atan(2)) < 0.0001 AND
    relative_error(students_t_cdf(-2, 1), 1.0/2 + 1.0/pi() * atan(-2)) < 0.0001 AND
    relative_error(students_t_cdf(4, 1), 1.0/2 + 1.0/pi() * atan(4)) < 0.0001 AND
    relative_error(students_t_cdf(-4, 1), 1.0/2 + 1.0/pi() * atan(-4)) < 0.0001 AND

    relative_error(students_t_cdf(1, 2), 1.0/2 * (1. + 1/sqrt(2 + 1^2))) < 0.0001 AND
    relative_error(students_t_cdf(-1, 2), 1.0/2 * (1. - 1/sqrt(2 + 1^2))) < 0.0001 AND
    relative_error(students_t_cdf(2, 2), 1.0/2 * (1. + 2/sqrt(2 + 2^2))) < 0.0001 AND
    relative_error(students_t_cdf(-2, 2), 1.0/2 * (1. - 2/sqrt(2 + 2^2))) < 0.0001 AND
    relative_error(students_t_cdf(4, 2), 1.0/2 * (1. + 4/sqrt(2 + 4^2))) < 0.0001 AND
    relative_error(students_t_cdf(-4, 2), 1.0/2 * (1. - 4/sqrt(2 + 4^2))) < 0.0001,

    $$Student's t CDF: Wrong values for special case nu in {1,2}.$$
);

SELECT assert(
        check_if_raises_error($$SELECT students_t_cdf(1, 0)$$) AND
    NOT check_if_raises_error($$SELECT students_t_cdf(1, 1)$$),
    $$Student's t CDF: Non-positive degree of freedom (nu) does not raise error.$$
);

-- students_t_pdf
SELECT assert(
    students_t_pdf(NULL, 1) IS NULL AND
    students_t_pdf(1, NULL) IS NULL,
    'Students-t PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( students_t_pdf('NaN', 1) ) AND
    isnan( students_t_pdf(1, 'NaN') ),
    'Students-t PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(students_t_pdf(1, 1), 0.1591549) < 1e-5 AND
    relative_error(students_t_pdf(-1, 1), 0.1591549) < 1e-5 AND
    relative_error(students_t_pdf(2, 1), 0.06366198) < 1e-5 AND
    relative_error(students_t_pdf(-2, 1), 0.06366198) < 1e-5 AND
    relative_error(students_t_pdf(4, 1), 0.01872411) < 1e-5 AND
    relative_error(students_t_pdf(-4, 1), 0.01872411) < 1e-5 AND

    relative_error(students_t_pdf(1, 2), 0.1924501) < 1e-5 AND
    relative_error(students_t_pdf(-1, 2), 0.1924501) < 1e-5 AND
    relative_error(students_t_pdf(2, 2), 0.06804138) < 1e-5 AND
    relative_error(students_t_pdf(-2, 2), 0.06804138) < 1e-5 AND
    relative_error(students_t_pdf(4, 2), 0.01309457) < 1e-5 AND
    relative_error(students_t_pdf(-4, 2), 0.01309457) < 1e-5,

    'Students-t PDF: Wrong values for special case nu in {1,2}.'
);

SELECT assert(
    check_if_raises_error($$SELECT students_t_pdf(1, 0)$$) AND
    NOT check_if_raises_error($$SELECT students_t_pdf(1, 1)$$),
    'Students-t PDF: Non-positive degree of freedom (nu) does not raise error.'
);

-- students_t_quantile
SELECT assert(
    students_t_quantile(NULL, 1) IS NULL AND
    students_t_quantile(1, NULL) IS NULL,
    'Students-t Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan( students_t_quantile('NaN', 1) ) AND
    isnan( students_t_quantile(1, 'NaN') ),
    'Students-t Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    students_t_quantile(1, 1) = 'Inf' AND
    relative_error(students_t_quantile(0.9, 1), 3.077684) < 1e-5 AND
    students_t_quantile(0, 1) = '-Inf' And

    students_t_quantile(1, 2) = 'Inf' AND
    relative_error(students_t_quantile(0.9, 2), 1.885618) < 1e-5 AND
    students_t_quantile(0, 2) = '-Inf',

    'Students-t Quantile: Wrong values for special case nu in {1,2}.'
);

SELECT assert(
    check_if_raises_error($$SELECT students_t_quantile(1, 0)$$) AND
    NOT check_if_raises_error($$SELECT students_t_quantile(1, 1)$$),
    'Students-t Quantile: Non-positive degree of freedom (nu) does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT students_t_quantile(-1, 1)$$) AND
    check_if_raises_error($$SELECT students_t_quantile(2, 1)$$),
    'Students-t Quantile: Out range [0,1] of CDF does not raise error.'
);


-- triangular_cdf
SELECT assert(
    triangular_cdf(NULL, 1, 1.5, 2) IS NULL AND
    triangular_cdf(1, NULL, 1.5, 2) IS NULL AND
    triangular_cdf(1, 1, NULL, 2) IS NULL AND
    triangular_cdf(1, 1, 1.5, NULL) IS NULL,
    'Triangular CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(triangular_cdf('NaN', 1, 1.5, 2) ) AND
    isnan(triangular_cdf(1, 'NaN', 1.5, 2) ) AND
    isnan(triangular_cdf(1, 1, 'NaN', 2) ) AND
    isnan(triangular_cdf(1, 1, 1.5, 'NaN') ),
    'Triangular CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(triangular_cdf(0.5, 0, 1, 2), 0.125) < 1e-5 AND
    triangular_cdf(0, 0, 1, 2) = 0 AND
    triangular_cdf(-1, 0, 1, 2) = 0 AND
    triangular_cdf(2, 0, 1, 2) = 1 AND
    triangular_cdf(3, 0, 1, 2) = 1 AND
    triangular_cdf('-Inf', 0, 1, 2) = 0 AND
    triangular_cdf('Inf', 0, 1, 2) = 1,

    'Triangular CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_cdf(0.5, 1, 1, 1)$$) AND
    check_if_raises_error($$SELECT triangular_cdf(0.5, 2, 1, 1)$$),

    'Triangular CDF: lower greater than or equal to upper does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_cdf(0.5, 0, 3, 2)$$) AND
    check_if_raises_error($$SELECT triangular_cdf(0.5, 0, -1, 2)$$),

    'Triangular CDF: mode out of range [lowwer, upper] does not raise error.'
);

-- triangular_pdf
SELECT assert(
    triangular_pdf(NULL, 1, 1.5, 2) IS NULL AND
    triangular_pdf(1, NULL, 1.5, 2) IS NULL AND
    triangular_pdf(1, 1, NULL, 2) IS NULL AND
    triangular_pdf(1, 1, 1.5, NULL) IS NULL,
    'Triangular PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(triangular_pdf('NaN', 1, 1.5, 2) ) AND
    isnan(triangular_pdf(1, 'NaN', 1.5, 2) ) AND
    isnan(triangular_pdf(1, 1, 'NaN', 2) ) AND
    isnan(triangular_pdf(1, 1, 1.5, 'NaN') ),
    'Triangular PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(triangular_pdf(0.5, 0, 1, 2), 0.5) < 1e-5 AND
    triangular_pdf(0, 0, 1, 2) = 0 AND
    triangular_pdf(-1, 0, 1, 2) = 0 AND
    triangular_pdf(2, 0, 1, 2) = 0 AND
    triangular_pdf(3, 0, 1, 2) = 0 AND
    triangular_pdf('-Inf', 0, 1, 2) = 0 AND
    triangular_pdf('Inf', 0, 1, 2) = 0,


    'Triangular PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_pdf(0.5, 1, 1, 1)$$) AND
    check_if_raises_error($$SELECT triangular_pdf(0.5, 2, 1, 1)$$),

    'Triangular PDF: lower greater than or equal to lower does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_pdf(0.5, 0, 3, 2)$$) AND
    check_if_raises_error($$SELECT triangular_pdf(0.5, 0, -1, 2)$$),

    'Triangular PDF: mode out of range [lowwer, upper] does not raise error.'
);


-- triangular_quantile
SELECT assert(
    triangular_quantile(NULL, 1, 1.5, 2) IS NULL AND
    triangular_quantile(1, NULL, 1.5, 2) IS NULL AND
    triangular_quantile(1, 1, NULL, 2) IS NULL AND
    triangular_quantile(1, 1, 1.5, NULL) IS NULL,
    'Triangular Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(triangular_quantile('NaN', 1, 1.5, 2) ) AND
    isnan(triangular_quantile(1, 'NaN', 1.5, 2) ) AND
    isnan(triangular_quantile(1, 1, 'NaN', 2) ) AND
    isnan(triangular_quantile(1, 1, 1.5, 'NaN') ),
    'Triangular Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(triangular_quantile(0.125, 0, 1, 2), 0.5) < 1e-5 AND
    triangular_quantile(1, 0, 1, 2) = 2 AND
    triangular_quantile(0, 0, 1, 2) = 0 ,

    'Triangular Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_quantile(0.5, 1, 1, 1)$$) AND
    check_if_raises_error($$SELECT triangular_quantile(0.5, 2, 1, 1)$$),

    'Triangular Quantile: lower greater than or equal to lower does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_quantile(0.5, 0, 3, 2)$$) AND
    check_if_raises_error($$SELECT triangular_quantile(0.5, 0, -1, 2)$$),

    'Triangular Quantile: mode out of range [lowwer, upper] does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT triangular_quantile(-1, 1, 1, 2)$$) AND
    check_if_raises_error($$SELECT triangular_quantile(2, 1, 1, 2)$$) ,

    'Triangular Quantile: CDF out of range [0,1] does not raise error.'
);


-- uniform_cdf
SELECT assert(
    uniform_cdf(NULL, 0, 1) IS NULL AND
    uniform_cdf(1, NULL, 1) IS NULL AND
    uniform_cdf(1, 1, NULL) IS NULL,
    'Uniform CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(uniform_cdf('NaN', 0, 1) ) AND
    isnan(uniform_cdf(1, 'NaN', 1) ) AND
    isnan(uniform_cdf(1, 1, 'NaN') ),
    'Uniform CDF: Wrong handling of NaNs.'
);

SELECT assert(
    uniform_cdf(-1, 0, 1) = 0 AND
    uniform_cdf(1, 0, 1) = 1 AND
    uniform_cdf(2, 0, 1) = 1 AND
    uniform_cdf(0.5, 0, 1) = 0.5 AND
    uniform_cdf('-Inf', 0, 1) = 0 AND
    uniform_cdf('Inf', 0, 1) = 1,

    'Uniform CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT uniform_cdf(0.5, 1, 1)$$) AND
    check_if_raises_error($$SELECT uniform_cdf(0.5, 1, 0)$$),

    'Uniform CDF: empty range does not raise error.'
);

-- uniform_pdf
SELECT assert(
    uniform_pdf(NULL, 0, 1) IS NULL AND
    uniform_pdf(1, NULL, 1) IS NULL AND
    uniform_pdf(1, 1, NULL) IS NULL,
    'Uniform PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(uniform_pdf('NaN', 0, 1) ) AND
    isnan(uniform_pdf(1, 'NaN', 1) ) AND
    isnan(uniform_pdf(1, 1, 'NaN') ),
    'Uniform PDF: Wrong handling of NaNs.'
);

SELECT assert(
    uniform_pdf(-1, 0, 1) = 0 AND
    uniform_pdf(1, 0, 1) = 1 AND
    uniform_pdf(2, 0, 1) = 0 AND
    uniform_pdf(0.5, 0, 1) = 1 AND
    uniform_pdf('-Inf', 0, 1) = 0 AND
    uniform_pdf('Inf', 0, 1) = 0,

    'Uniform PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT uniform_pdf(0.5, 1, 1)$$) AND
    check_if_raises_error($$SELECT uniform_pdf(0.5, 1, 0)$$),

    'Uniform PDF: empty range does not raise error.'
);

-- uniform_quantile
SELECT assert(
    uniform_quantile(NULL, 0, 1) IS NULL AND
    uniform_quantile(1, NULL, 1) IS NULL AND
    uniform_quantile(1, 1, NULL) IS NULL,
    'Uniform Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(uniform_quantile('NaN', 0, 1) ) AND
    isnan(uniform_quantile(1, 'NaN', 1) ) AND
    isnan(uniform_quantile(1, 1, 'NaN') ),
    'Uniform Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    uniform_quantile(1, 0, 1) = 1 AND
    uniform_quantile(0.5, 0, 1) = 0.5,

    'Uniform Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT uniform_quantle(0.5, 1, 1)$$) AND
    check_if_raises_error($$SELECT uniform_quantile(0.5, 1, 0)$$),

    'Uniform Quantile: empty range does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT uniform_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT uniform_quantile(2, 1, 1)$$) ,

    'Uniform Quantile: CDF out of range [0,1] does not raise error.'
);


-- weibull_cdf
SELECT assert(
    weibull_cdf(NULL, 1, 1) IS NULL AND
    weibull_cdf(1, NULL, 1) IS NULL AND
    weibull_cdf(1, 1, NULL) IS NULL,
    'Weibull CDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(weibull_cdf('NaN', 1, 1) ) AND
    isnan(weibull_cdf(1, 'NaN', 1) ) AND
    isnan(weibull_cdf(1, 1, 'NaN') ),
    'Weibull CDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(weibull_cdf(0.5, 1, 1), 0.3934693) < 1e-5 AND
    weibull_cdf(0, 1, 1) = 0 AND
    weibull_cdf(-1, 1, 1) = 0,

    'Weibull CDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT weibull_cdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT weibull_cdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT weibull_cdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT weibull_cdf(0.5, 1, -1)$$) ,

    'Weibull CDF: scale or shape less than or equal to 0 does not raise error.'
);


-- weibull_pdf
SELECT assert(
    weibull_pdf(NULL, 1, 1) IS NULL AND
    weibull_pdf(1, NULL, 1) IS NULL AND
    weibull_pdf(1, 1, NULL) IS NULL,
    'Weibull PDF: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(weibull_pdf('NaN', 1, 1) ) AND
    isnan(weibull_pdf(1, 'NaN', 1) ) AND
    isnan(weibull_pdf(1, 1, 'NaN') ),
    'Weibull PDF: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(weibull_pdf(0.5, 1, 1), 0.6065307) < 1e-5 AND
    weibull_pdf(0, 1, 1) = 1 AND
    weibull_pdf(0, 2, 1) = 0 AND
    weibull_pdf(-1, 1, 1) = 0 AND
    weibull_pdf(0, 0.5, 1) = 'Inf',

    'Weibull PDF: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT weibull_pdf(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT weibull_pdf(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT weibull_pdf(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT weibull_pdf(0.5, 1, -1)$$) ,

    'Weibull PDF: scale or shape less than or equal to 0 does not raise error.'
);


-- weibull_quantile
SELECT assert(
    weibull_quantile(NULL, 1, 1) IS NULL AND
    weibull_quantile(1, NULL, 1) IS NULL AND
    weibull_quantile(1, 1, NULL) IS NULL,
    'Weibull Quantile: Wrong handling of NULLs.'
);

SELECT assert(
    isnan(weibull_quantile('NaN', 1, 1) ) AND
    isnan(weibull_quantile(1, 'NaN', 1) ) AND
    isnan(weibull_quantile(1, 1, 'NaN') ),
    'Weibull Quantile: Wrong handling of NaNs.'
);

SELECT assert(
    relative_error(weibull_quantile(0.5, 1, 1), 0.6931472) < 1e-5 AND
    weibull_quantile(0, 1, 1) = 0 AND
    weibull_quantile(1, 1, 1) = 'Inf' ,

    'Weibull Quantile: Wrong handling regular values'
);

SELECT assert(
    check_if_raises_error($$SELECT weibull_quantile(0.5, 0, 1)$$) AND
    check_if_raises_error($$SELECT weibull_quantile(0.5, 1, 0)$$) AND
    check_if_raises_error($$SELECT weibull_quantile(0.5, -1, 1)$$) AND
    check_if_raises_error($$SELECT weibull_quantile(0.5, 1, -1)$$) ,

    'Weibull Quantile: scale or shape less than or equal to 0 does not raise error.'
);

SELECT assert(
    check_if_raises_error($$SELECT weibull_quantile(-1, 1, 1)$$) AND
    check_if_raises_error($$SELECT weibull_quantile(2, 1, 1)$$) ,

    'Weibull Quantile: CDF out of range [0,1] does not raise error.'
);
