diff --git a/compiler/main.v b/compiler/main.v index 090490800e..c0cf57f81c 100644 --- a/compiler/main.v +++ b/compiler/main.v @@ -818,7 +818,6 @@ fn new_v(args[]string) *V { dir: dir lang_dir: vroot table: new_table(obfuscate) - out_name: out_name out_name_c: out_name_c cgen: new_cgen(out_name_c) vroot: vroot diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index fbc2804342..1b31a822ec 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -321,7 +321,7 @@ pub fn (s string) left(n int) string { } return s.substr(0, n) } - +// 'hello'.right(2) => 'llo' pub fn (s string) right(n int) string { if n >= s.len { return '' @@ -447,6 +447,9 @@ pub fn (s string) count(substr string) int { if s.len == 0 || substr.len == 0 { return 0 } + if substr.len > s.len { + return 0 + } mut n := 0 mut i := 0 for { @@ -480,7 +483,7 @@ pub fn (s string) ends_with(p string) bool { // TODO only works with ASCII pub fn (s string) to_lower() string { - mut b := malloc(s.len)// TODO + 1 ?? + mut b := malloc(s.len + 1) for i := 0; i < s.len; i++ { b[i] = C.tolower(s.str[i]) } @@ -488,13 +491,31 @@ pub fn (s string) to_lower() string { } pub fn (s string) to_upper() string { - mut b := malloc(s.len)// TODO + 1 ?? + mut b := malloc(s.len + 1) for i := 0; i < s.len; i++ { b[i] = C.toupper(s.str[i]) } return tos(b, s.len) } +pub fn (s string) capitalize() string { + sl := s.to_lower() + cap := sl[0].str().to_upper() + sl.right(1) + return cap +} + +pub fn (s string) title() string { + words := s.split(' ') + mut tit := []string + + for word in words { + tit << word.capitalize() + } + title := tit.join(' ') + + return title +} + // 'hey [man] how you doin' // find_between('[', ']') == 'man' pub fn (s string) find_between(start, end string) string { diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index 2970eee29f..af17648dad 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -39,12 +39,12 @@ fn test_lt() { d := 'b' e := 'aa' f := 'ab' - assert a<(b) - assert !(b=(a) - assert c>=(b) - assert d>=(c) - assert !(c>=d) - assert e>=(a) + assert b >= (a) + assert c >= (b) + assert d >= (c) + assert !(c >= d) + assert e >= (a) } fn test_compare_strings() { @@ -91,15 +91,15 @@ fn test_split() { mut s := 'volt/twitch.v:34' mut vals := s.split(':') assert vals.len == 2 - assert vals[0]== 'volt/twitch.v' - assert vals[1]== '34' - // ///////// + assert vals[0] == 'volt/twitch.v' + assert vals[1] == '34' + // ///////// s = '2018-01-01z13:01:02' vals = s.split('z') assert vals.len == 2 - assert vals[0]=='2018-01-01' - assert vals[1]== '13:01:02' - // ///////////// + assert vals[0] =='2018-01-01' + assert vals[1] == '13:01:02' + // ////////// s = '4627a862c3dec29fb3182a06b8965e0025759e18___1530207969___blue' vals = s.split('___') assert vals.len == 3 @@ -214,7 +214,6 @@ fn test_runes() { assert u.substr(1, 2) == 'р' assert s2.ustring().at(1) == 'r' assert u.at(1) == 'р' - // /////// first := u.at(0) last := u.at(u.len - 1) assert first.len == 2 @@ -236,6 +235,22 @@ fn test_lower() { assert s.to_lower() == 'hi' } +fn test_upper() { + mut s := 'a' + assert s.to_upper() == 'A' + assert s.to_upper().len == 1 + s = 'hello' + assert s.to_upper() == 'HELLO' + assert s.to_upper().len == 5 + s = 'Aloha' + assert s.to_upper() == 'ALOHA' + s = 'have a nice day!' + assert s.to_upper() == 'HAVE A NICE DAY!' + s = 'hi' + assert s.to_upper() == 'HI' + +} + fn test_left_right() { s := 'ALOHA' assert s.left(3) == 'ALO' @@ -355,3 +370,21 @@ fn test_count() { assert 'aabbaa'.count('aa') == 2 assert 'bbaabb'.count('aa') == 1 } + +fn test_capitalize() { + mut s := 'hello' + assert s.capitalize() == 'Hello' + s = 'test' + assert s.capitalize() == 'Test' + s = 'i am ray' + assert s.capitalize() == 'I am ray' +} + +fn test_title() { + mut s := 'hello world' + assert s.title() == 'Hello World' + s.to_upper() + assert s.title() == 'Hello World' + s.to_lower() + assert s.title() == 'Hello World' +} diff --git a/vlib/math/stats/stats.v b/vlib/math/stats/stats.v index ea2584d6b4..538366c548 100644 --- a/vlib/math/stats/stats.v +++ b/vlib/math/stats/stats.v @@ -2,6 +2,8 @@ module stats import math +// TODO: Implement all of them with generics + // This module defines the following statistical operations on f64 array // --------------------------- // | Summary of Functions |