return to_return;
}
+//#pragma temporary debug in astring!!!
+//#define DEBUG_STRING
+
astring &astring::base_sprintf(const char *initial, va_list &args)
{
+#ifdef DEBUG_STRING
+ printf("base_sprintf entry, format string is: %s\n", initial);
+#endif
reset();
if (!initial) return *this; // skip null strings.
if (!initial[0]) return *this; // skip empty strings.
// thanks for the inspiration to k&r page 156.
for (const char *traverser = initial; *traverser; traverser++) {
#ifdef DEBUG_STRING
- printf("index=%d, char=%c\n", traverser - initial, *traverser);
+ printf("index=%d, char=%c\n", int(traverser - initial), *traverser);
#endif
if (*traverser != '%') {
}
traverser++; // go to the next character.
#ifdef DEBUG_STRING
- printf("index=%d, char=%c\n", traverser - initial, *traverser);
+ printf("index=%d, char=%c\n", int(traverser - initial), *traverser);
#endif
if (*traverser == '%') {
// capture the "%%" style format specifier.
#endif
}
+//#undef DEBUG_STRING
+
void astring::get_type_character(const char * &traverser, va_list &args,
astring &output_string, const char *flag_chars, const char *width_chars,
const char *precision_chars, const char *modifier_chars)
class math_ops
{
public:
+ typedef signed long long fat_int;
+
//! returns the rounded integer value for "to_round".
- static int round_it(float to_round)
+ static fat_int round_it(float to_round)
{
- int to_return = int(to_round);
+ fat_int to_return = fat_int(to_round);
// this uses a simplistic view of rounding.
if (to_round - float(to_return) > 0.5) to_return++;
return to_return;
}
//! returns the rounded integer value for "to_round".
- static int round_it(double to_round)
+ static fat_int round_it(double to_round)
{
- int to_return = int(to_round);
+ fat_int to_return = fat_int(to_round);
// this uses a simplistic view of rounding.
if (to_round - double(to_return) > 0.5) to_return++;
return to_return;
#define LOG(s) CLASS_EMERGENCY_LOG(program_wide_logger::get(), s)
+#define UNWANTED_DEFAULT_VALUE 9949494.3
+
HOOPLE_STARTUP_CODE;
using namespace basis;
//hmmm: ugly old main() without using the hoople machinery. ack.
astring static_class_name() { return "test_ini_configurator"; }
+#define MACRO_AS_STRING(s) #s
+
int main(int formal(argc), char *formal(argv)[])
{
FUNCDEF("test ini config main")
frunkle def_frunkle(3.14159265358);
astring def_text(astring::SPRINTF, "%f", def_frunkle.value());
ini.store(INI_SECTION, TEST_NAME, def_text);
- astring found_string = ini.load(INI_SECTION, TEST_NAME, "9949494.3");
+ astring found_string = ini.load(INI_SECTION, TEST_NAME, MACRO_AS_STRING(UNWANTED_DEFAULT_VALUE));
frunkle found_frunkle = found_string.convert(0.0);
- if (found_frunkle == frunkle(9949494.3))
+ if (found_frunkle == frunkle(UNWANTED_DEFAULT_VALUE))
deadly_error(INI_SECTION, TEST_NAME,
"ini_configurator load failed: default was used");
if (found_frunkle != def_frunkle)
{
// fourth test set.
const char *TEST_NAME = "fourth test: frunkle";
- frunkle def_frunkle(1487335673.1415926535834985987);
- astring def_text(astring::SPRINTF, "%f", def_frunkle.value());
+ frunkle def_frunkle((double)1487335673.1415926535834985987);
+ astring def_text(astring::SPRINTF, "%f", def_frunkle.value());
+LOG(astring("def text is ") + def_text);
+double comparator = 1487335673.1415926535834985987;
+LOG(a_sprintf("starting from double gets %f instead", comparator));
+
ini.store("test", "frunkle_test", def_text);
- astring found_string = ini.load("test", "frunkle_test", "9949494.3");
+ astring found_string = ini.load("test", "frunkle_test", MACRO_AS_STRING(UNWANTED_DEFAULT_VALUE));
+
+LOG(astring("found string is ") + found_string);
+
frunkle found_frunkle = found_string.convert(0.0);
- if (found_frunkle == frunkle(9949494.3))
+ if (found_frunkle == frunkle(0.0))
+ deadly_error(INI_SECTION, TEST_NAME,
+ "ini_configurator load failed: float conversion failed--got zero");
+
+LOG(astring("found number ") + a_sprintf("%f", found_frunkle.value()) + " which we want to be " + a_sprintf("%f", def_frunkle.value()));
+
+ if (found_frunkle == frunkle(UNWANTED_DEFAULT_VALUE))
deadly_error(INI_SECTION, TEST_NAME,
- "ini_configurator load failed: wrong default was used");
+ "ini_configurator load failed: wrong unwanted default was used");
if (found_frunkle != def_frunkle)
deadly_error(INI_SECTION, TEST_NAME,
"ini_configurator load failed: saved value differed");