map: more tests (#7153)
parent
5a7fdb0610
commit
96d28b4485
|
@ -1,4 +1,67 @@
|
|||
// import time
|
||||
import rand
|
||||
|
||||
const (
|
||||
strings = unique_strings(20000, 10)
|
||||
)
|
||||
|
||||
fn unique_strings(arr_len int, str_len int) []string {
|
||||
mut arr := []string{}
|
||||
for arr.len < arr_len {
|
||||
str := rand.string(str_len)
|
||||
if str !in arr {
|
||||
arr << str
|
||||
}
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
fn test_get_and_set_many() {
|
||||
mut m := map[string]int{}
|
||||
for i, s in strings {
|
||||
m[s] = i
|
||||
assert m[s] == i
|
||||
assert m.len == i + 1
|
||||
}
|
||||
for i, s in strings {
|
||||
assert m[s] == i
|
||||
}
|
||||
assert m.len == strings.len
|
||||
}
|
||||
|
||||
fn test_for_in_many() {
|
||||
mut m := map[string]int{}
|
||||
for i, s in strings {
|
||||
m[s] = i
|
||||
}
|
||||
for k, v in m {
|
||||
assert m[k] == v
|
||||
}
|
||||
}
|
||||
|
||||
fn test_keys_many() {
|
||||
mut m := map[string]int{}
|
||||
for i, s in strings {
|
||||
m[s] = i
|
||||
}
|
||||
keys := m.keys()
|
||||
assert keys.len == strings.len
|
||||
assert keys.len == m.len
|
||||
assert keys == strings
|
||||
}
|
||||
|
||||
fn test_deletes_many() {
|
||||
mut m := map[string]int{}
|
||||
for i, s in strings {
|
||||
m[s] = i
|
||||
}
|
||||
for i, s in strings {
|
||||
m.delete(s)
|
||||
assert m[s] == 0
|
||||
assert m.len == strings.len - (i + 1)
|
||||
}
|
||||
assert m.len == 0
|
||||
assert m.keys().len == 0
|
||||
}
|
||||
|
||||
struct User {
|
||||
mut:
|
||||
|
@ -7,7 +70,7 @@ mut:
|
|||
|
||||
struct Aaa {
|
||||
mut:
|
||||
m map[string]int
|
||||
m map[string]int
|
||||
users map[string]User
|
||||
}
|
||||
|
||||
|
@ -16,7 +79,7 @@ fn (mut a Aaa) set(key string, val int) {
|
|||
}
|
||||
|
||||
fn test_map() {
|
||||
mut m := map[string]int
|
||||
mut m := map[string]int{}
|
||||
assert m.len == 0
|
||||
m['hi'] = 80
|
||||
m['hello'] = 101
|
||||
|
@ -39,18 +102,17 @@ fn test_map() {
|
|||
assert m.len == 1
|
||||
m.delete('aloha')
|
||||
assert m.len == 1
|
||||
|
||||
assert m['hi'] == 0
|
||||
assert m.keys().len == 1
|
||||
assert m.keys()[0] == 'hello'
|
||||
////
|
||||
mut users := map[string]User
|
||||
// //
|
||||
mut users := map[string]User{}
|
||||
users['1'] = User{'Peter'}
|
||||
peter := users['1']
|
||||
assert peter.name == 'Peter'
|
||||
assert peter.name == 'Peter'
|
||||
mut a := Aaa{
|
||||
m: map[string]int
|
||||
users: map[string]User
|
||||
m: map[string]int{}
|
||||
users: map[string]User{}
|
||||
}
|
||||
a.users['Bob'] = User{'Bob'}
|
||||
q := a.users['Bob']
|
||||
|
@ -66,99 +128,86 @@ fn test_map() {
|
|||
}
|
||||
|
||||
fn test_map_init() {
|
||||
m := { 'one': 1, 'two': 2 }
|
||||
m := {
|
||||
'one': 1
|
||||
'two': 2
|
||||
}
|
||||
assert m['one'] == 1
|
||||
assert m['two'] == 2
|
||||
assert m['three'] == 0
|
||||
}
|
||||
|
||||
fn test_string_map() {
|
||||
//m := map[string]Fn
|
||||
// m := map[string]Fn
|
||||
}
|
||||
|
||||
fn test_large_map() {
|
||||
//ticks := time.ticks()
|
||||
mut nums := map[string]int
|
||||
// ticks := time.ticks()
|
||||
mut nums := map[string]int{}
|
||||
n := 30 * 1000
|
||||
for i in 0..n {
|
||||
key := i.str()
|
||||
nums[key] = i
|
||||
for i in 0 .. n {
|
||||
key := i.str()
|
||||
nums[key] = i
|
||||
}
|
||||
assert nums['1'] == 1
|
||||
assert nums['999'] == 999
|
||||
assert nums['1000000'] == 0
|
||||
//println(time.ticks() - ticks)
|
||||
// println(time.ticks() - ticks)
|
||||
}
|
||||
|
||||
fn test_various_map_value() {
|
||||
mut m1 := map[string]int
|
||||
mut m1 := map[string]int{}
|
||||
m1['test'] = 1
|
||||
assert m1['test'] == 1
|
||||
|
||||
mut m2 := map[string]string
|
||||
mut m2 := map[string]string{}
|
||||
m2['test'] = 'test'
|
||||
assert m2['test'] == 'test'
|
||||
|
||||
mut m3 := map[string]i8
|
||||
mut m3 := map[string]i8{}
|
||||
m3['test'] = i8(0)
|
||||
assert m3['test'] == i8(0)
|
||||
|
||||
mut m4 := map[string]i16
|
||||
mut m4 := map[string]i16{}
|
||||
m4['test'] = i16(0)
|
||||
assert m4['test'] == i16(0)
|
||||
|
||||
mut m7 := map[string]u16
|
||||
mut m7 := map[string]u16{}
|
||||
m7['test'] = u16(0)
|
||||
assert m7['test'] == u16(0)
|
||||
|
||||
mut m8 := map[string]u32
|
||||
mut m8 := map[string]u32{}
|
||||
m8['test'] = u32(0)
|
||||
assert m8['test'] == u32(0)
|
||||
|
||||
mut m9 := map[string]bool
|
||||
mut m9 := map[string]bool{}
|
||||
m9['test'] = true
|
||||
assert m9['test'] == true
|
||||
|
||||
mut m10 := map[string]byte
|
||||
mut m10 := map[string]byte{}
|
||||
m10['test'] = byte(0)
|
||||
assert m10['test'] == byte(0)
|
||||
|
||||
mut m11 := map[string]f32
|
||||
mut m11 := map[string]f32{}
|
||||
m11['test'] = f32(0.0)
|
||||
assert m11['test'] == f32(0.0)
|
||||
|
||||
mut m12 := map[string]f64
|
||||
mut m12 := map[string]f64{}
|
||||
m12['test'] = f64(0.0)
|
||||
assert m12['test'] == f64(0.0)
|
||||
|
||||
//mut m13 := map[string]rune
|
||||
//m13['test'] = rune(0)
|
||||
//assert m13['test'] == rune(0)
|
||||
|
||||
mut m14 := map[string]voidptr
|
||||
// mut m13 := map[string]rune
|
||||
// m13['test'] = rune(0)
|
||||
// assert m13['test'] == rune(0)
|
||||
mut m14 := map[string]voidptr{}
|
||||
m14['test'] = voidptr(0)
|
||||
assert m14['test'] == voidptr(0)
|
||||
|
||||
mut m15 := map[string]byteptr
|
||||
mut m15 := map[string]byteptr{}
|
||||
m15['test'] = byteptr(0)
|
||||
assert m15['test'] == byteptr(0)
|
||||
|
||||
mut m16 := map[string]i64
|
||||
mut m16 := map[string]i64{}
|
||||
m16['test'] = i64(0)
|
||||
assert m16['test'] == i64(0)
|
||||
|
||||
mut m17 := map[string]u64
|
||||
mut m17 := map[string]u64{}
|
||||
m17['test'] = u64(0)
|
||||
assert m17['test'] == u64(0)
|
||||
|
||||
mut m18 := map[string]&int
|
||||
mut m18 := map[string]&int{}
|
||||
m18['test'] = &int(0)
|
||||
assert m18['test'] == &int(0)
|
||||
}
|
||||
|
||||
|
||||
fn test_string_arr() {
|
||||
mut m := map[string][]string
|
||||
mut m := map[string][]string{}
|
||||
m['a'] = ['one', 'two']
|
||||
assert m['a'].len == 2
|
||||
assert m['a'][0] == 'one'
|
||||
|
@ -170,14 +219,14 @@ fn mut_map(mut m map[string]int) {
|
|||
}
|
||||
|
||||
fn test_mut_arg() {
|
||||
mut m := map[string]int
|
||||
mut m := map[string]int{}
|
||||
mut_map(mut m)
|
||||
a := m['a']
|
||||
assert a == 10
|
||||
}
|
||||
|
||||
fn test_delete() {
|
||||
mut m := map[string]int
|
||||
mut m := map[string]int{}
|
||||
m['one'] = 1
|
||||
m['two'] = 2
|
||||
println(m['two']) // => "2"
|
||||
|
@ -188,18 +237,18 @@ fn test_delete() {
|
|||
}
|
||||
|
||||
fn test_delete_size() {
|
||||
arr := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
||||
mut m := map[string]int
|
||||
for _ in 0..10 {
|
||||
for i in 0..10 {
|
||||
m[arr[i]] = i
|
||||
}
|
||||
assert(m.len == 10)
|
||||
println(m.len)
|
||||
for i in 0..10 {
|
||||
m.delete(arr[i])
|
||||
}
|
||||
}
|
||||
arr := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
||||
mut m := map[string]int{}
|
||||
for _ in 0 .. 10 {
|
||||
for i in 0 .. 10 {
|
||||
m[arr[i]] = i
|
||||
}
|
||||
assert (m.len == 10)
|
||||
println(m.len)
|
||||
for i in 0 .. 10 {
|
||||
m.delete(arr[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Mstruct1 {
|
||||
|
@ -233,19 +282,20 @@ fn test_map_assign() {
|
|||
's': u16(5)
|
||||
't': 3
|
||||
}
|
||||
_ := Mstruct1 {
|
||||
{ 'p': 12 }
|
||||
}
|
||||
_ := Mstruct2 {
|
||||
{ 'q': 1.7 }
|
||||
}
|
||||
_ := Mstruct3 {
|
||||
{ 'r': u16(6), 's': 5 }
|
||||
}
|
||||
_ := Mstruct1{{
|
||||
'p': 12
|
||||
}}
|
||||
_ := Mstruct2{{
|
||||
'q': 1.7
|
||||
}}
|
||||
_ := Mstruct3{{
|
||||
'r': u16(6)
|
||||
's': 5
|
||||
}}
|
||||
}
|
||||
|
||||
fn test_postfix_op_directly() {
|
||||
mut a := map[string]int
|
||||
mut a := map[string]int{}
|
||||
a['aaa']++
|
||||
assert a['aaa'] == 1
|
||||
a['aaa']++
|
||||
|
@ -257,14 +307,14 @@ fn test_postfix_op_directly() {
|
|||
}
|
||||
|
||||
fn test_map_push_directly() {
|
||||
mut a := map[string][]string
|
||||
mut a := map[string][]string{}
|
||||
a['aaa'] << ['a', 'b', 'c']
|
||||
assert a['aaa'].len == 3
|
||||
assert a['aaa'] == ['a', 'b', 'c']
|
||||
}
|
||||
|
||||
fn test_assign_directly() {
|
||||
mut a := map[string]int
|
||||
mut a := map[string]int{}
|
||||
a['aaa'] += 4
|
||||
assert a['aaa'] == 4
|
||||
a['aaa'] -= 2
|
||||
|
@ -272,21 +322,28 @@ fn test_assign_directly() {
|
|||
}
|
||||
|
||||
fn test_map_in_directly() {
|
||||
for k, v in {'aa': 1} {
|
||||
for k, v in {
|
||||
'aa': 1
|
||||
} {
|
||||
assert k == 'aa'
|
||||
assert v == 1
|
||||
}
|
||||
}
|
||||
|
||||
fn test_plus_assign_string() {
|
||||
mut m := {'one': ''}
|
||||
mut m := {
|
||||
'one': ''
|
||||
}
|
||||
m['one'] += '1'
|
||||
assert m.len == 1
|
||||
assert m['one'] == '1'
|
||||
}
|
||||
|
||||
fn test_map_keys_to_array() {
|
||||
m := {'a': 'b', 'c': 'd'}
|
||||
m := {
|
||||
'a': 'b'
|
||||
'c': 'd'
|
||||
}
|
||||
mut arr := []string{}
|
||||
for k, _ in m {
|
||||
arr << k
|
||||
|
@ -303,7 +360,9 @@ fn map_in_mut(mut m map[string]int) {
|
|||
}
|
||||
|
||||
fn test_map_in_mut() {
|
||||
mut m := {'one': 1}
|
||||
mut m := {
|
||||
'one': 1
|
||||
}
|
||||
map_in_mut(mut m)
|
||||
assert m['one'] == 2
|
||||
}
|
||||
|
@ -330,7 +389,10 @@ fn mut_map_with_relation_op_in_fn(mut m map[string]int) {
|
|||
}
|
||||
|
||||
fn test_mut_map_with_relation_op_in_fn() {
|
||||
mut m := {'one':1, 'two':2}
|
||||
mut m := {
|
||||
'one': 1
|
||||
'two': 2
|
||||
}
|
||||
mut_map_with_relation_op_in_fn(mut m)
|
||||
assert 'three' in m
|
||||
assert 'four' in m
|
||||
|
@ -342,20 +404,23 @@ fn test_mut_map_with_relation_op_in_fn() {
|
|||
|
||||
fn test_map_str_after_delete() {
|
||||
mut m := {
|
||||
'first': 1,
|
||||
'second': 2,
|
||||
'third': 3,
|
||||
'first': 1
|
||||
'second': 2
|
||||
'third': 3
|
||||
}
|
||||
osm := '$m'
|
||||
m.delete('second')
|
||||
nsm := '$m'
|
||||
println('m: $m')
|
||||
println('m: $m')
|
||||
assert osm == "{'first': 1, 'second': 2, 'third': 3}"
|
||||
assert nsm == "{'first': 1, 'third': 3}"
|
||||
}
|
||||
|
||||
fn test_modify_map_value() {
|
||||
mut m1 := {'foo': 3, 'bar': -7}
|
||||
mut m1 := {
|
||||
'foo': 3
|
||||
'bar': -7
|
||||
}
|
||||
m1['foo'] += 5
|
||||
m1['bar'] *= -2
|
||||
assert m1['foo'] == 8
|
||||
|
|
Loading…
Reference in New Issue