diff --git a/tests/pointer/1.0/IPointer.hal b/tests/pointer/1.0/IPointer.hal
new file mode 100644
index 0000000..e68fb31
--- /dev/null
+++ b/tests/pointer/1.0/IPointer.hal
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.tests.pointer@1.0;
+
+interface IPointer {
+  // type declarations
+  struct Sam { int32_t data; };
+  struct Ada { ref<Sam> s_ptr; };
+  struct Bob { ref<Ada> a_ptr; ref<Sam> s_ptr; };
+  struct Cin { Ada a; ref<Bob> b_ptr; };
+  struct Dom { Cin c; };
+
+  typedef ref<int32_t> Int32Ptr;
+  typedef ref<Sam>     SamPtr;
+
+  struct Ptr {
+    ref<Ada>[5] ptr_array;
+    ref<Ada[5]> array_ptr;
+    Int32Ptr int_ptr;
+    ref<int32_t[5]> int_array_ptr;
+    ref<int32_t>[5] int_ptr_array;
+    ref<string> str_ref;
+    vec<ref<Ada>> a_ptr_vec;
+    ref<vec<Ada>> a_vec_ptr;
+  };
+
+  // test cases
+  foo1(Sam s, SamPtr s_ptr);
+  foo2(Sam s, Ada a);
+  foo3(Sam s, Ada a, Bob b);
+  foo4(ref<Sam> s_ptr);
+  foo5(Ada a, Bob b);
+  foo6(ref<Ada> a_ptr);
+  foo7(ref<Ada> a_ptr, ref<Bob> b_ptr);
+  foo8(Dom d);
+  foo9(ref<string> str_ref);
+  foo10(vec<ref<Sam>> s_ptr_vec);
+  foo11(ref<vec<Sam>> s_vec_ptr);
+  foo12(ref<Sam[5]> s_array_ref);
+  foo13(ref<Sam>[5] s_ref_array);
+  foo14(ref<ref<ref<Sam>>> s_3ptr);
+  foo15(ref<ref<ref<int32_t>>> i_3ptr);
+  foo16(Ptr p);
+  foo17(ref<Ptr> p);
+  foo18(ref<string> str_ref, ref<string> str_ref2, string str);
+  foo19(ref<vec<Ada>> a_vec_ref, vec<Ada> a_vec, ref<vec<Ada>> a_vec_ref2);
+  foo20(vec<ref<Sam>> s_ptr_vec);
+  foo21(ref<Ada[1][2][3]> a_array_ptr);
+  foo22(ref<Ada>[1][2][3] a_ptr_array);
+
+  bar1() generates (Sam s, ref<Sam> s_ptr);
+  bar2() generates (Sam s, Ada a);
+  bar3() generates (Sam s, Ada a, Bob b);
+  bar4() generates (ref<Sam> s_ptr);
+  bar5() generates (Ada a, Bob b);
+  bar6() generates (ref<Ada> a_ptr);
+  bar7() generates (ref<Ada> a_ptr, ref<Bob> b_ptr);
+  bar8() generates (Dom d);
+  bar9() generates (ref<string> str_ref);
+  bar10() generates (vec<ref<Sam>> s_ptr_vec);
+  bar11() generates (ref<vec<Sam>> s_vec_ptr);
+  bar12() generates (ref<Sam[5]> s_array_ref);
+  bar13() generates (ref<Sam>[5] s_ref_array);
+  bar14() generates (ref<ref<ref<Sam>>> s_3ptr);
+  bar15() generates (ref<ref<ref<int32_t>>> i_3ptr);
+  bar16() generates (Ptr p);
+  bar17() generates (ref<Ptr> p);
+  bar18() generates (ref<string> str_ref, ref<string> str_ref2, string str);
+  bar19() generates (ref<vec<Ada>> a_vec_ref, vec<Ada> a_vec, ref<vec<Ada>> a_vec_ref2);
+  bar20() generates (vec<ref<Sam>> s_ptr_vec);
+  bar21() generates (ref<Ada[1][2][3]> a_array_ptr);
+  bar22() generates (ref<Ada>[1][2][3] a_ptr_array);
+
+  getErrors() generates(int32_t errors);
+};
