00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifdef HAVE_CONFIG_H
00027 # include <config.h>
00028 #endif
00029
00030
00036
00039
00040
00041
00042 #include <xsh_utils.h>
00043 #include <xsh_error.h>
00044 #include <xsh_msg.h>
00045 #include <tests.h>
00046 #include <cpl.h>
00047 #include <math.h>
00048 #include <time.h>
00049 #include <sys/time.h>
00050
00051
00052
00053 #define MODULE_ID "XSH_TOOLS_PERF"
00054
00055
00061
00062 void test_tech_eval_perf(int indice, double val);
00063
00064 int main( int argc, char** argv)
00065 {
00066 int ret = 0;
00067
00068 TESTS_INIT( MODULE_ID);
00069 cpl_msg_set_level( CPL_MSG_DEBUG);
00070 xsh_debug_level_set( XSH_DEBUG_LEVEL_MEDIUM) ;
00071 check( test_tech_eval_perf(500, 0.264879));
00072 cleanup:
00073 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00074 xsh_error_dump(CPL_MSG_ERROR);
00075 ret = 1;
00076 }
00077 TEST_END();
00078 return ret;
00079 }
00080
00081
00082 void test_tech_eval_perf(int indice, double val){
00083 struct timeval start, end;
00084 double diff_time;
00085 cpl_vector* result_a = NULL;
00086 cpl_vector* result_b = NULL;
00087 int i=0;
00088
00089 xsh_msg("Test Tchebitchev polynomial eval with indice %d and val %f",
00090 indice, val);
00091 xsh_msg("Acos use");
00092 gettimeofday(&start, NULL);
00093 result_a = cpl_vector_new( indice+1);
00094 for(i=0; i<= indice; i++){
00095 double sval = cos(i*acos(val));
00096 cpl_vector_set( result_a, i, sval);
00097 }
00098 gettimeofday(&end, NULL);
00099 diff_time = (end.tv_sec - start.tv_sec)*1000000.0 + (end.tv_usec - start.tv_usec);
00100 xsh_msg("Time %.2lf micro seconds\n", diff_time);
00101
00102 xsh_msg("Iterative use");
00103 gettimeofday(&start, NULL);
00104 check( result_b = xsh_tools_tchebitchev_poly_eval( indice, val));
00105 gettimeofday(&end, NULL);
00106 diff_time = (end.tv_sec - start.tv_sec)*1000000.0 + (end.tv_usec - start.tv_usec);
00107 xsh_msg("Time %.2lf micro seconds\n", diff_time);
00108 for(i=0; i< indice+1; i++){
00109 double a, b;
00110 a = cpl_vector_get( result_a,i);
00111 b = cpl_vector_get( result_b,i);
00112 XSH_ASSURE_NOT_ILLEGAL( fabs(a-b) < 0.0000001 );
00113 }
00114 cleanup:
00115 xsh_free_vector( &result_a);
00116 xsh_free_vector( &result_b);
00117 return;
00118 }