diff --git a/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java b/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
index 8054779..d2ce6c8 100644
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
+++ b/libs/rs/java/tests/src/com/android/rs/test/RSTestCore.java
@@ -64,6 +64,7 @@
         unitTests.add(new UT_primitives(this, mRes));
         unitTests.add(new UT_rsdebug(this, mRes));
         unitTests.add(new UT_rstypes(this, mRes));
+        unitTests.add(new UT_vector_array(this, mRes));
         unitTests.add(new UT_fp_mad(this, mRes));
         /*
         unitTests.add(new UnitTest(null, "<Pass>", 1));
diff --git a/libs/rs/java/tests/src/com/android/rs/test/UT_vector_array.java b/libs/rs/java/tests/src/com/android/rs/test/UT_vector_array.java
new file mode 100644
index 0000000..615ce14
--- /dev/null
+++ b/libs/rs/java/tests/src/com/android/rs/test/UT_vector_array.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2010 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 com.android.rs.test;
+
+import android.content.res.Resources;
+import android.renderscript.*;
+
+public class UT_vector_array extends UnitTest {
+    private Resources mRes;
+
+    protected UT_vector_array(RSTestCore rstc, Resources res) {
+        super(rstc, "Vector Array");
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create();
+        ScriptC_vector_array s = new ScriptC_vector_array(pRS, mRes, R.raw.vector_array);
+        pRS.mMessageCallback = mRsMessage;
+        s.invoke_vector_array_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
+
diff --git a/libs/rs/java/tests/src/com/android/rs/test/vector_array.rs b/libs/rs/java/tests/src/com/android/rs/test/vector_array.rs
new file mode 100644
index 0000000..f924ae4
--- /dev/null
+++ b/libs/rs/java/tests/src/com/android/rs/test/vector_array.rs
@@ -0,0 +1,51 @@
+// Copyright (C) 2009 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.
+
+#include "shared.rsh"
+
+#pragma rs export_func(vector_array_test)
+
+typedef struct {
+    float3 arr[2];
+} float3Struct;
+
+float3Struct f;
+
+bool size_test() {
+    bool failed = false;
+    int expectedSize = 2 * 3 * (int) sizeof(float);
+    int actualSize = (int) sizeof(f);
+
+    rsDebug("Size of struct { float3 arr[2]; } (expected):", expectedSize);
+    rsDebug("Size of struct { float3 arr[2]; } (actual)  :", actualSize);
+
+    if (expectedSize != actualSize) {
+        failed = true;
+    }
+
+    return failed;
+}
+
+void vector_array_test() {
+    bool failed = false;
+    failed |= size_test();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
