| 1 | fn mod_map(shared m map[string]f64) { |
| 2 | lock m { |
| 3 | m['y'] = 6.5 |
| 4 | m['op'] = -13.0625 |
| 5 | } |
| 6 | } |
| 7 | |
| 8 | fn mod_array(shared a []f64) { |
| 9 | lock a { |
| 10 | a[5] = -13.5 |
| 11 | a[7] = 167.125 |
| 12 | } |
| 13 | } |
| 14 | |
| 15 | fn test_array_map_ref() { |
| 16 | // test initialization |
| 17 | mut m := map[string]int{} |
| 18 | mut m_ref := &map[string]f64{} |
| 19 | mut a := []int{len: 10} |
| 20 | mut a_ref := &[]f64{len: 2, cap: 12} |
| 21 | shared m_shared := &map[string]f64{} |
| 22 | shared a_shared := &[]f64{len: 9, cap: 12} |
| 23 | // test usage |
| 24 | m['a'] = 3 |
| 25 | unsafe { |
| 26 | m_ref['b'] = 12.25 |
| 27 | } |
| 28 | a << 67 |
| 29 | a << 45 |
| 30 | assert a.len == 12 |
| 31 | a_ref << 73 |
| 32 | a_ref << 12 |
| 33 | a_ref << 8 |
| 34 | unsafe { |
| 35 | a_ref[1] = 17 |
| 36 | } |
| 37 | assert a_ref.len == 5 |
| 38 | t1 := spawn mod_map(shared m_shared) |
| 39 | t2 := spawn mod_array(shared a_shared) |
| 40 | lock m_shared, a_shared { |
| 41 | a_shared[4] = -12.25 |
| 42 | m_shared['tz'] = 73.75 |
| 43 | } |
| 44 | t1.wait() |
| 45 | t2.wait() |
| 46 | rlock m_shared { |
| 47 | assert m_shared['y'] == 6.5 |
| 48 | assert m_shared['op'] == -13.0625 |
| 49 | assert m_shared['tz'] == 73.75 |
| 50 | } |
| 51 | rlock a_shared { |
| 52 | assert a_shared[4] == -12.25 |
| 53 | assert a_shared[5] == -13.5 |
| 54 | assert a_shared[7] == 167.125 |
| 55 | } |
| 56 | } |
| 57 | |