From 2741c0b211586925618495eedce77879e7546c4f Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Tue, 14 Jan 2020 22:35:38 +0530 Subject: [PATCH] string: new type conversion functions --- vlib/builtin/string.v | 13 ++- vlib/builtin/string_int_test.v | 159 +++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+), 1 deletion(-) diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 954466a7bd..3fddf841e7 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -298,6 +298,14 @@ pub fn (s string) i64() i64 { return strconv.common_parse_int(s, 0, 64, false, false) } +pub fn (s string) i8() i8 { + return i8(strconv.common_parse_int(s, 0, 8, false, false)) +} + +pub fn (s string) i16() i16 { + return i16(strconv.common_parse_int(s, 0, 16, false, false)) +} + pub fn (s string) f32() f32 { // return C.atof(charptr(s.str)) return f32(strconv.atof64(s)) @@ -308,6 +316,10 @@ pub fn (s string) f64() f64 { return strconv.atof64(s) } +pub fn (s string) u16() u16 { + return u16(strconv.common_parse_uint(s, 0, 16, false, false)) +} + pub fn (s string) u32() u32 { return u32(strconv.common_parse_uint(s, 0, 32, false, false)) } @@ -1201,4 +1213,3 @@ pub fn (s string) repeat(count int) string { ret[s.len * count] = 0 return string(ret) } - diff --git a/vlib/builtin/string_int_test.v b/vlib/builtin/string_int_test.v index 9d5b7df3a6..3428d287ff 100644 --- a/vlib/builtin/string_int_test.v +++ b/vlib/builtin/string_int_test.v @@ -25,3 +25,162 @@ fn test_common_atoi() { assert s.int() == n } } + +fn test_unsigned_cast() { + // tests for u16 + + // test common cases + assert "70zzz".u16() == 70 + assert "2901issue".u16() == 2901 + assert '0y'.u16() == 0 + + // test lead zeros + assert '0000012'.u16() == 12 + assert '0x001F'.u16() == 31 + assert '0x001f'.u16() == 31 + assert '0o00011'.u16() == 9 + assert '0b00001001'.u16() == 9 + + // tests for u32 + + // test common cases + assert "70zzz".u32() == 70 + assert "2901issue".u32() == 2901 + assert '234232w'.u32() == 234232 + assert '-9009x'.u32() == 0 + assert '0y'.u32() == 0 + + // test lead zeros + assert '0000012'.u32() == 12 + assert '-0000012'.u32() == 0 + assert '0x001F'.u32() == 31 + assert '-0x001F'.u32() == 0 + assert '0x001f'.u32() == 31 + assert '0o00011'.u32() == 9 + assert '0b00001001'.u32() == 9 + + // test underscore in string + assert '-10_000'.u32() == 0 + assert '-0x00_0_f_ff'.u32() == 0 + assert '10_000_000'.u32() == 10000000 + + for n in 0 .. 100 { + s := n.str()+"z" + assert s.u32() == n + } + + // tests for u64 + + // test common cases + assert "70zzz".u64() == 70 + assert "2901issue".u64() == 2901 + assert '234232w'.u64() == 234232 + assert '-9009x'.u64() == 0 + assert '0y'.u64() == 0 + + // test lead zeros + assert '0000012'.u64() == 12 + assert '-0000012'.u64() == 0 + assert '0x001F'.u64() == 31 + assert '-0x001F'.u64() == 0 + assert '0x001f'.u64() == 31 + assert '0o00011'.u64() == 9 + assert '0b00001001'.u64() == 9 + + // test underscore in string + assert '-10_000'.u64() == 0 + assert '-0x00_0_f_ff'.u64() == 0 + assert '10_000_000'.u64() == 10000000 + + for n in 0 .. 10000 { + s := n.str()+"z" + assert s.u64() == n + } + +} + +fn test_signed_cast() { + // tests for i64 + + // test common cases + assert "70zzz".i64() == 70 + assert "2901issue".i64() == 2901 + assert '234232w'.i64() == 234232 + assert '-9009x'.i64() == -9009 + assert '0y'.i64() == 0 + + // test lead zeros + assert '0000012'.i64() == 12 + assert '-0000012'.i64() == -12 + assert '0x001F'.i64() == 31 + assert '-0x001F'.i64() == -31 + assert '0x001f'.i64() == 31 + assert '0o00011'.i64() == 9 + assert '0b00001001'.i64() == 9 + + // test underscore in string + assert '-10_000'.i64() == -10000 + assert '-0x00_0_f_ff'.i64() == -0xfff + assert '10_000_000'.i64() == 10000000 + + for n in -10000 .. 100000 { + s := n.str()+"z" + assert s.i64() == n + } + + // tests for i8 + + // test common cases + assert "70zzz".i8() == 70 + assert "29issue".i8() == 29 + assert '22w'.i8() == 22 + assert '-90x'.i8() == -90 + assert '0y'.i8() == 0 + + // test lead zeros + assert '0000012'.i8() == 12 + assert '-0000012'.i8() == -12 + assert '0x001F'.i8() == 31 + assert '-0x001F'.i8() == -31 + assert '0x001f'.i8() == 31 + assert '0o00011'.i8() == 9 + assert '0b000011'.i8() == 3 + + // test underscore in string + assert '-10_0'.i8() == -100 + assert '-0x0_0_f'.i8() == -0xf + assert '10_0'.i8() == 100 + + for n in -10 .. 100 { + s := n.str()+"z" + assert s.i8() == n + } + + // tests for i16 + + // test common cases + assert "70zzz".i16() == 70 + assert "2901issue".i16() == 2901 + assert '2342w'.i16() == 2342 + assert '-9009x'.i16() == -9009 + assert '0y'.i16() == 0 + + // test lead zeros + assert '0000012'.i16() == 12 + assert '-0000012'.i16() == -12 + assert '0x001F'.i16() == 31 + assert '-0x001F'.i16() == -31 + assert '0x001f'.i16() == 31 + assert '0o00011'.i16() == 9 + assert '0b00001001'.i16() == 9 + + // test underscore in string + assert '-10_0'.i16() == -100 + assert '-0x00_0_fff'.i16() == -0xfff + assert '10_0'.i16() == 100 + + for n in -100 .. 100 { + s := n.str()+"z" + assert s.i16() == n + } +}