github.com/hirochachacha/plua@v0.0.0-20170217012138-c82f520cc725/internal/tables/map_test.go (about) 1 package tables 2 3 import ( 4 "testing" 5 "testing/quick" 6 7 "github.com/hirochachacha/plua/object" 8 ) 9 10 func TestMap(t *testing.T) { 11 f := func(mm map[object.Integer]object.Integer) bool { 12 m := newMap() 13 14 l := 0 15 if m.Len() != l { 16 return false 17 } 18 19 for k, v := range mm { 20 m.Set(k, v) 21 22 l++ 23 24 if m.Len() != l { 25 return false 26 } 27 } 28 29 var pkey object.Value 30 var key object.Value 31 var val object.Value 32 for { 33 key, val, _ = m.Next(pkey) 34 if val == nil { 35 break 36 } 37 38 k1, v1, _ := m.Next(pkey) 39 if key != k1 || val != v1 { 40 return false 41 } 42 43 if m.Get(key) != val { 44 return false 45 } 46 47 ikey := key.(object.Integer) 48 ival := val.(object.Integer) 49 50 if mm[ikey] != ival { 51 return false 52 } 53 54 delete(mm, ikey) 55 56 if m.Len() != l { 57 return false 58 } 59 60 pkey = key 61 } 62 63 if len(mm) != 0 { 64 return false 65 } 66 67 return true 68 } 69 70 if err := quick.Check(f, nil); err != nil { 71 t.Error(err) 72 } 73 } 74 75 func TestConcurrentMap(t *testing.T) { 76 f := func(mm map[object.Integer]object.Integer) bool { 77 m := newConcurrentMap() 78 79 l := 0 80 if m.Len() != l { 81 return false 82 } 83 84 for k, v := range mm { 85 m.Set(k, v) 86 87 l++ 88 89 if m.Len() != l { 90 return false 91 } 92 } 93 94 var pkey object.Value 95 var key object.Value 96 var val object.Value 97 for { 98 key, val, _ = m.Next(pkey) 99 if val == nil { 100 break 101 } 102 103 k1, v1, _ := m.Next(pkey) 104 if key != k1 || val != v1 { 105 return false 106 } 107 108 if m.Get(key) != val { 109 return false 110 } 111 112 ikey := key.(object.Integer) 113 ival := val.(object.Integer) 114 115 if mm[ikey] != ival { 116 return false 117 } 118 119 delete(mm, ikey) 120 121 if m.Len() != l { 122 return false 123 } 124 125 pkey = key 126 } 127 128 if len(mm) != 0 { 129 return false 130 } 131 132 return true 133 } 134 135 if err := quick.Check(f, nil); err != nil { 136 t.Error(err) 137 } 138 }