|
143 | 143 | QUnit.test('uniq', function(assert) { |
144 | 144 | var list = [1, 2, 1, 3, 1, 4]; |
145 | 145 | assert.deepEqual(_.uniq(list), [1, 2, 3, 4], 'can find the unique values of an unsorted array'); |
146 | | - |
147 | 146 | list = [1, 1, 1, 2, 2, 3]; |
148 | 147 | assert.deepEqual(_.uniq(list, true), [1, 2, 3], 'can find the unique values of a sorted array faster'); |
149 | 148 |
|
150 | | - list = [{name: 'moe'}, {name: 'curly'}, {name: 'larry'}, {name: 'curly'}]; |
151 | | - var iterator = function(value) { return value.name; }; |
152 | | - assert.deepEqual(_.map(_.uniq(list, false, iterator), iterator), ['moe', 'curly', 'larry'], 'can find the unique values of an array using a custom iterator'); |
153 | | - |
154 | | - assert.deepEqual(_.map(_.uniq(list, iterator), iterator), ['moe', 'curly', 'larry'], 'can find the unique values of an array using a custom iterator without specifying whether array is sorted'); |
155 | | - |
156 | | - iterator = function(value) { return value + 1; }; |
157 | | - list = [1, 2, 2, 3, 4, 4]; |
158 | | - assert.deepEqual(_.uniq(list, true, iterator), [1, 2, 3, 4], 'iterator works with sorted array'); |
159 | | - |
160 | | - var kittens = [ |
161 | | - {kitten: 'Celery', cuteness: 8}, |
162 | | - {kitten: 'Juniper', cuteness: 10}, |
163 | | - {kitten: 'Spottis', cuteness: 10} |
164 | | - ]; |
165 | | - |
166 | | - var expected = [ |
167 | | - {kitten: 'Celery', cuteness: 8}, |
168 | | - {kitten: 'Juniper', cuteness: 10} |
169 | | - ]; |
| 149 | + list = [{name: 'Moe'}, {name: 'Curly'}, {name: 'Larry'}, {name: 'Curly'}]; |
| 150 | + var expected = [{name: 'Moe'}, {name: 'Curly'}, {name: 'Larry'}]; |
| 151 | + var iterator = function(stooge) { return stooge.name; }; |
| 152 | + assert.deepEqual(_.uniq(list, false, iterator), expected, 'uses the result of `iterator` for uniqueness comparisons (unsorted case)'); |
| 153 | + assert.deepEqual(_.uniq(list, iterator), expected, '`sorted` argument defaults to false when omitted'); |
| 154 | + assert.deepEqual(_.uniq(list, 'name'), expected, 'when `iterator` is a string, uses that key for comparisons (unsorted case)'); |
170 | 155 |
|
171 | | - assert.deepEqual(_.uniq(kittens, true, 'cuteness'), expected, 'string iterator works with sorted array'); |
| 156 | + list = [{score: 8}, {score: 10}, {score: 10}]; |
| 157 | + expected = [{score: 8}, {score: 10}]; |
| 158 | + iterator = function(item) { return item.score; }; |
| 159 | + assert.deepEqual(_.uniq(list, true, iterator), expected, 'uses the result of `iterator` for uniqueness comparisons (sorted case)'); |
| 160 | + assert.deepEqual(_.uniq(list, true, 'score'), expected, 'when `iterator` is a string, uses that key for comparisons (sorted case)'); |
172 | 161 |
|
| 162 | + assert.deepEqual(_.uniq([{0: 1}, {0: 1}, {0: 1}, {0: 2}], 0), [{0: 1}, {0: 2}], 'can use falsey pluck like iterator'); |
173 | 163 |
|
174 | 164 | var result = (function(){ return _.uniq(arguments); }(1, 2, 1, 3, 1, 4)); |
175 | 165 | assert.deepEqual(result, [1, 2, 3, 4], 'works on an arguments object'); |
176 | 166 |
|
177 | 167 | var a = {}, b = {}, c = {}; |
178 | 168 | assert.deepEqual(_.uniq([a, b, a, b, c]), [a, b, c], 'works on values that can be tested for equivalency but not ordered'); |
179 | 169 |
|
180 | | - assert.deepEqual(_.uniq(null), []); |
| 170 | + assert.deepEqual(_.uniq(null), [], 'returns an empty array when `array` is not iterable'); |
181 | 171 |
|
182 | 172 | var context = {}; |
183 | 173 | list = [3]; |
184 | 174 | _.uniq(list, function(value, index, array) { |
185 | | - assert.strictEqual(this, context); |
186 | | - assert.strictEqual(value, 3); |
187 | | - assert.strictEqual(index, 0); |
188 | | - assert.strictEqual(array, list); |
| 175 | + assert.strictEqual(this, context, 'executes its iterator in the given context'); |
| 176 | + assert.strictEqual(value, 3, 'passes its iterator the value'); |
| 177 | + assert.strictEqual(index, 0, 'passes its iterator the index'); |
| 178 | + assert.strictEqual(array, list, 'passes its iterator the entire array'); |
189 | 179 | }, context); |
190 | 180 |
|
191 | | - assert.deepEqual(_.uniq([{a: 1, b: 1}, {a: 1, b: 2}, {a: 1, b: 3}, {a: 2, b: 1}], 'a'), [{a: 1, b: 1}, {a: 2, b: 1}], 'can use pluck like iterator'); |
192 | | - assert.deepEqual(_.uniq([{0: 1, b: 1}, {0: 1, b: 2}, {0: 1, b: 3}, {0: 2, b: 1}], 0), [{0: 1, b: 1}, {0: 2, b: 1}], 'can use falsey pluck like iterator'); |
193 | 181 | }); |
194 | 182 |
|
195 | 183 | QUnit.test('unique', function(assert) { |
|
0 commit comments