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

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 2982823002: Option to truncate integers to 64 bits, part 2 (Closed)
Patch Set: Fixes for review comments Created 3 years, 5 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 #include "vm/dart_api_impl.h" 5 #include "vm/dart_api_impl.h"
6 #include "bin/builtin.h" 6 #include "bin/builtin.h"
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "include/dart_mirrors_api.h" 8 #include "include/dart_mirrors_api.h"
9 #include "include/dart_native_api.h" 9 #include "include/dart_native_api.h"
10 #include "include/dart_tools_api.h" 10 #include "include/dart_tools_api.h"
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 EXPECT_VALID(result); 837 EXPECT_VALID(result);
838 EXPECT(fits); 838 EXPECT(fits);
839 839
840 Dart_Handle val2 = Dart_NewInteger(kIntegerVal2); 840 Dart_Handle val2 = Dart_NewInteger(kIntegerVal2);
841 EXPECT(Dart_IsInteger(val2)); 841 EXPECT(Dart_IsInteger(val2));
842 result = Dart_IntegerFitsIntoInt64(val2, &fits); 842 result = Dart_IntegerFitsIntoInt64(val2, &fits);
843 EXPECT_VALID(result); 843 EXPECT_VALID(result);
844 EXPECT(fits); 844 EXPECT(fits);
845 845
846 Dart_Handle val3 = Dart_NewIntegerFromHexCString(kIntegerVal3); 846 Dart_Handle val3 = Dart_NewIntegerFromHexCString(kIntegerVal3);
847 EXPECT(Dart_IsInteger(val3)); 847 if (FLAG_limit_ints_to_64_bits) {
848 result = Dart_IntegerFitsIntoInt64(val3, &fits); 848 EXPECT(Dart_IsApiError(val3));
849 EXPECT_VALID(result); 849 } else {
850 EXPECT(!fits); 850 EXPECT(Dart_IsInteger(val3));
851 result = Dart_IntegerFitsIntoInt64(val3, &fits);
852 EXPECT_VALID(result);
853 EXPECT(!fits);
854 }
851 855
852 int64_t out = 0; 856 int64_t out = 0;
853 result = Dart_IntegerToInt64(val1, &out); 857 result = Dart_IntegerToInt64(val1, &out);
854 EXPECT_VALID(result); 858 EXPECT_VALID(result);
855 EXPECT_EQ(kIntegerVal1, out); 859 EXPECT_EQ(kIntegerVal1, out);
856 860
857 result = Dart_IntegerToInt64(val2, &out); 861 result = Dart_IntegerToInt64(val2, &out);
858 EXPECT_VALID(result); 862 EXPECT_VALID(result);
859 EXPECT_EQ(kIntegerVal2, out); 863 EXPECT_EQ(kIntegerVal2, out);
860 864
861 const char* chars = NULL; 865 const char* chars = NULL;
862 result = Dart_IntegerToHexCString(val3, &chars); 866 result = Dart_IntegerToHexCString(val3, &chars);
863 EXPECT_VALID(result); 867 EXPECT_VALID(result);
864 EXPECT(!strcmp(kIntegerVal3, chars)); 868 EXPECT(!strcmp(kIntegerVal3, chars));
865 869
866 Dart_Handle val4 = Dart_NewIntegerFromUint64(kIntegerVal4); 870 Dart_Handle val4 = Dart_NewIntegerFromUint64(kIntegerVal4);
867 EXPECT_VALID(val4); 871 if (FLAG_limit_ints_to_64_bits) {
868 uint64_t out4 = 0; 872 EXPECT(Dart_IsApiError(val4));
869 result = Dart_IntegerToUint64(val4, &out4); 873 } else {
870 EXPECT_VALID(result); 874 EXPECT_VALID(val4);
871 EXPECT_EQ(kIntegerVal4, out4); 875 uint64_t out4 = 0;
876 result = Dart_IntegerToUint64(val4, &out4);
877 EXPECT_VALID(result);
878 EXPECT_EQ(kIntegerVal4, out4);
879 }
872 880
873 Dart_Handle val5 = Dart_NewInteger(-1); 881 Dart_Handle val5 = Dart_NewInteger(-1);
874 EXPECT_VALID(val5); 882 EXPECT_VALID(val5);
875 uint64_t out5 = 0; 883 uint64_t out5 = 0;
876 result = Dart_IntegerToUint64(val5, &out5); 884 result = Dart_IntegerToUint64(val5, &out5);
877 EXPECT(Dart_IsError(result)); 885 EXPECT(Dart_IsError(result));
878 886
879 Dart_Handle val6 = Dart_NewInteger(kIntegerVal5); 887 Dart_Handle val6 = Dart_NewInteger(kIntegerVal5);
880 EXPECT_VALID(val6); 888 EXPECT_VALID(val6);
881 uint64_t out6 = 0; 889 uint64_t out6 = 0;
882 result = Dart_IntegerToUint64(val6, &out6); 890 result = Dart_IntegerToUint64(val6, &out6);
883 EXPECT(Dart_IsError(result)); 891 EXPECT(Dart_IsError(result));
884 } 892 }
885 893
886 TEST_CASE(IntegerFitsIntoInt64) { 894 TEST_CASE(IntegerFitsIntoInt64) {
887 Dart_Handle max = Dart_NewInteger(kMaxInt64); 895 Dart_Handle max = Dart_NewInteger(kMaxInt64);
888 EXPECT(Dart_IsInteger(max)); 896 EXPECT(Dart_IsInteger(max));
889 bool fits = false; 897 bool fits = false;
890 Dart_Handle result = Dart_IntegerFitsIntoInt64(max, &fits); 898 Dart_Handle result = Dart_IntegerFitsIntoInt64(max, &fits);
891 EXPECT_VALID(result); 899 EXPECT_VALID(result);
892 EXPECT(fits); 900 EXPECT(fits);
893 901
894 Dart_Handle above_max = Dart_NewIntegerFromHexCString("0x8000000000000000"); 902 Dart_Handle above_max = Dart_NewIntegerFromHexCString("0x8000000000000000");
895 EXPECT(Dart_IsInteger(above_max)); 903 if (FLAG_limit_ints_to_64_bits) {
896 fits = true; 904 EXPECT(Dart_IsApiError(above_max));
897 result = Dart_IntegerFitsIntoInt64(above_max, &fits); 905 } else {
898 EXPECT_VALID(result); 906 EXPECT(Dart_IsInteger(above_max));
899 EXPECT(!fits); 907 fits = true;
908 result = Dart_IntegerFitsIntoInt64(above_max, &fits);
909 EXPECT_VALID(result);
910 EXPECT(!fits);
911 }
900 912
901 Dart_Handle min = Dart_NewInteger(kMinInt64); 913 Dart_Handle min = Dart_NewInteger(kMinInt64);
902 EXPECT(Dart_IsInteger(min)); 914 EXPECT(Dart_IsInteger(min));
903 fits = false; 915 fits = false;
904 result = Dart_IntegerFitsIntoInt64(min, &fits); 916 result = Dart_IntegerFitsIntoInt64(min, &fits);
905 EXPECT_VALID(result); 917 EXPECT_VALID(result);
906 EXPECT(fits); 918 EXPECT(fits);
907 919
908 Dart_Handle below_min = Dart_NewIntegerFromHexCString("-0x8000000000000001"); 920 Dart_Handle below_min = Dart_NewIntegerFromHexCString("-0x8000000000000001");
909 EXPECT(Dart_IsInteger(below_min)); 921 if (FLAG_limit_ints_to_64_bits) {
910 fits = true; 922 EXPECT(Dart_IsApiError(below_min));
911 result = Dart_IntegerFitsIntoInt64(below_min, &fits); 923 } else {
912 EXPECT_VALID(result); 924 EXPECT(Dart_IsInteger(below_min));
913 EXPECT(!fits); 925 fits = true;
926 result = Dart_IntegerFitsIntoInt64(below_min, &fits);
927 EXPECT_VALID(result);
928 EXPECT(!fits);
929 }
914 } 930 }
915 931
916 TEST_CASE(IntegerFitsIntoUint64) { 932 TEST_CASE(IntegerFitsIntoUint64) {
917 Dart_Handle max = Dart_NewIntegerFromUint64(kMaxUint64); 933 Dart_Handle max = Dart_NewIntegerFromUint64(kMaxUint64);
918 EXPECT(Dart_IsInteger(max)); 934 if (FLAG_limit_ints_to_64_bits) {
935 EXPECT(Dart_IsApiError(max));
936 } else {
937 EXPECT(Dart_IsInteger(max));
938 bool fits = false;
939 Dart_Handle result = Dart_IntegerFitsIntoUint64(max, &fits);
940 EXPECT_VALID(result);
941 EXPECT(fits);
942 }
943
944 Dart_Handle above_max = Dart_NewIntegerFromHexCString("0x10000000000000000");
945 if (FLAG_limit_ints_to_64_bits) {
946 EXPECT(Dart_IsApiError(above_max));
947 } else {
948 EXPECT(Dart_IsInteger(above_max));
949 bool fits = true;
950 Dart_Handle result = Dart_IntegerFitsIntoUint64(above_max, &fits);
951 EXPECT_VALID(result);
952 EXPECT(!fits);
953 }
954
955 Dart_Handle min = Dart_NewInteger(0);
956 EXPECT(Dart_IsInteger(min));
919 bool fits = false; 957 bool fits = false;
920 Dart_Handle result = Dart_IntegerFitsIntoUint64(max, &fits); 958 Dart_Handle result = Dart_IntegerFitsIntoUint64(min, &fits);
921 EXPECT_VALID(result); 959 EXPECT_VALID(result);
922 EXPECT(fits); 960 EXPECT(fits);
923 961
924 Dart_Handle above_max = Dart_NewIntegerFromHexCString("0x10000000000000000");
925 EXPECT(Dart_IsInteger(above_max));
926 fits = true;
927 result = Dart_IntegerFitsIntoUint64(above_max, &fits);
928 EXPECT_VALID(result);
929 EXPECT(!fits);
930
931 Dart_Handle min = Dart_NewInteger(0);
932 EXPECT(Dart_IsInteger(min));
933 fits = false;
934 result = Dart_IntegerFitsIntoUint64(min, &fits);
935 EXPECT_VALID(result);
936 EXPECT(fits);
937
938 Dart_Handle below_min = Dart_NewIntegerFromHexCString("-1"); 962 Dart_Handle below_min = Dart_NewIntegerFromHexCString("-1");
939 EXPECT(Dart_IsInteger(below_min)); 963 EXPECT(Dart_IsInteger(below_min));
940 fits = true; 964 fits = true;
941 result = Dart_IntegerFitsIntoUint64(below_min, &fits); 965 result = Dart_IntegerFitsIntoUint64(below_min, &fits);
942 EXPECT_VALID(result); 966 EXPECT_VALID(result);
943 EXPECT(!fits); 967 EXPECT(!fits);
944 } 968 }
945 969
946 TEST_CASE(ArrayValues) { 970 TEST_CASE(ArrayValues) {
947 EXPECT(!Dart_IsList(Dart_Null())); 971 EXPECT(!Dart_IsList(Dart_Null()));
(...skipping 6881 matching lines...) Expand 10 before | Expand all | Expand 10 after
7829 EXPECT(Dart_IsError(Dart_GetPeer(Dart_False(), &out))); 7853 EXPECT(Dart_IsError(Dart_GetPeer(Dart_False(), &out)));
7830 EXPECT(out == &out); 7854 EXPECT(out == &out);
7831 EXPECT(Dart_IsError(Dart_SetPeer(Dart_False(), &out))); 7855 EXPECT(Dart_IsError(Dart_SetPeer(Dart_False(), &out)));
7832 out = &out; 7856 out = &out;
7833 Dart_Handle smi = Dart_NewInteger(0); 7857 Dart_Handle smi = Dart_NewInteger(0);
7834 EXPECT(Dart_IsError(Dart_GetPeer(smi, &out))); 7858 EXPECT(Dart_IsError(Dart_GetPeer(smi, &out)));
7835 EXPECT(out == &out); 7859 EXPECT(out == &out);
7836 EXPECT(Dart_IsError(Dart_SetPeer(smi, &out))); 7860 EXPECT(Dart_IsError(Dart_SetPeer(smi, &out)));
7837 out = &out; 7861 out = &out;
7838 Dart_Handle big = Dart_NewIntegerFromHexCString("0x10000000000000000"); 7862 Dart_Handle big = Dart_NewIntegerFromHexCString("0x10000000000000000");
7839 EXPECT(Dart_IsError(Dart_GetPeer(big, &out))); 7863 if (FLAG_limit_ints_to_64_bits) {
7840 EXPECT(out == &out); 7864 EXPECT(Dart_IsApiError(big));
7841 EXPECT(Dart_IsError(Dart_SetPeer(big, &out))); 7865 } else {
7866 EXPECT(Dart_IsError(Dart_GetPeer(big, &out)));
7867 EXPECT(out == &out);
7868 EXPECT(Dart_IsError(Dart_SetPeer(big, &out)));
7869 }
7870 out = &out;
7842 Dart_Handle dbl = Dart_NewDouble(0.0); 7871 Dart_Handle dbl = Dart_NewDouble(0.0);
7843 EXPECT(Dart_IsError(Dart_GetPeer(dbl, &out))); 7872 EXPECT(Dart_IsError(Dart_GetPeer(dbl, &out)));
7844 EXPECT(out == &out); 7873 EXPECT(out == &out);
7845 EXPECT(Dart_IsError(Dart_SetPeer(dbl, &out))); 7874 EXPECT(Dart_IsError(Dart_SetPeer(dbl, &out)));
7846 } 7875 }
7847 7876
7848 // Allocates an object in new space and assigns it a peer. Removes 7877 // Allocates an object in new space and assigns it a peer. Removes
7849 // the peer and checks that the count of peer objects is decremented 7878 // the peer and checks that the count of peer objects is decremented
7850 // by one. 7879 // by one.
7851 TEST_CASE(OneNewSpacePeer) { 7880 TEST_CASE(OneNewSpacePeer) {
(...skipping 1742 matching lines...) Expand 10 before | Expand all | Expand 10 after
9594 EXPECT_VALID(result); 9623 EXPECT_VALID(result);
9595 result = Dart_FinalizeLoading(false); 9624 result = Dart_FinalizeLoading(false);
9596 EXPECT_VALID(result); 9625 EXPECT_VALID(result);
9597 result = Dart_Invoke(lib, NewString("foozoo"), 0, NULL); 9626 result = Dart_Invoke(lib, NewString("foozoo"), 0, NULL);
9598 EXPECT(Dart_IsError(result)); 9627 EXPECT(Dart_IsError(result));
9599 } 9628 }
9600 9629
9601 #endif // !PRODUCT 9630 #endif // !PRODUCT
9602 9631
9603 } // namespace dart 9632 } // namespace dart
OLDNEW
« runtime/lib/integers.cc ('K') | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698