Beispiel #1
0
void config_set_real( hash_t section, hash_t key, real value )
{
	config_key_t* key_val = config_key( section, key, true );
	if( !FOUNDATION_VALIDATE( key_val ) ) return;
	key_val->bval = !math_realzero( value );
	key_val->ival = (int64_t)value;
	key_val->rval = value;
	if( key_val->expanded != key_val->sval )
		string_deallocate( key_val->expanded );
	if( ( key_val->type != CONFIGVALUE_STRING_CONST ) && ( key_val->type != CONFIGVALUE_STRING_CONST_VAR ) )
		string_deallocate( key_val->sval );
	key_val->sval = 0;
	key_val->expanded = 0;
	key_val->type = CONFIGVALUE_REAL;
}
Beispiel #2
0
DECLARE_TEST( math, comparison )
{
	real testreal, refreal;
	real onereal = REAL_ONE;
	real zeroreal = REAL_ZERO;

	testreal = REAL_C( 42.42 );
	refreal = testreal;

	EXPECT_EQ( testreal, refreal );
	EXPECT_TRUE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_TRUE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	testreal = math_realdec( testreal, 10 );
	EXPECT_NE( testreal, refreal );
	EXPECT_FALSE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_TRUE( math_realeq( testreal, refreal, 10 ) );
	EXPECT_TRUE( math_realeqns( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	testreal = math_realdec( testreal, 10 );
	EXPECT_NE( testreal, refreal );
	EXPECT_FALSE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeq( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	testreal = math_realinc( testreal, 20 );
	EXPECT_EQ( testreal, refreal );
	EXPECT_TRUE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_TRUE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	testreal = math_realinc( testreal, 10 );
	EXPECT_NE( testreal, refreal );
	EXPECT_FALSE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_TRUE( math_realeq( testreal, refreal, 10 ) );
	EXPECT_TRUE( math_realeqns( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	testreal = math_realinc( testreal, 10 );
	EXPECT_NE( testreal, refreal );
	EXPECT_FALSE( math_realeq( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 0 ) );
	EXPECT_FALSE( math_realeq( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realeqns( testreal, refreal, 10 ) );
	EXPECT_FALSE( math_realzero( testreal ) );
	EXPECT_FALSE( math_realone( testreal ) );
	EXPECT_FALSE( math_realisnan( testreal ) );
	EXPECT_FALSE( math_realisinf( testreal ) );
	EXPECT_FALSE( math_realisuninitialized( testreal ) );
	EXPECT_TRUE( math_realisfinite( testreal ) );

	EXPECT_TRUE( math_realisnan( math_sqrt( REAL_C( -1.0 ) ) ) );
	EXPECT_TRUE( math_realisinf( onereal / zeroreal ) );
	EXPECT_TRUE( math_realisnan( -math_sqrt( REAL_C( -1.0 ) ) ) );
	EXPECT_TRUE( math_realisinf( -onereal / zeroreal ) );

	testreal = REAL_ONE / REAL_MAX;
	EXPECT_REALNE( testreal, REAL_ZERO );
	EXPECT_TRUE( math_realisdenormalized( testreal ) );
	EXPECT_REALZERO( math_realundenormalize( testreal ) );
	EXPECT_FALSE( math_realisdenormalized( REAL_ONE ) );
	EXPECT_REALONE( math_realundenormalize( REAL_ONE ) );

	return 0;
}