void gsb_real_cunit__gsb_real_mul( void ) { GsbReal a = { 12, 1 }; GsbReal b = { 31415, 4 }; GsbReal r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( 37698, r.mantissa ); CU_ASSERT_EQUAL ( 4, r.exponent ); a.mantissa = 0x7FFFFFFF; a.exponent = 0; b.mantissa = 2; b.exponent = 0; r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( G_GINT64_CONSTANT(4294967294), r.mantissa ); CU_ASSERT_EQUAL ( 0, r.exponent ); a.mantissa = 0x7FFFFFFF; a.exponent = 0; b.mantissa = 9; b.exponent = 1; r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( 19327352823, r.mantissa ); CU_ASSERT_EQUAL ( 1, r.exponent ); a.mantissa = G_MININT64; a.exponent = 0; b.mantissa = 2; b.exponent = 0; r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( G_MININT64, r.mantissa ); CU_ASSERT_EQUAL ( 0, r.exponent ); a.mantissa = 100; a.exponent = 0; b.mantissa = G_MININT64; b.exponent = 0; r = gsb_real_mul(a, b); CU_ASSERT_EQUAL ( G_MININT64, r.mantissa ); CU_ASSERT_EQUAL ( 0, r.exponent ); a.mantissa = 22000; a.exponent = 0; b.mantissa = 100000; b.exponent = 0; r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( G_GINT64_CONSTANT(2200000000), r.mantissa ); CU_ASSERT_EQUAL ( 0, r.exponent ); a.mantissa = -22000; a.exponent = 0; b.mantissa = 100000; b.exponent = 0; r = gsb_real_mul ( a, b ); CU_ASSERT_EQUAL ( G_GINT64_CONSTANT(-2200000000), r.mantissa ); CU_ASSERT_EQUAL ( 0, r.exponent ); }
/** * calcule le total du contenu de l'entrée donnée en argument * accepte les + et les - * / * * \param entry entrée d'un montant * * \return gsb_real total de ce qui est dans l'entrée */ gsb_real utils_real_get_calculate_entry ( GtkWidget *entry ) { gchar *string; gchar *pointeur; gsb_real total = null_real; string = my_strdup ( gtk_entry_get_text ( GTK_ENTRY ( entry ) ) ); if ( string && strlen ( string ) ) pointeur = string + strlen ( string ); else { if ( string ) g_free ( string ); return total; } if ( g_utf8_strchr ( string, -1, '-' ) || g_utf8_strchr ( string, -1, '+' ) ) { while ( pointeur != string ) { if ( pointeur[0] == '+' || pointeur[0] == '-' ) { total = gsb_real_add ( total, utils_real_get_from_string ( pointeur ) ); pointeur[0] = 0; } pointeur--; } total = gsb_real_add ( total, utils_real_get_from_string ( pointeur ) ); } else if ( g_utf8_strchr ( string, -1, '*' ) ) { total.mantissa = 1; total.exponent = 0; while ( pointeur != string ) { if ( pointeur[0] == '*' ) { total = gsb_real_mul ( total, utils_real_get_from_string ( pointeur + 1 ) ); pointeur[0] = 0; } pointeur--; } total = gsb_real_mul ( total, utils_real_get_from_string ( pointeur ) ); } else if ( g_utf8_strchr ( string, -1, '/' ) ) { gchar **tab; tab = g_strsplit ( string, "/", 2 ); total = gsb_real_div ( utils_real_get_from_string ( tab[0] ), utils_real_get_from_string ( tab[1] ) ); g_strfreev ( tab ); } else total = utils_real_get_from_string ( string ); g_free ( string ); return total; }