/* * Test the verse.get_random_part() function */ BEGIN; SELECT plan( 6 ); /* First set of tests: results of the function with a fake * verse.random_deviation() that always returns the minimal possible * value. */ CREATE OR REPLACE FUNCTION verse.random_deviation( _mean DOUBLE PRECISION , _deviation DOUBLE PRECISION ) RETURNS DOUBLE PRECISION STRICT VOLATILE AS $$ SELECT $1 - $2; $$ LANGUAGE SQL; SELECT diag_test_name( 'verse.get_random_part() - Single part, minimal random value' ); SELECT is( verse.get_random_part( 0.5 , 1 , 0.5 , 0.25 ) , 0.5::DOUBLE PRECISION ); SELECT diag_test_name( 'verse.get_random_part() - Two parts, some extra quantity, minimal random value' ); SELECT is( verse.get_random_part( 0.75 , 2 , 0.5 , 0.25 ) , 0.25::DOUBLE PRECISION ); SELECT diag_test_name( 'verse.get_random_part() - Two parts, maximal quantity, minimal random value' ); SELECT is( verse.get_random_part( 1.5 , 2 , 0.5 , 0.25 ) , 0.75::DOUBLE PRECISION ); /* Second set of tests: results of the function with a fake * verse.random_deviation() that always returns the maximal possible * value. */ CREATE OR REPLACE FUNCTION verse.random_deviation( _mean DOUBLE PRECISION , _deviation DOUBLE PRECISION ) RETURNS DOUBLE PRECISION STRICT VOLATILE AS $$ SELECT $1 + $2; $$ LANGUAGE SQL; SELECT diag_test_name( 'verse.get_random_part() - Single part, maximal random value' ); SELECT is( verse.get_random_part( 0.5 , 1 , 0.5 , 0.25 ) , 0.5::DOUBLE PRECISION ); SELECT diag_test_name( 'verse.get_random_part() - Two parts, some extra quantity, maximal random value' ); SELECT is( verse.get_random_part( 1 , 2 , 0.5 , 0.25 ) , 0.75::DOUBLE PRECISION ); SELECT diag_test_name( 'verse.get_random_part() - Two parts, minimal quantity, maximal random value' ); SELECT is( verse.get_random_part( 0.5 , 2 , 0.5 , 0.25 ) , 0.25::DOUBLE PRECISION ); SELECT * FROM finish( ); ROLLBACK;