209
209
# singletons (identity and property lens) are egal
210
210
for (l1, l2) ∈ [
211
211
@lens (_) => @lens (_),
212
- @lens (_. a) => @lens (_. a)
212
+ @lens (_. a) => @lens (_. a),
213
213
]
214
214
@test l1 === l2
215
215
@test l1 == l2
@@ -218,23 +218,41 @@ end
218
218
219
219
# composite and index lenses are structurally equal
220
220
for (l1, l2) ∈ [
221
- @lens (_[1 ]) => @lens (_[1 ])
222
- @lens (_. a[2 ]) => @lens (_. a[2 ])
223
- @lens (_. a. b[3 ]) => @lens (_. a. b[3 ])
221
+ @lens (_[1 ]) => @lens (_[1 ]),
222
+ @lens (_. a[2 ]) => @lens (_. a[2 ]),
223
+ @lens (_. a. b[3 ]) => @lens (_. a. b[3 ]),
224
+ @lens (_[1 : 10 ]) => @lens (_[1 : 10 ]),
225
+ @lens (_. a[2 : 20 ]) => @lens (_. a[2 : 20 ]),
226
+ @lens (_. a. b[3 : 30 ]) => @lens (_. a. b[3 : 30 ]),
224
227
]
225
228
@test l1 == l2
226
229
@test hash (l1) == hash (l2)
227
230
end
228
231
229
232
# inequality
230
233
for (l1, l2) ∈ [
231
- @lens (_[1 ]) => @lens (_[2 ])
232
- @lens (_. a[1 ]) => @lens (_. a[2 ])
233
- @lens (_. a[1 ]) => @lens (_. b[1 ])
234
+ @lens (_[1 ]) => @lens (_[2 ]),
235
+ @lens (_. a[1 ]) => @lens (_. a[2 ]),
236
+ @lens (_. a[1 ]) => @lens (_. b[1 ]),
237
+ @lens (_[1 : 10 ]) => @lens (_[2 : 20 ]),
238
+ @lens (_. a[1 : 10 ]) => @lens (_. a[2 : 20 ]),
239
+ @lens (_. a[1 : 10 ]) => @lens (_. b[1 : 10 ]),
234
240
]
235
241
@test l1 != l2
236
242
end
237
243
244
+ # equality with non-equal range types (#165)
245
+ for (l1, l2) ∈ [
246
+ @lens (_[1 : 10 ]) => @lens (_[Base. OneTo (10 )]),
247
+ @lens (_. a[1 : 10 ]) => @lens (_. a[Base. OneTo (10 )]),
248
+ @lens (_. a. b[1 : 10 ]) => @lens (_. a. b[Base. OneTo (10 )]),
249
+ @lens (_. a[Base. StepRange (1 , 1 , 5 )]. b[1 : 10 ]) => @lens (_. a[1 : 5 ]. b[Base. OneTo (10 )]),
250
+ @lens (_. a. b[1 : 3 ]) => @lens (_. a. b[[1 , 2 , 3 ]]),
251
+ ]
252
+ @test l1 == l2
253
+ @test hash (l1) == hash (l2)
254
+ end
255
+
238
256
# Hash property: equality implies equal hashes, or in other terms:
239
257
# lenses either have equal hashes or are unequal
240
258
# Because collisions can occur theoretically (though unlikely), this is a property test,
0 commit comments