From 2be852e4615781cf86ced8f755ea4575adaf7027 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Sat, 20 Feb 2021 13:27:36 +0000 Subject: [PATCH] arrays: use for/in instead of unsafe `[direct_array_access]` (#8857) --- vlib/arrays/arrays.v | 32 ++++++++++++++------------------ vlib/arrays/arrays_test.v | 23 ----------------------- vlib/v/tests/fixed_array_test.v | 22 ++++++++++++++++++++++ 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/vlib/arrays/arrays.v b/vlib/arrays/arrays.v index 180d0708ab..c83022c4d8 100644 --- a/vlib/arrays/arrays.v +++ b/vlib/arrays/arrays.v @@ -6,46 +6,43 @@ module arrays // - merge - combine two sorted arrays and maintain sorted order // min returns the minimum -[direct_array_access] pub fn min(a []T) T { if a.len == 0 { panic('.min called on an empty array') } mut val := a[0] - for i in 0 .. a.len { - if a[i] < val { - val = a[i] + for e in a { + if e < val { + val = e } } return val } // max returns the maximum -[direct_array_access] pub fn max(a []T) T { if a.len == 0 { panic('.max called on an empty array') } mut val := a[0] - for i in 0 .. a.len { - if a[i] > val { - val = a[i] + for e in a { + if e > val { + val = e } } return val } // idx_min returns the index of the first minimum -[direct_array_access] pub fn idx_min(a []T) int { if a.len == 0 { - panic('.idxmin called on an empty array') + panic('.idx_min called on an empty array') } mut idx := 0 mut val := a[0] - for i in 0 .. a.len { - if a[i] < val { - val = a[i] + for i, e in a { + if e < val { + val = e idx = i } } @@ -53,16 +50,15 @@ pub fn idx_min(a []T) int { } // idx_max returns the index of the first maximum -[direct_array_access] pub fn idx_max(a []T) int { if a.len == 0 { - panic('.idxmax called on an empty array') + panic('.idx_max called on an empty array') } mut idx := 0 mut val := a[0] - for i in 0 .. a.len { - if a[i] > val { - val = a[i] + for i, e in a { + if e > val { + val = e idx = i } } diff --git a/vlib/arrays/arrays_test.v b/vlib/arrays/arrays_test.v index cec1df6482..37d2cd314d 100644 --- a/vlib/arrays/arrays_test.v +++ b/vlib/arrays/arrays_test.v @@ -1,7 +1,5 @@ module arrays -import rand - fn test_min() { a := [8, 2, 6, 4] assert min(a) == 2 @@ -54,24 +52,3 @@ fn test_merge() { assert merge(a, c) == a assert merge(d, b) == b } - -fn test_fixed_array_assignment() { - mut a := [2]int{} - a[0] = 111 - a[1] = 222 - b := a - assert b[0] == a[0] - assert b[1] == a[1] - mut c := [2]int{} - c = a - assert c[0] == a[0] - assert c[1] == a[1] - d := [3]int{init: 333} - for val in d { - assert val == 333 - } - e := [3]string{init: 'vlang'} - for val in e { - assert val == 'vlang' - } -} diff --git a/vlib/v/tests/fixed_array_test.v b/vlib/v/tests/fixed_array_test.v index d31c726c5d..843a2c3ead 100644 --- a/vlib/v/tests/fixed_array_test.v +++ b/vlib/v/tests/fixed_array_test.v @@ -18,6 +18,27 @@ fn test_fixed_array_can_be_assigned() { assert v[1] == 3.0 } +fn test_fixed_array_assignment() { + mut a := [2]int{} + a[0] = 111 + a[1] = 222 + b := a + assert b[0] == a[0] + assert b[1] == a[1] + mut c := [2]int{} + c = a + assert c[0] == a[0] + assert c[1] == a[1] + d := [3]int{init: 333} + for val in d { + assert val == 333 + } + e := [3]string{init: 'vlang'} + for val in e { + assert val == 'vlang' + } +} + fn test_fixed_array_can_be_used_in_declaration() { x := 2.32 v := [1.0, x, 3.0,4.0,5.0,6.0,7.0,8.0]! @@ -99,3 +120,4 @@ fn test_for_in_fixed_array() { arr := [1,2,3]! calc_size(arr) } +