Consume a number from the input without converting it. Argument
'fp' enables floating-point consumption. Supports hex input for
numbers which are prefixed appropriately
Since version 0.99.9
Examples:
char[64] tmp;
assert (toInt("1") is 1);
assert (toLong("1") is 1);
assert (toInt("1", 10) is 1);
assert (toLong("1", 10) is 1);
assert (toUlong("1", 10) is 1);
assert (toUlong("18446744073709551615") is ulong.max);
assert (atoi ("12345") is 12345);
assert (itoa (tmp, 12345) == "12345");
assert(parse( "0"w ) == 0 );
assert(parse( "1"w ) == 1 );
assert(parse( "-1"w ) == -1 );
assert(parse( "+1"w ) == 1 );
// numerical limits
assert(parse( "-2147483648" ) == int.min );
assert(parse( "2147483647" ) == int.max );
assert(parse( "4294967295" ) == uint.max );
assert(parse( "-9223372036854775808" ) == long.min );
assert(parse( "9223372036854775807" ) == long.max );
assert(parse( "18446744073709551615" ) == ulong.max );
// hex
assert(parse( "a", 16) == 0x0A );
assert(parse( "b", 16) == 0x0B );
assert(parse( "c", 16) == 0x0C );
assert(parse( "d", 16) == 0x0D );
assert(parse( "e", 16) == 0x0E );
assert(parse( "f", 16) == 0x0F );
assert(parse( "A", 16) == 0x0A );
assert(parse( "B", 16) == 0x0B );
assert(parse( "C", 16) == 0x0C );
assert(parse( "D", 16) == 0x0D );
assert(parse( "E", 16) == 0x0E );
assert(parse( "F", 16) == 0x0F );
assert(parse( "FFFF", 16) == ushort.max );
assert(parse( "ffffFFFF", 16) == uint.max );
assert(parse( "ffffFFFFffffFFFF", 16u ) == ulong.max );
// oct
assert(parse( "55", 8) == octal!(55) );
assert(parse( "100", 8) == octal!(100) );
// bin
assert(parse( "10000", 2) == 0x10 );
// trim
assert(parse( " \t20") == 20 );
assert(parse( " \t-20") == -20 );
assert(parse( "- \t 20") == -20 );
// recognise radix prefix
assert(parse( "0xFFFF" ) == ushort.max );
assert(parse( "0XffffFFFF" ) == uint.max );
assert(parse( "0o55") == octal!(55) );
assert(parse( "0O55" ) == octal!(55) );
assert(parse( "0b10000") == 0x10 );
assert(parse( "0B10000") == 0x10 );
// prefix tests
auto str = "0x";
assert(parse( str[0..1] ) == 0 );
assert(parse("0x10", 10) == 0);
assert(parse("0b10", 10) == 0);
assert(parse("0o10", 10) == 0);
assert(parse("0b10") == 0b10);
assert(parse("0o10") == octal!(10));
assert(parse("0b10", 2) == 0b10);
assert(parse("0o10", 8) == octal!(10));
// revised tests
assert (format(tmp, 10, "d") == "10");
assert (format(tmp, -10, "d") == "-10");
assert (format(tmp, 10L, "u") == "10");
assert (format(tmp, 10L, "U") == "10");
assert (format(tmp, 10L, "g") == "10");
assert (format(tmp, 10L, "G") == "10");
assert (format(tmp, 10L, "o") == "12");
assert (format(tmp, 10L, "O") == "12");
assert (format(tmp, 10L, "b") == "1010");
assert (format(tmp, 10L, "B") == "1010");
assert (format(tmp, 10L, "x") == "a");
assert (format(tmp, 10L, "X") == "A");
assert (format(tmp, 10L, "d+") == "+10");
assert (format(tmp, 10L, "d ") == " 10");
assert (format(tmp, 10L, "d#") == "10");
assert (format(tmp, 10L, "x#") == "0xa");
assert (format(tmp, 10L, "X#") == "0XA");
assert (format(tmp, 10L, "b#") == "0b1010");
assert (format(tmp, 10L, "o#") == "0o12");
assert (format(tmp, 10L, "d1") == "10");
assert (format(tmp, 10L, "d8") == "00000010");
assert (format(tmp, 10L, "x8") == "0000000a");
assert (format(tmp, 10L, "X8") == "0000000A");
assert (format(tmp, 10L, "b8") == "00001010");
assert (format(tmp, 10L, "o8") == "00000012");
assert (format(tmp, 10L, "d1#") == "10");
assert (format(tmp, 10L, "d6#") == "000010");
assert (format(tmp, 10L, "x6#") == "0x00000a");
assert (format(tmp, 10L, "X6#") == "0X00000A");
char[8] tmp1;
assert (format(tmp1, 10L, "b12#") == "0b001010");
assert (format(tmp1, 10L, "o12#") == "0o000012");