OLD | NEW |
1 // Copyright 2007, Google Inc. | 1 // Copyright 2007, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 801 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 int c[2][3]; | 812 int c[2][3]; |
813 CopyArray(a, 2, c); | 813 CopyArray(a, 2, c); |
814 EXPECT_TRUE(ArrayEq(a, c)); | 814 EXPECT_TRUE(ArrayEq(a, c)); |
815 } | 815 } |
816 | 816 |
817 // Tests NativeArray. | 817 // Tests NativeArray. |
818 | 818 |
819 TEST(NativeArrayTest, ConstructorFromArrayWorks) { | 819 TEST(NativeArrayTest, ConstructorFromArrayWorks) { |
820 const int a[3] = { 0, 1, 2 }; | 820 const int a[3] = { 0, 1, 2 }; |
821 NativeArray<int> na(a, 3, kReference); | 821 NativeArray<int> na(a, 3, kReference); |
822 EXPECT_EQ(3, na.size()); | 822 EXPECT_EQ(3U, na.size()); |
823 EXPECT_EQ(a, na.begin()); | 823 EXPECT_EQ(a, na.begin()); |
824 } | 824 } |
825 | 825 |
826 TEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { | 826 TEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) { |
827 typedef int Array[2]; | 827 typedef int Array[2]; |
828 Array* a = new Array[1]; | 828 Array* a = new Array[1]; |
829 (*a)[0] = 0; | 829 (*a)[0] = 0; |
830 (*a)[1] = 1; | 830 (*a)[1] = 1; |
831 NativeArray<int> na(*a, 2, kCopy); | 831 NativeArray<int> na(*a, 2, kCopy); |
832 EXPECT_NE(*a, na.begin()); | 832 EXPECT_NE(*a, na.begin()); |
833 delete[] a; | 833 delete[] a; |
834 EXPECT_EQ(0, na.begin()[0]); | 834 EXPECT_EQ(0, na.begin()[0]); |
835 EXPECT_EQ(1, na.begin()[1]); | 835 EXPECT_EQ(1, na.begin()[1]); |
836 | 836 |
837 // We rely on the heap checker to verify that na deletes the copy of | 837 // We rely on the heap checker to verify that na deletes the copy of |
838 // array. | 838 // array. |
839 } | 839 } |
840 | 840 |
841 TEST(NativeArrayTest, TypeMembersAreCorrect) { | 841 TEST(NativeArrayTest, TypeMembersAreCorrect) { |
842 StaticAssertTypeEq<char, NativeArray<char>::value_type>(); | 842 StaticAssertTypeEq<char, NativeArray<char>::value_type>(); |
843 StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>(); | 843 StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>(); |
844 | 844 |
845 StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>(); | 845 StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>(); |
846 StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>(); | 846 StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>(); |
847 } | 847 } |
848 | 848 |
849 TEST(NativeArrayTest, MethodsWork) { | 849 TEST(NativeArrayTest, MethodsWork) { |
850 const int a[3] = { 0, 1, 2 }; | 850 const int a[3] = { 0, 1, 2 }; |
851 NativeArray<int> na(a, 3, kCopy); | 851 NativeArray<int> na(a, 3, kCopy); |
852 ASSERT_EQ(3, na.size()); | 852 ASSERT_EQ(3U, na.size()); |
853 EXPECT_EQ(3, na.end() - na.begin()); | 853 EXPECT_EQ(3, na.end() - na.begin()); |
854 | 854 |
855 NativeArray<int>::const_iterator it = na.begin(); | 855 NativeArray<int>::const_iterator it = na.begin(); |
856 EXPECT_EQ(0, *it); | 856 EXPECT_EQ(0, *it); |
857 ++it; | 857 ++it; |
858 EXPECT_EQ(1, *it); | 858 EXPECT_EQ(1, *it); |
859 it++; | 859 it++; |
860 EXPECT_EQ(2, *it); | 860 EXPECT_EQ(2, *it); |
861 ++it; | 861 ++it; |
862 EXPECT_EQ(na.end(), it); | 862 EXPECT_EQ(na.end(), it); |
863 | 863 |
864 EXPECT_THAT(na, Eq(na)); | 864 EXPECT_THAT(na, Eq(na)); |
865 | 865 |
866 NativeArray<int> na2(a, 3, kReference); | 866 NativeArray<int> na2(a, 3, kReference); |
867 EXPECT_THAT(na, Eq(na2)); | 867 EXPECT_THAT(na, Eq(na2)); |
868 | 868 |
869 const int b1[3] = { 0, 1, 1 }; | 869 const int b1[3] = { 0, 1, 1 }; |
870 const int b2[4] = { 0, 1, 2, 3 }; | 870 const int b2[4] = { 0, 1, 2, 3 }; |
871 EXPECT_THAT(na, Not(Eq(NativeArray<int>(b1, 3, kReference)))); | 871 EXPECT_THAT(na, Not(Eq(NativeArray<int>(b1, 3, kReference)))); |
872 EXPECT_THAT(na, Not(Eq(NativeArray<int>(b2, 4, kCopy)))); | 872 EXPECT_THAT(na, Not(Eq(NativeArray<int>(b2, 4, kCopy)))); |
873 } | 873 } |
874 | 874 |
875 TEST(NativeArrayTest, WorksForTwoDimensionalArray) { | 875 TEST(NativeArrayTest, WorksForTwoDimensionalArray) { |
876 const char a[2][3] = { "hi", "lo" }; | 876 const char a[2][3] = { "hi", "lo" }; |
877 NativeArray<char[3]> na(a, 2, kReference); | 877 NativeArray<char[3]> na(a, 2, kReference); |
878 ASSERT_EQ(2, na.size()); | 878 ASSERT_EQ(2U, na.size()); |
879 EXPECT_EQ(a, na.begin()); | 879 EXPECT_EQ(a, na.begin()); |
880 } | 880 } |
881 | 881 |
882 // Tests StlContainerView. | 882 // Tests StlContainerView. |
883 | 883 |
884 TEST(StlContainerViewTest, WorksForStlContainer) { | 884 TEST(StlContainerViewTest, WorksForStlContainer) { |
885 StaticAssertTypeEq<std::vector<int>, | 885 StaticAssertTypeEq<std::vector<int>, |
886 StlContainerView<std::vector<int> >::type>(); | 886 StlContainerView<std::vector<int> >::type>(); |
887 StaticAssertTypeEq<const std::vector<double>&, | 887 StaticAssertTypeEq<const std::vector<double>&, |
888 StlContainerView<std::vector<double> >::const_reference>(); | 888 StlContainerView<std::vector<double> >::const_reference>(); |
(...skipping 14 matching lines...) Expand all Loading... |
903 StaticAssertTypeEq<NativeArray<double>, | 903 StaticAssertTypeEq<NativeArray<double>, |
904 StlContainerView<const double[4]>::type>(); | 904 StlContainerView<const double[4]>::type>(); |
905 StaticAssertTypeEq<NativeArray<char[3]>, | 905 StaticAssertTypeEq<NativeArray<char[3]>, |
906 StlContainerView<const char[2][3]>::type>(); | 906 StlContainerView<const char[2][3]>::type>(); |
907 | 907 |
908 StaticAssertTypeEq<const NativeArray<int>, | 908 StaticAssertTypeEq<const NativeArray<int>, |
909 StlContainerView<int[2]>::const_reference>(); | 909 StlContainerView<int[2]>::const_reference>(); |
910 | 910 |
911 int a1[3] = { 0, 1, 2 }; | 911 int a1[3] = { 0, 1, 2 }; |
912 NativeArray<int> a2 = StlContainerView<int[3]>::ConstReference(a1); | 912 NativeArray<int> a2 = StlContainerView<int[3]>::ConstReference(a1); |
913 EXPECT_EQ(3, a2.size()); | 913 EXPECT_EQ(3U, a2.size()); |
914 EXPECT_EQ(a1, a2.begin()); | 914 EXPECT_EQ(a1, a2.begin()); |
915 | 915 |
916 const NativeArray<int> a3 = StlContainerView<int[3]>::Copy(a1); | 916 const NativeArray<int> a3 = StlContainerView<int[3]>::Copy(a1); |
917 ASSERT_EQ(3, a3.size()); | 917 ASSERT_EQ(3U, a3.size()); |
918 EXPECT_EQ(0, a3.begin()[0]); | 918 EXPECT_EQ(0, a3.begin()[0]); |
919 EXPECT_EQ(1, a3.begin()[1]); | 919 EXPECT_EQ(1, a3.begin()[1]); |
920 EXPECT_EQ(2, a3.begin()[2]); | 920 EXPECT_EQ(2, a3.begin()[2]); |
921 | 921 |
922 // Makes sure a1 and a3 aren't aliases. | 922 // Makes sure a1 and a3 aren't aliases. |
923 a1[0] = 3; | 923 a1[0] = 3; |
924 EXPECT_EQ(0, a3.begin()[0]); | 924 EXPECT_EQ(0, a3.begin()[0]); |
925 } | 925 } |
926 | 926 |
927 TEST(StlContainerViewTest, WorksForDynamicNativeArray) { | 927 TEST(StlContainerViewTest, WorksForDynamicNativeArray) { |
928 StaticAssertTypeEq<NativeArray<int>, | 928 StaticAssertTypeEq<NativeArray<int>, |
929 StlContainerView<tuple<const int*, size_t> >::type>(); | 929 StlContainerView<tuple<const int*, size_t> >::type>(); |
930 StaticAssertTypeEq<NativeArray<double>, | 930 StaticAssertTypeEq<NativeArray<double>, |
931 StlContainerView<tuple<linked_ptr<double>, int> >::type>(); | 931 StlContainerView<tuple<linked_ptr<double>, int> >::type>(); |
932 | 932 |
933 StaticAssertTypeEq<const NativeArray<int>, | 933 StaticAssertTypeEq<const NativeArray<int>, |
934 StlContainerView<tuple<const int*, int> >::const_reference>(); | 934 StlContainerView<tuple<const int*, int> >::const_reference>(); |
935 | 935 |
936 int a1[3] = { 0, 1, 2 }; | 936 int a1[3] = { 0, 1, 2 }; |
937 const int* const p1 = a1; | 937 const int* const p1 = a1; |
938 NativeArray<int> a2 = StlContainerView<tuple<const int*, int> >:: | 938 NativeArray<int> a2 = StlContainerView<tuple<const int*, int> >:: |
939 ConstReference(make_tuple(p1, 3)); | 939 ConstReference(make_tuple(p1, 3)); |
940 EXPECT_EQ(3, a2.size()); | 940 EXPECT_EQ(3U, a2.size()); |
941 EXPECT_EQ(a1, a2.begin()); | 941 EXPECT_EQ(a1, a2.begin()); |
942 | 942 |
943 const NativeArray<int> a3 = StlContainerView<tuple<int*, size_t> >:: | 943 const NativeArray<int> a3 = StlContainerView<tuple<int*, size_t> >:: |
944 Copy(make_tuple(static_cast<int*>(a1), 3)); | 944 Copy(make_tuple(static_cast<int*>(a1), 3)); |
945 ASSERT_EQ(3, a3.size()); | 945 ASSERT_EQ(3U, a3.size()); |
946 EXPECT_EQ(0, a3.begin()[0]); | 946 EXPECT_EQ(0, a3.begin()[0]); |
947 EXPECT_EQ(1, a3.begin()[1]); | 947 EXPECT_EQ(1, a3.begin()[1]); |
948 EXPECT_EQ(2, a3.begin()[2]); | 948 EXPECT_EQ(2, a3.begin()[2]); |
949 | 949 |
950 // Makes sure a1 and a3 aren't aliases. | 950 // Makes sure a1 and a3 aren't aliases. |
951 a1[0] = 3; | 951 a1[0] = 3; |
952 EXPECT_EQ(0, a3.begin()[0]); | 952 EXPECT_EQ(0, a3.begin()[0]); |
953 } | 953 } |
954 | 954 |
955 } // namespace | 955 } // namespace |
956 } // namespace internal | 956 } // namespace internal |
957 } // namespace testing | 957 } // namespace testing |
OLD | NEW |