OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 var assert = chai.assert; | 5 var assert = chai.assert; |
6 var dart_sdk = dart_library.import('dart_sdk'); | 6 var dart_sdk = dart_library.import('dart_sdk'); |
7 var core = dart_sdk.core; | 7 var core = dart_sdk.core; |
8 var collection = dart_sdk.collection; | 8 var collection = dart_sdk.collection; |
9 var dart = dart_sdk.dart; | 9 var dart = dart_sdk.dart; |
10 var dartx = dart.dartx; | 10 var dartx = dart.dartx; |
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 } | 802 } |
803 function never2(t1, t2) { | 803 function never2(t1, t2) { |
804 assert.equal(isSubtype(t1, t2), false); | 804 assert.equal(isSubtype(t1, t2), false); |
805 maybe(functionType(t1, [t2]), functionType(t2, [t1])); | 805 maybe(functionType(t1, [t2]), functionType(t2, [t1])); |
806 } | 806 } |
807 function maybe2(t1, t2) { | 807 function maybe2(t1, t2) { |
808 assert.equal(isSubtype(t1, t2), null); | 808 assert.equal(isSubtype(t1, t2), null); |
809 maybe(functionType(t1, [t2]), functionType(t2, [t1])); | 809 maybe(functionType(t1, [t2]), functionType(t2, [t1])); |
810 } | 810 } |
811 | 811 |
| 812 function run_test(func1, func2, func2opt, func1extra, func2extra) { |
| 813 always2(func2(int, int), func2(int, int)); |
| 814 always2(func2(int, num), func2(int, int)); |
| 815 always2(func2(int, int), func2(num, int)); |
| 816 |
| 817 always2(func2opt(int, int), func2opt(int, int)); |
| 818 always2(func2opt(int, num), func2opt(int, int)); |
| 819 always2(func2opt(int, int), func2opt(num, int)); |
| 820 |
| 821 always2(func2opt(int, int), func2(int, int)); |
| 822 always2(func2opt(int, num), func2(int, int)); |
| 823 always2(func2opt(int, int), func2(num, int)); |
| 824 |
| 825 always2(func2opt(int, int), func1(int)); |
| 826 always2(func2opt(int, num), func1(int)); |
| 827 always2(func2opt(int, int), func1(num)); |
| 828 |
| 829 always2(func2extra(int, int), func2(int, int)); |
| 830 always2(func2extra(int, num), func2(int, int)); |
| 831 always2(func2extra(int, int), func2(num, int)); |
| 832 |
| 833 maybe2(func2(int, int), func2(int, num)); |
| 834 maybe2(func2(num, int), func2(int, int)); |
| 835 |
| 836 maybe2(func2opt(num, num), func1(int)); |
| 837 |
| 838 maybe2(func2opt(int, int), func2opt(int, num)); |
| 839 maybe2(func2opt(num, int), func2opt(int, int)); |
| 840 |
| 841 maybe2(func2opt(int, int), func2(int, num)); |
| 842 maybe2(func2opt(num, int), func2(int, int)); |
| 843 |
| 844 maybe2(func2extra(int, int), func2(int, num)); |
| 845 maybe2(func2extra(num, int), func2(int, int)); |
| 846 |
| 847 never2(func1(int), func2(int, num)); |
| 848 never2(func1(num), func2(int, int)); |
| 849 never2(func1(num), func2(num, num)); |
| 850 |
| 851 never2(func2(int, int), func1(int)); |
| 852 never2(func2(num, int), func1(int)); |
| 853 never2(func2(num, num), func1(num)); |
| 854 |
| 855 never2(func1(int), func2opt(int, num)); |
| 856 never2(func1(num), func2opt(int, int)); |
| 857 never2(func1(num), func2opt(num, num)); |
| 858 |
| 859 never2(func2(int, int), func2opt(int, num)); |
| 860 never2(func2(num, int), func2opt(int, int)); |
| 861 never2(func2(num, num), func2opt(num, num)); |
| 862 |
| 863 never2(func1extra(int), func2(int, num)); |
| 864 never2(func1extra(num), func2(int, int)); |
| 865 never2(func1extra(num), func2(num, num)); |
| 866 |
| 867 never2(func1extra(int), func2opt(int, num)); |
| 868 never2(func1extra(num), func2opt(int, int)); |
| 869 never2(func1extra(num), func2opt(num, num)); |
| 870 |
| 871 never2(func1(int), func1extra(int)); |
| 872 never2(func1(num), func1extra(int)); |
| 873 never2(func1(num), func1extra(num)); |
| 874 |
| 875 never2(func2(int, int), func1extra(int)); |
| 876 never2(func2(num, int), func1extra(int)); |
| 877 never2(func2(num, num), func1extra(num)); |
| 878 |
| 879 never2(func2(int, int), func2extra(int, int)); |
| 880 never2(func2(num, int), func2extra(int, int)); |
| 881 never2(func2(num, num), func2extra(num, num)); |
| 882 }; |
| 883 |
812 test('basic function types', () => { | 884 test('basic function types', () => { |
813 always2(functionType(int, [int]), functionType(int, [int])); | 885 function func1(S) { |
814 always2(functionType(int, [num]), functionType(int, [int])); | 886 return functionType(S, []); |
815 always2(functionType(int, [int]), functionType(num, [int])); | 887 } |
816 | 888 |
817 always2(functionType(int, [], [int]), functionType(int, [], [int])); | 889 function func2(S, T) { |
818 always2(functionType(int, [], [num]), functionType(int, [], [int])); | 890 return functionType(S, [T]); |
819 always2(functionType(int, [], [int]), functionType(num, [], [int])); | 891 } |
820 | 892 |
821 always2(functionType(int, [], [int]), functionType(int, [int])); | 893 function func2opt(S, T) { |
822 always2(functionType(int, [], [num]), functionType(int, [int])); | 894 return functionType(S, [], [T]); |
823 always2(functionType(int, [], [int]), functionType(num, [int])); | 895 } |
824 | 896 |
825 always2(functionType(int, [], [int]), functionType(int, [])); | 897 function func1extra(S) { |
826 always2(functionType(int, [], [num]), functionType(int, [])); | 898 return functionType(S, [], {extra: int}); |
827 always2(functionType(int, [], [int]), functionType(num, [])); | 899 } |
828 | 900 |
829 always2(functionType(int, [int], {extra: int}), functionType(int, [int])); | 901 function func2extra(S, T) { |
830 always2(functionType(int, [num], {extra: int}), functionType(int, [int])); | 902 return functionType(S, [T], {extra: int}); |
831 always2(functionType(int, [int], {extra: int}), functionType(num, [int])); | 903 } |
832 | 904 |
833 maybe2(functionType(int, [int]), functionType(int, [num])); | 905 run_test(func1, func2, func2opt, func1extra, func2extra); |
834 maybe2(functionType(num, [int]), functionType(int, [int])); | 906 }); |
835 | 907 |
836 maybe2(functionType(num, [], [num]), functionType(int, [])); | 908 test('basic typedefs', () => { |
| 909 function func1(S) { |
| 910 return dart.typedef('Func1', () => functionType(S, [])) |
| 911 } |
837 | 912 |
838 maybe2(functionType(int, [], [int]), functionType(int, [], [num])); | 913 function func2(S, T) { |
839 maybe2(functionType(num, [], [int]), functionType(int, [], [int])); | 914 return dart.typedef('Func2', () => functionType(S, [T])) |
| 915 } |
840 | 916 |
841 maybe2(functionType(int, [], [int]), functionType(int, [num])); | 917 function func2opt(S, T) { |
842 maybe2(functionType(num, [], [int]), functionType(int, [int])); | 918 return dart.typedef('Func2', () => functionType(S, [], [T])) |
| 919 } |
843 | 920 |
844 maybe2(functionType(int, [int], {extra: int}), functionType(int, [num])); | 921 function func1extra(S) { |
845 maybe2(functionType(num, [int], {extra: int}), functionType(int, [int])); | 922 return dart.typedef('Func1', () => functionType(S, [], {extra: int})) |
| 923 } |
846 | 924 |
847 never2(functionType(int, []), functionType(int, [num])); | 925 function func2extra(S, T) { |
848 never2(functionType(num, []), functionType(int, [int])); | 926 return dart.typedef('Func2', () => functionType(S, [T], {extra: int})) |
849 never2(functionType(num, []), functionType(num, [num])); | 927 } |
850 | 928 |
851 never2(functionType(int, [int]), functionType(int, [])); | 929 run_test(func1, func2, func2opt, func1extra, func2extra); |
852 never2(functionType(num, [int]), functionType(int, [])); | 930 }); |
853 never2(functionType(num, [num]), functionType(num, [])); | |
854 | 931 |
855 never2(functionType(int, []), functionType(int, [], [num])); | 932 test('basic generic typedefs', () => { |
856 never2(functionType(num, []), functionType(int, [], [int])); | 933 let func1 = dart.generic( |
857 never2(functionType(num, []), functionType(num, [], [num])); | 934 (S) => dart.typedef('Func1', () => functionType(S, []))); |
858 | 935 |
859 never2(functionType(int, [int]), functionType(int, [], [num])); | 936 let func2 = dart.generic( |
860 never2(functionType(num, [int]), functionType(int, [], [int])); | 937 (S, T) => dart.typedef('Func2', () => functionType(S, [T]))); |
861 never2(functionType(num, [num]), functionType(num, [], [num])); | |
862 | 938 |
863 never2(functionType(int, [], {extra: int}), functionType(int, [num])); | 939 let func2opt = dart.generic( |
864 never2(functionType(num, [], {extra: int}), functionType(int, [int])); | 940 (S, T) => dart.typedef('Func2', () => functionType(S, [], [T]))); |
865 never2(functionType(num, [], {extra: int}), functionType(num, [num])); | |
866 | 941 |
867 never2(functionType(int, [], {extra: int}), functionType(int, [], [num])); | 942 let func1extra = dart.generic( |
868 never2(functionType(num, [], {extra: int}), functionType(int, [], [int])); | 943 (S) => dart.typedef('Func1', () => functionType(S, [], {extra: int}))); |
869 never2(functionType(num, [], {extra: int}), functionType(num, [], [num])); | |
870 | 944 |
871 never2(functionType(int, []), functionType(int, [], {extra: int})); | 945 let func2extra = dart.generic( |
872 never2(functionType(num, []), functionType(int, [], {extra: int})); | 946 (S, T) => dart.typedef('Func2', |
873 never2(functionType(num, []), functionType(num, [], {extra: int})); | 947 () => functionType(S, [T], {extra: int}))); |
874 | 948 |
875 never2(functionType(int, [int]), functionType(int, [], {extra: int})); | 949 run_test(func1, func2, func2opt, func1extra, func2extra); |
876 never2(functionType(num, [int]), functionType(int, [], {extra: int})); | |
877 never2(functionType(num, [num]), functionType(num, [], {extra: int})); | |
878 | |
879 never2(functionType(int, [int]), functionType(int, [int], {extra: int})); | |
880 never2(functionType(num, [int]), functionType(int, [int], {extra: int})); | |
881 never2(functionType(num, [num]), functionType(num, [num], {extra: int})); | |
882 }); | 950 }); |
883 | 951 |
884 test('fuzzy function types', () => { | 952 test('fuzzy function types', () => { |
885 always(functionType(int, [int]), functionType(dyn, [dyn])); | 953 always(functionType(int, [int]), functionType(dyn, [dyn])); |
886 | 954 |
887 always(functionType(int, [], [int]), functionType(dyn, [], [dyn])); | 955 always(functionType(int, [], [int]), functionType(dyn, [], [dyn])); |
888 | 956 |
889 always(functionType(int, [], [int]), functionType(dyn, [dyn])); | 957 always(functionType(int, [], [int]), functionType(dyn, [dyn])); |
890 | 958 |
891 always(functionType(int, [], [int]), functionType(dyn, [])); | 959 always(functionType(int, [], [int]), functionType(dyn, [])); |
892 | 960 |
893 always(functionType(int, [int], {extra: int}), functionType(dyn, [dyn])); | 961 always(functionType(int, [int], {extra: int}), functionType(dyn, [dyn])); |
894 | 962 |
895 }); | 963 }); |
896 | 964 |
| 965 test('higher-order typedef', () => { |
| 966 let Func$ = dart.generic((S, T) => |
| 967 dart.typedef('Func', () => |
| 968 functionType(T, [S]))); |
| 969 let Func2$ = dart.generic((R, S, T) => |
| 970 dart.typedef('Func2', () => |
| 971 functionType(T, [Func$(R, S)]))); |
| 972 |
| 973 maybe(functionType(int, [functionType(int, [num])]), |
| 974 functionType(num, [functionType(int, [int])])); |
| 975 maybe(functionType(int, [Func$(num, int)]), |
| 976 functionType(num, [Func$(int, int)])); |
| 977 maybe(Func2$(num, int, int), Func2$(int, int, num)); |
| 978 }); |
| 979 |
897 test('mixed types', () => { | 980 test('mixed types', () => { |
898 let AA$ = dart.generic((T) => class AA extends core.Object {}); | 981 let AA$ = dart.generic((T) => class AA extends core.Object {}); |
899 | 982 |
900 always(int, dyn); | 983 always(int, dyn); |
901 maybe(dyn, int); | 984 maybe(dyn, int); |
902 | 985 |
903 never(functionType(int, [int]), int); | 986 never(functionType(int, [int]), int); |
904 | 987 |
905 never(int, functionType(int, [int])); | 988 never(int, functionType(int, [int])); |
906 | 989 |
(...skipping 17 matching lines...) Expand all Loading... |
924 | 1007 |
925 suite('primitives', function() { | 1008 suite('primitives', function() { |
926 'use strict'; | 1009 'use strict'; |
927 | 1010 |
928 test('fixed length list', () => { | 1011 test('fixed length list', () => { |
929 let list = new core.List(10); | 1012 let list = new core.List(10); |
930 list[0] = 42; | 1013 list[0] = 42; |
931 assert.throws(() => list.add(42)); | 1014 assert.throws(() => list.add(42)); |
932 }); | 1015 }); |
933 }); | 1016 }); |
OLD | NEW |