test-mul_var-verify.sql

application/octet-stream

Filename: test-mul_var-verify.sql
Type: application/octet-stream
Part: 1
Message: Re: Optimize mul_var() for var1ndigits >= 8
SET client_min_messages TO 'warning';

DROP TABLE IF EXISTS test_numeric_mul_rscale;
DROP TABLE IF EXISTS test_numeric_power;
DROP TABLE IF EXISTS test_numeric_exp;

CREATE TABLE test_numeric_mul_rscale
(
    var1 numeric,
    var2 numeric,
    rscale_adjustment integer,
    expected numeric
);

CREATE TABLE test_numeric_power
(
    var1 numeric,
    var2 numeric,
    expected numeric
);

CREATE TABLE test_numeric_exp
(
    var numeric,
    expected numeric
);

\copy test_numeric_mul_rscale from test_numeric_mul_rscale.dump;
\copy test_numeric_power from test_numeric_power.dump;
\copy test_numeric_exp from test_numeric_exp.dump;

\x on

SELECT
    *,
    numeric_mul_rscale - expected AS diff
FROM
    test_numeric_mul_rscale,
    numeric_mul_rscale(var1, var2, rscale_adjustment)
WHERE numeric_mul_rscale IS DISTINCT FROM expected
ORDER BY rscale_adjustment DESC
LIMIT 1;

\x off

SELECT
    to_char(numeric_mul_rscale - expected,'0.000EEEE') AS diff,
    COUNT(*)
FROM
    test_numeric_mul_rscale,
    numeric_mul_rscale(var1, var2, rscale_adjustment)
GROUP BY diff
ORDER BY diff;

SELECT
    rscale_adjustment,
    COUNT(*)
FROM
    test_numeric_mul_rscale,
    numeric_mul_rscale(var1, var2, rscale_adjustment)
WHERE numeric_mul_rscale IS DISTINCT FROM expected
GROUP BY rscale_adjustment
ORDER BY rscale_adjustment;

\x on

SELECT
    *,
    numeric_power - expected AS diff
FROM
    test_numeric_power,
    numeric_power(var1, var2)
WHERE numeric_power IS DISTINCT FROM expected
LIMIT 1;

\x on

SELECT
    *,
    numeric_exp - expected AS diff
FROM
    test_numeric_exp,
    numeric_exp(var)
WHERE numeric_exp IS DISTINCT FROM expected
LIMIT 1;