ErrorNumber freeLib( TA_UDBase *uDBase ) { TA_RetCode retCode; /* For testing purpose */ /* TA_FATAL_RET( "Test again", 100, 200, 0 ); */ retCode = TA_UDBaseFree( uDBase ); if( retCode != TA_SUCCESS ) { printf( "TA_UDBaseFree failed [%d]\n", retCode ); return TA_TESTUTIL_UDBASE_FREE_FAILED; } retCode = TA_Shutdown(); if( retCode != TA_SUCCESS ) { printf( "TA_Shutdown failed [%d]\n", retCode ); return TA_TESTUTIL_SHUTDOWN_FAILED; } return TA_TEST_PASS; }
static ErrorNumber testHistoryAlloc( void ) { TA_UDBase *unifiedDatabase; TA_History *data; TA_RetCode retCode; TA_InitializeParam param; TA_AddDataSourceParam addParam; TA_HistoryAllocParam histParam; memset( ¶m, 0, sizeof( TA_InitializeParam ) ); param.logOutput = stdout; retCode = TA_Initialize( ¶m ); if( retCode != TA_SUCCESS ) { printf( "Cannot initialize TA-LIB (%d)!", retCode ); return TA_REGTEST_HISTORYALLOC_0; } /* Create an unified database. */ if( TA_UDBaseAlloc( &unifiedDatabase ) != TA_SUCCESS ) { TA_Shutdown(); return TA_REGTEST_HISTORYALLOC_1; } /* USE SIMULATOR DATA */ memset( &addParam, 0, sizeof( TA_AddDataSourceParam ) ); addParam.id = TA_SIMULATOR; addParam.flags = TA_NO_FLAGS; retCode = TA_AddDataSource( unifiedDatabase, &addParam ); /* Now, display all daily close price available * for the DAILY_REF_0 symbol. */ if( retCode != TA_SUCCESS ) return TA_REGTEST_ADDDSOURCE_FAILED; #if defined __BORLANDC__ #pragma warn -ccc #pragma warn -rch #endif #define CHECK_FIELDSUBSET(field_par) \ { \ memset( &histParam, 0, sizeof( TA_HistoryAllocParam ) ); \ histParam.category = "TA_SIM_REF"; \ histParam.symbol = "DAILY_REF_0"; \ histParam.field = field_par; \ histParam.period = TA_DAILY; \ retCode = TA_HistoryAlloc( unifiedDatabase, &histParam, &data ); \ if( retCode == TA_SUCCESS ) \ { \ if( (field_par) & TA_OPEN ) \ { \ if( !data->open ) \ return TA_REGTEST_HISTORYALLOC_2; \ if( data->open[0] != 92.5 ) \ return TA_REGTEST_HISTORYALLOC_3; \ } \ else \ { \ if( data->open ) \ return TA_REGTEST_HISTORYALLOC_4; \ } \ if( (field_par) & TA_HIGH ) \ { \ if( !data->high ) \ return TA_REGTEST_HISTORYALLOC_5; \ if( data->high[0] != 93.25 ) \ return TA_REGTEST_HISTORYALLOC_6; \ } \ else \ { \ if( data->high ) \ return TA_REGTEST_HISTORYALLOC_7; \ } \ if( (field_par) & TA_LOW ) \ { \ if( !data->low ) \ return TA_REGTEST_HISTORYALLOC_8; \ if( data->low[0] != 90.75 ) \ return TA_REGTEST_HISTORYALLOC_9; \ } \ else \ { \ if( data->low ) \ return TA_REGTEST_HISTORYALLOC_10; \ } \ if( (field_par) & TA_CLOSE ) \ { \ if( !data->close ) \ return TA_REGTEST_HISTORYALLOC_11; \ if( data->close[0] != 91.50 ) \ return TA_REGTEST_HISTORYALLOC_12; \ } \ else \ { \ if( data->close ) \ return TA_REGTEST_HISTORYALLOC_13; \ } \ if( (field_par) & TA_VOLUME ) \ { \ if( !data->volume ) \ return TA_REGTEST_HISTORYALLOC_14; \ if( data->volume[0] != 4077500) \ return TA_REGTEST_HISTORYALLOC_15; \ } \ else \ { \ if( data->volume ) \ return TA_REGTEST_HISTORYALLOC_16; \ } \ if( (field_par) & TA_TIMESTAMP ) \ { \ if( !data->timestamp ) \ return TA_REGTEST_HISTORYALLOC_17; \ } \ else \ { \ if( data->timestamp ) \ return TA_REGTEST_HISTORYALLOC_18; \ } \ TA_HistoryFree( data ); \ } \ else \ { \ printf( "Cannot TA_HistoryAlloc for TA_SIM_REF (%d)!\n", retCode ); \ return TA_REGTEST_HISTORYALLOC_19; \ } \ } /* 6 Fields */ CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_HIGH|TA_LOW|TA_VOLUME) /* 5 Fields */ CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_HIGH|TA_VOLUME) /* 4 Fields */ CHECK_FIELDSUBSET(TA_CLOSE|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE|TA_HIGH) /* 3 Fields */ CHECK_FIELDSUBSET(TA_HIGH|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_CLOSE|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_CLOSE|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_CLOSE|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_OPEN|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_LOW) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE|TA_HIGH) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_HIGH) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_CLOSE) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_HIGH|TA_CLOSE) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_LOW|TA_CLOSE) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE|TA_VOLUME) /* Two field. */ CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_OPEN) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_HIGH) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_LOW) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_CLOSE) CHECK_FIELDSUBSET(TA_TIMESTAMP|TA_VOLUME) CHECK_FIELDSUBSET(TA_OPEN|TA_HIGH) CHECK_FIELDSUBSET(TA_OPEN|TA_LOW) CHECK_FIELDSUBSET(TA_OPEN|TA_CLOSE) CHECK_FIELDSUBSET(TA_OPEN|TA_VOLUME) CHECK_FIELDSUBSET(TA_HIGH|TA_LOW) CHECK_FIELDSUBSET(TA_HIGH|TA_CLOSE) CHECK_FIELDSUBSET(TA_HIGH|TA_VOLUME) CHECK_FIELDSUBSET(TA_LOW|TA_CLOSE) CHECK_FIELDSUBSET(TA_LOW|TA_VOLUME) CHECK_FIELDSUBSET(TA_CLOSE|TA_VOLUME) /* One Field */ CHECK_FIELDSUBSET(TA_TIMESTAMP); CHECK_FIELDSUBSET(TA_OPEN); CHECK_FIELDSUBSET(TA_HIGH) CHECK_FIELDSUBSET(TA_LOW) CHECK_FIELDSUBSET(TA_CLOSE) CHECK_FIELDSUBSET(TA_VOLUME) #undef CHECK_FIELDSUBSET /* Clean-up and exit. */ TA_UDBaseFree( unifiedDatabase ); TA_Shutdown(); return TA_SUCCESS; }