/**** Global functions definitions. ****/ ErrorNumber allocLib( TA_UDBase **uDBasePtr ) { TA_InitializeParam initializeParam; TA_RetCode retCode; TA_UDBase *uDBase; /* Initialize the library. */ memset( &initializeParam, 0, sizeof( TA_InitializeParam ) ); initializeParam.logOutput = stdout; retCode = TA_Initialize( &initializeParam ); if( retCode != TA_SUCCESS ) { printf( "TA_Initialize failed [%d]\n", retCode ); return TA_TESTUTIL_INIT_FAILED; } /* Install a fatal error handler. */ retCode = TA_SetFatalErrorHandler( myFatalHandler ); if( retCode != TA_SUCCESS ) { printf( "TA_SetFatalErrorHandler failed [%d]\n", retCode ); TA_Shutdown(); return TA_TESTUTIL_SET_FATAL_ERROR_FAILED; } /* Create an unified database. */ retCode = TA_UDBaseAlloc( &uDBase ); if( retCode != TA_SUCCESS ) { printf( "TA_UDBaseAlloc failed [%d]\n", retCode ); TA_Shutdown(); return TA_TESTUTIL_UDBASE_ALLOC_FAILED; } *uDBasePtr = uDBase; 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; }