Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: test/browser/runtime_tests.js

Issue 1948253002: Fix subtyping for generic typedefs. Generic typedefs were being (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/ddc_runtime/types.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 });
OLDNEW
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/input_sdk/private/ddc_runtime/types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698