static void test_To_I64(TestBatchRunner *runner) { String *string; string = S_get_str("10"); TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64"); DECREF(string); string = S_get_str("-10"); TEST_TRUE(runner, Str_To_I64(string) == -10, "To_I64 negative"); DECREF(string); string = S_get_str("10."); TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64 stops at non-digits"); DECREF(string); string = S_get_str("10A"); TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64 stops at out-of-range digits"); DECREF(string); string = S_get_str("-JJ"); TEST_TRUE(runner, Str_BaseX_To_I64(string, 20) == -399, "BaseX_To_I64 base 20"); DECREF(string); }
uint64_t IxFileNames_extract_gen(String *name) { StringIterator *iter = Str_Top(name); // Advance past first underscore. Bail if we run out of string or if we // encounter a NULL. while (1) { int32_t code_point = StrIter_Next(iter); if (code_point == STR_OOB) { return 0; } else if (code_point == '_') { break; } } String *num_string = StrIter_crop(iter, NULL); uint64_t retval = (uint64_t)Str_BaseX_To_I64(num_string, 36); DECREF(num_string); DECREF(iter); return retval; }
int64_t Str_To_I64_IMP(String *self) { return Str_BaseX_To_I64(self, 10); }