rename functions for converting strings to integers to snake case

while here:
- add some functions taking std::string/std::wstring
This commit is contained in:
2022-11-14 03:20:17 +01:00
parent f97c06d441
commit b3137a7607
7 changed files with 317 additions and 62 deletions

View File

@@ -1,15 +1,15 @@
# DO NOT DELETE
./convert.o: convert.h test.h ../src/convert/convert.h
./convert.o: ../src/convert/inttostr.h ../src/convert/patternreplacer.h
./convert.o: ../src/textstream/textstream.h ../src/textstream/stream.h
./convert.o: ../src/space/space.h ../src/textstream/types.h
./convert.o: ../src/convert/inttostr.h ../src/utf8/utf8.h
./convert.o: ../src/textstream/stream.h ../src/utf8/utf8_templates.h
./convert.o: ../src/utf8/utf8_private.h ../src/date/date.h
./convert.o: ../src/membuffer/membuffer.h ../src/textstream/types.h
./convert.o: ../src/convert/strtoint.h ../src/convert/text.h
./convert.o: ../src/convert/misc.h ../src/convert/double.h
./convert.o: convert.h ../src/convert/convert.h ../src/convert/inttostr.h
./convert.o: ../src/convert/patternreplacer.h ../src/textstream/textstream.h
./convert.o: ../src/textstream/stream.h ../src/space/space.h
./convert.o: ../src/textstream/types.h ../src/convert/inttostr.h
./convert.o: ../src/utf8/utf8.h ../src/textstream/stream.h
./convert.o: ../src/utf8/utf8_templates.h ../src/utf8/utf8_private.h
./convert.o: ../src/date/date.h ../src/membuffer/membuffer.h
./convert.o: ../src/textstream/types.h ../src/convert/strtoint.h
./convert.o: ../src/convert/text.h ../src/convert/misc.h
./convert.o: ../src/convert/double.h test.h
./csvparser.o: csvparser.h ../src/csv/csvparser.h ../src/space/space.h
./csvparser.o: ../src/textstream/types.h ../src/convert/inttostr.h
./csvparser.o: ../src/utf8/utf8.h ../src/textstream/stream.h
@@ -17,7 +17,16 @@
./csvparser.o: ../src/convert/baseparser.h ../src/textstream/textstream.h
./csvparser.o: ../src/textstream/stream.h ../src/date/date.h
./csvparser.o: ../src/membuffer/membuffer.h ../src/textstream/types.h test.h
./main.o: convert.h mainoptionsparser.h csvparser.h
./main.o: convert.h ../src/convert/convert.h ../src/convert/inttostr.h
./main.o: ../src/convert/patternreplacer.h ../src/textstream/textstream.h
./main.o: ../src/textstream/stream.h ../src/space/space.h
./main.o: ../src/textstream/types.h ../src/convert/inttostr.h
./main.o: ../src/utf8/utf8.h ../src/textstream/stream.h
./main.o: ../src/utf8/utf8_templates.h ../src/utf8/utf8_private.h
./main.o: ../src/date/date.h ../src/membuffer/membuffer.h
./main.o: ../src/textstream/types.h ../src/convert/strtoint.h
./main.o: ../src/convert/text.h ../src/convert/misc.h ../src/convert/double.h
./main.o: test.h mainoptionsparser.h csvparser.h
./test.o: test.h
./mainoptionsparser.o: mainoptionsparser.h test.h
./mainoptionsparser.o: ../src/mainoptions/mainoptionsparser.h

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2021, Tomasz Sowa
* Copyright (c) 2021-2022, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,8 +34,6 @@
#include <iostream>
#include "convert.h"
#include "test.h"
#include "convert/convert.h"
namespace pt
@@ -1919,6 +1917,181 @@ void test_text46()
}
void test_text47()
{
reset_test_counter("to_ull");
IntegerHelper<unsigned long long> helper_tab[] = {
{L"", 0ULL, 10, L"", false, false},
{L"0", 0ULL, 10, L"", false, false},
{L"00", 0ULL, 10, L"", false, false},
{L"1", 1ULL, 10, L"", false, false},
{L"50", 50ULL, 10, L"", false, false},
{L"050", 50ULL, 10, L"", false, false},
{L"100", 100ULL, 10, L"", false, false},
{L"00100", 100ULL, 10, L"", false, false},
{L"128", 128ULL, 10, L"", false, false},
{L"1000", 1000ULL, 10, L"", false, false},
{L"65535", 65535ULL, 10, L"", false, false},
{L"65536", 65536ULL, 10, L"", false, false},
{L"65537", 65537ULL, 10, L"", false, false},
{L"4294967295", 4294967295ULL, 10, L"", false, false},
{L"4294967296", 4294967296ULL, 10, L"", false, false},
{L"4294967297", 4294967297ULL, 10, L"", false, false},
{L"18446744073709551614", 18446744073709551614ULL, 10, L"", false, false},
{L"18446744073709551615", 18446744073709551615ULL, 10, L"", false, false},
{L" 1024", 0ULL, 10, L" 1024", false, false},
{L" 1024", 1024ULL, 10, L"", false, true},
{L" \t 1024", 0ULL, 10, L" \t 1024", false, false},
{L" \t 1024", 1024ULL, 10, L"", false, true},
{L" 1024foo", 0ULL, 10, L" 1024foo", false, false},
{L" 1024foo", 1024ULL, 10, L"foo", false, true},
{L" \t 1024foo", 0ULL, 10, L" \t 1024foo", false, false},
{L" \t 1024foo", 1024ULL, 10, L"foo", false, true},
{L"", 0ULL, 2, L"", false, false},
{L"0", 0ULL, 2, L"", false, false},
{L"1", 1ULL, 2, L"", false, false},
{L"2", 0ULL, 2, L"2", false, false},
{L"101001011", 0b101001011ULL, 2, L"", false, false},
{L"001011001101", 0b001011001101ULL, 2, L"", false, false},
{L"", 0ULL, 8, L"", false, false},
{L"0", 0ULL, 8, L"", false, false},
{L"1", 1ULL, 8, L"", false, false},
{L"7", 7ULL, 8, L"", false, false},
{L"8", 0ULL, 8, L"8", false, false},
{L"54321760123", 054321760123ULL, 8, L"", false, false},
{L"54012418", 05401241ULL, 8, L"8", false, false},
{L"01256252foo", 01256252ULL, 8, L"foo", false, false},
{L"", 0ULL, 16, L"", false, false},
{L"0", 0ULL, 16, L"", false, false},
{L"9", 9ULL, 16, L"", false, false},
{L"a", 10ULL, 16, L"", false, false},
{L"f", 15ULL, 16, L"", false, false},
{L"g", 0ULL, 16, L"g", false, false},
{L"A", 10ULL, 16, L"", false, false},
{L"F", 15ULL, 16, L"", false, false},
{L"G", 0ULL, 16, L"G", false, false},
{L"FFFF", 0xFFFFULL, 16, L"", false, false},
{L"54FB91", 0x54FB91ULL, 16, L"", false, false},
{L"abcdef00123", 0xabcdef00123ULL, 16, L"", false, false},
{L"0a65bC3aDB1", 0x0a65bC3aDB1ULL, 16, L"", false, false},
{L"0a65bC3aDB1g", 0x0a65bC3aDB1ULL, 16, L"g", false, false},
{L"0a65bC3aDB1G", 0x0a65bC3aDB1ULL, 16, L"G", false, false},
{L"0a65bC3aDB1z", 0x0a65bC3aDB1ULL, 16, L"z", false, false},
{L"0a65bC3aDB1Z", 0x0a65bC3aDB1ULL, 16, L"Z", false, false},
};
size_t len = sizeof(helper_tab) / sizeof(IntegerHelper<unsigned long long>);
make_str_to_int_tests<std::wstring, unsigned long long>(&to_ull, &to_ull, helper_tab, len);
}
void test_text48()
{
reset_test_counter("to_ll");
IntegerHelper<long long> helper_tab[] = {
{L"", 0LL, 10, L"", false, false},
{L"0", 0LL, 10, L"", false, false},
{L"-0", 0LL, 10, L"", false, false},
{L"00", 0LL, 10, L"", false, false},
{L"-00", 0LL, 10, L"", false, false},
{L"100", 100LL, 10, L"", false, false},
{L"-100", -100LL, 10, L"", false, false},
{L"00100", 100LL, 10, L"", false, false},
{L"-00100", -100LL, 10, L"", false, false},
{L"128", 128LL, 10, L"", false, false},
{L"-128", -128LL, 10, L"", false, false},
{L"1000", 1000LL, 10, L"", false, false},
{L"-1000", -1000LL, 10, L"", false, false},
{L"65535", 65535LL, 10, L"", false, false},
{L"65536", 65536LL, 10, L"", false, false},
{L"65537", 65537LL, 10, L"", false, false},
{L"-65535", -65535LL, 10, L"", false, false},
{L"-65536", -65536LL, 10, L"", false, false},
{L"-65537", -65537LL, 10, L"", false, false},
{L"4294967295", 4294967295LL, 10, L"", false, false},
{L"4294967296", 4294967296LL, 10, L"", false, false},
{L"4294967297", 4294967297LL, 10, L"", false, false},
{L"-4294967295", -4294967295LL, 10, L"", false, false},
{L"-4294967296", -4294967296LL, 10, L"", false, false},
{L"-4294967297", -4294967297LL, 10, L"", false, false},
{L"9223372036854775806", 9223372036854775806LL, 10, L"", false, false},
{L"9223372036854775807", 9223372036854775807LL, 10, L"", false, false},
{L"9223372036854775808", 0LL, 10, L"", true, false},
{L"-9223372036854775807", -9223372036854775807LL, 10, L"", false, false},
{L"-9223372036854775808", std::numeric_limits<long long>::min(), 10, L"", false, false}, // gcc and clang not allow -9223372036854775808LL as a literal
{L"-9223372036854775809", 0LL, 10, L"", true, false},
{L"123456789876543210123", 0LL, 10, L"", true, false},
{L"-123456789876543210123", 0LL, 10, L"", true, false},
{L" -1024", 0LL, 10, L" -1024", false, false},
{L" -1024", -1024LL, 10, L"", false, true},
{L" \t -1024", 0LL, 10, L" \t -1024", false, false},
{L" \t -1024", -1024LL, 10, L"", false, true},
{L" -1024foo", 0LL, 10, L" -1024foo", false, false},
{L" -1024foo", -1024LL, 10, L"foo", false, true},
{L" \t -1024foo", 0LL, 10, L" \t -1024foo", false, false},
{L" \t -1024foo", -1024LL, 10, L"foo", false, true},
{L"", 0LL, 2, L"", false, false},
{L"0", 0LL, 2, L"", false, false},
{L"-0", 0LL, 2, L"", false, false},
{L"1", 1LL, 2, L"", false, false},
{L"2", 0LL, 2, L"2", false, false},
{L"-1", -1LL, 2, L"", false, false},
{L"-2", 0LL, 2, L"2", false, false},
{L"-101001011", -0b101001011LL, 2, L"", false, false},
{L"-001011001101", -0b001011001101LL, 2, L"", false, false},
{L"", 0LL, 8, L"", false, false},
{L"0", 0LL, 8, L"", false, false},
{L"-0", 0LL, 8, L"", false, false},
{L"1", 1LL, 8, L"", false, false},
{L"7", 7LL, 8, L"", false, false},
{L"8", 0LL, 8, L"8", false, false},
{L"-1", -1LL, 8, L"", false, false},
{L"-7", -7LL, 8, L"", false, false},
{L"-8", 0LL, 8, L"8", false, false},
{L"54321760123", 054321760123LL, 8, L"", false, false},
{L"54012418", 05401241LL, 8, L"8", false, false},
{L"01256252foo", 01256252LL, 8, L"foo", false, false},
{L"-54321760123", -054321760123LL, 8, L"", false, false},
{L"-54012418", -05401241LL, 8, L"8", false, false},
{L"-01256252foo", -01256252LL, 8, L"foo", false, false},
{L"", 0LL, 16, L"", false, false},
{L"0", 0LL, 16, L"", false, false},
{L"-0", 0LL, 16, L"", false, false},
{L"ab65c", 0xab65cLL, 16, L"", false, false},
{L"-654FEc23", -0x654FEc23LL, 16, L"", false, false},
{L"076af12b", 0x76af12bLL, 16, L"", false, false},
{L"-076de12be", -0x076de12beLL, 16, L"", false, false},
{L"7FFFFFFFFFFFFFFF", 0x7FFFFFFFFFFFFFFFLL, 16, L"", false, false},
{L"8000000000000000", 0LL, 16, L"", true, false},
{L"8000000000000001", 0LL, 16, L"", true, false},
{L"abcdef0123456789", 0LL, 16, L"", true, false},
{L"-7FFFFFFFFFFFFFFF", -0x7FFFFFFFFFFFFFFFLL, 16, L"", false, false},
{L"-8000000000000000", std::numeric_limits<long long>::min(), 16, L"", false, false},
{L"-8000000000000001", 0LL, 16, L"", true, false},
{L"-abcdef0123456789", 0LL, 16, L"", true, false},
};
size_t len = sizeof(helper_tab) / sizeof(IntegerHelper<long long>);
make_str_to_int_tests<std::wstring, long long>(&to_ll, &to_ll, helper_tab, len);
}
// IMPROVEME put integer tests for functions: to_ul(), to_ui(), to_l(), to_i(), to_ull_b(), to_ll_b(), to_ul_b(), to_ui_b(), to_l_b(), to_i_b()
void make_tests()
@@ -1969,6 +2142,8 @@ void make_tests()
test_text44();
test_text45();
test_text46();
test_text47();
test_text48();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2021, Tomasz Sowa
* Copyright (c) 2021-2022, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,12 +35,53 @@
#ifndef headerfile_pikotools_tests_convert
#define headerfile_pikotools_tests_convert
#include "convert/convert.h"
#include "test.h"
namespace pt
{
namespace pt_convert_tests
{
template<typename IntegerType>
struct IntegerHelper {
const wchar_t * val;
IntegerType val_int;
int base;
const wchar_t * after_str;
bool was_overflow;
bool allow_skip_whitechars;
};
template<typename StringType, typename IntegerType>
void make_str_to_int_tests(
IntegerType (*convert_function1)(const typename StringType::value_type *, int, const typename StringType::value_type **, bool *, bool allow_skip_whitechars),
IntegerType (*convert_function2)(const StringType &, int, const typename StringType::value_type **, bool *, bool allow_skip_whitechars),
IntegerHelper<IntegerType> * helper_tab,
size_t len)
{
for(size_t i=0 ; i<len ; ++i)
{
IntegerHelper<IntegerType> & helper = helper_tab[i];
std::wstring str1 = helper.val;
const wchar_t * after;
bool was_overflow;
test(convert_function1(str1.c_str(), helper.base, &after, &was_overflow, helper.allow_skip_whitechars), helper.val_int);
test(helper.after_str, after);
test(helper.was_overflow, was_overflow);
test(convert_function2(str1, helper.base, &after, &was_overflow, helper.allow_skip_whitechars), helper.val_int);
test(helper.after_str, after);
test(helper.was_overflow, was_overflow);
}
}
void make_tests();