fix and expand hidl_vec::iterator; add const_iterator.

* Fix flipped post++ and ++pre for hidl_vec::iterator
* make it random accessible.
* add const_iterator.

Test: hidl_test
Change-Id: I8649f8598a13e6054c994d30a4daf383d1dae55c
diff --git a/test_main.cpp b/test_main.cpp
index 3ee8bc9..0a7ad90 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -110,7 +110,7 @@
     EXPECT_FALSE(hs1 == stringNE);
 }
 
-TEST_F(LibHidlTest, VecTest) {
+TEST_F(LibHidlTest, VecInitTest) {
     using android::hardware::hidl_vec;
     using std::vector;
     int32_t array[] = {5, 6, 7};
@@ -128,19 +128,65 @@
     hidl_vec<int32_t> v3 = {5, 6, 7}; // initializer_list
     EXPECT_EQ(v3.size(), 3ul);
     EXPECT_ARRAYEQ(v3, array, v3.size());
+}
+
+TEST_F(LibHidlTest, VecIterTest) {
+    int32_t array[] = {5, 6, 7};
+    android::hardware::hidl_vec<int32_t> hv1 = std::vector<int32_t>(array, array + 3);
 
     auto iter = hv1.begin();    // iterator begin()
-    EXPECT_EQ(*iter, 5);
-    iter++;                     // post increment
+    EXPECT_EQ(*iter++, 5);
     EXPECT_EQ(*iter, 6);
-    ++iter;                     // pre increment
+    EXPECT_EQ(*++iter, 7);
+    EXPECT_EQ(*iter--, 7);
+    EXPECT_EQ(*iter, 6);
+    EXPECT_EQ(*--iter, 5);
+
+    iter += 2;
     EXPECT_EQ(*iter, 7);
+    iter -= 2;
+    EXPECT_EQ(*iter, 5);
+
+    iter++;
+    EXPECT_EQ(*(iter + 1), 7);
+    EXPECT_EQ(*(1 + iter), 7);
+    EXPECT_EQ(*(iter - 1), 5);
+    EXPECT_EQ(*iter, 6);
+
+    auto five = iter - 1;
+    auto seven = iter + 1;
+    EXPECT_EQ(seven - five, 2);
+    EXPECT_EQ(five - seven, -2);
+
+    EXPECT_LT(five, seven);
+    EXPECT_LE(five, seven);
+    EXPECT_GT(seven, five);
+    EXPECT_GE(seven, five);
+
+    EXPECT_EQ(seven[0], 7);
+    EXPECT_EQ(five[1], 6);
+}
+
+TEST_F(LibHidlTest, VecIterForTest) {
+    using android::hardware::hidl_vec;
+    int32_t array[] = {5, 6, 7};
+    hidl_vec<int32_t> hv1 = std::vector<int32_t>(array, array + 3);
 
     int32_t sum = 0;            // range based for loop interoperability
     for (auto &&i: hv1) {
         sum += i;
     }
     EXPECT_EQ(sum, 5+6+7);
+
+    for (auto iter = hv1.begin(); iter < hv1.end(); ++iter) {
+        *iter += 10;
+    }
+    const hidl_vec<int32_t> &v4 = hv1;
+    sum = 0;
+    for (const auto &i : v4) {
+        sum += i;
+    }
+    EXPECT_EQ(sum, 15+16+17);
 }
 
 TEST_F(LibHidlTest, ArrayTest) {