|
1 | 1 | import Prim "mo:prim";
|
2 | 2 | func fail<T>() : T = Prim.trap("fail");
|
3 | 3 | func check<T>(t1 : T, t2 : T) : [T] = [t1, t2]; // used to check type equality
|
| 4 | +func check3<T>(t1 : T, t2 : T, t3 : T) : [T] = [t1, t2, t3]; // used to check type equality |
| 5 | + |
| 6 | +type Order = { #less; #equal; #greater }; |
4 | 7 |
|
5 | 8 | // Mock functions for Array module
|
6 | 9 | module Array {
|
@@ -221,6 +224,7 @@ module Map {
|
221 | 224 | public func all<K, V>(_map : Map<K, V>, _predicate : (K, V) -> Bool) : Bool = true;
|
222 | 225 | public func any<K, V>(_map : Map<K, V>, _predicate : (K, V) -> Bool) : Bool = false;
|
223 | 226 | public func toText<K, V>(_map : Map<K, V>, _keyToText : K -> Text, _valueToText : V -> Text) : Text = "";
|
| 227 | + public func fromIter<K, V>(_iter : Iter<(K, V)>, _compare : (K, K) -> Order) : Map<K, V> = fail(); |
224 | 228 | };
|
225 | 229 |
|
226 | 230 | // Mock functions for pure Map module
|
@@ -405,19 +409,25 @@ let _ = Set.retainAll(set, natCompare, func n = n % 2 == 0);
|
405 | 409 | let _ = Set.forEach(set, func _ {});
|
406 | 410 | let _ = Set.filter(set, natCompare, func n = n % 2 == 0);
|
407 | 411 | let s1 = Set.map<Nat, Text>(set, func n = natToText(n));
|
| 412 | +let s1i = Set.map(set, func n = natToText(n)); |
408 | 413 | let s2 : Set<Text> = Set.map(set, func n = natToText(n));
|
409 |
| -let _ = check(s1, s2); |
| 414 | +let _ = check3(s1, s1i, s2); |
410 | 415 | let s3 = Set.filterMap<Nat, Text>(
|
411 | 416 | set,
|
412 | 417 | textCompare,
|
413 | 418 | func n = if (n % 2 == 0) ?natToText(n) else null,
|
414 | 419 | );
|
| 420 | +let s3i = Set.filterMap( |
| 421 | + set, |
| 422 | + textCompare, |
| 423 | + func n = if (n % 2 == 0) ?natToText(n) else null, |
| 424 | +); |
415 | 425 | let s4 : Set<Text> = Set.filterMap(
|
416 | 426 | set,
|
417 | 427 | textCompare,
|
418 | 428 | func n = if (n % 2 == 0) ?natToText(n) else null,
|
419 | 429 | );
|
420 |
| -let _ = check(s3, s4); |
| 430 | +let _ = check3(s3, s3i, s4); |
421 | 431 | let _ = Set.all(set, func n = n < 10);
|
422 | 432 | let _ = Set.any(set, func n = n > 5);
|
423 | 433 |
|
@@ -445,11 +455,13 @@ let _ = PureSet.any(pureSet, func n = n > 5);
|
445 | 455 | let _ = Map.forEach(mapInstance, func(key, value) {});
|
446 | 456 | let _ = Map.filter(mapInstance, natCompare, func(key, value) = key % 2 == 0);
|
447 | 457 | let m1 = Map.map<Nat, Text, Text>(mapInstance, func(key, value) = natToText(key));
|
| 458 | +let m1i = Map.map(mapInstance, func(key, value) = natToText(key)); |
448 | 459 | let m2 : Map<Nat, Text> = Map.map(mapInstance, func(key, value) = natToText(key));
|
449 |
| -let _ = check(m1, m2); |
| 460 | +let _ = check3(m1, m1i, m2); |
450 | 461 | let _ = Map.all(mapInstance, func(k, v) = v == natToText(k));
|
451 | 462 | let _ = Map.any(mapInstance, func(k, v) = k >= 0);
|
452 | 463 | let _ = Map.toText(mapInstance, natToText, func t = t);
|
| 464 | +let _ = Map.fromIter([(0, "0")].values(), natCompare); |
453 | 465 |
|
454 | 466 | // pure Map module explicit type instantiation tests
|
455 | 467 | let _ = PureMap.all(pureMap, func(k, v) = v == natToText(k));
|
|
0 commit comments