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

Unified Diff: runtime/vm/object_test.cc

Issue 8429027: Add an external array type to support typed arrays. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address final review comments Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object_store.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object_test.cc
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index aa4efb2973089a81fc588d7590eb7fc95a2eff61..469314284e7de70cb11f4576483dd3afcb1580ec 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -1592,6 +1592,172 @@ TEST_CASE(Array) {
}
+TEST_CASE(ByteBuffer) {
+ uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
+ intptr_t data_length = ARRAY_SIZE(data);
+
+ const ByteBuffer& array1 =
+ ByteBuffer::Handle(ByteBuffer::New(data, data_length));
+ EXPECT(!array1.IsNull());
+ EXPECT_EQ(data_length, array1.Length());
+ EXPECT_EQ(-3, array1.At<int8_t>(0));
+ EXPECT_EQ(253, array1.At<uint8_t>(0));
+ EXPECT_EQ(-2, array1.At<int8_t>(1));
+ EXPECT_EQ(254, array1.At<uint8_t>(1));
+ EXPECT_EQ(-1, array1.At<int8_t>(2));
+ EXPECT_EQ(255, array1.At<uint8_t>(2));
+ EXPECT_EQ(0, array1.At<int8_t>(3));
+ EXPECT_EQ(0, array1.At<uint8_t>(3));
+ EXPECT_EQ(1, array1.At<int8_t>(4));
+ EXPECT_EQ(1, array1.At<uint8_t>(4));
+ EXPECT_EQ(2, array1.At<int8_t>(5));
+ EXPECT_EQ(2, array1.At<uint8_t>(5));
+
+ const ByteBuffer& array2 =
+ ByteBuffer::Handle(ByteBuffer::New(data, data_length));
+ EXPECT(!array1.IsNull());
+ EXPECT_EQ(data_length, array2.Length());
+ EXPECT(array1.Equals(array2));
+ EXPECT(array2.Equals(array1));
+
+ array1.SetAt<uint8_t>(0, 123);
+ array2.SetAt<int8_t>(2, -123);
+ EXPECT(array1.Equals(array2));
+ EXPECT(array2.Equals(array1));
+}
+
+
+TEST_CASE(ByteBufferAlignedAccess) {
+ intptr_t length = 16;
+ uint8_t* data = new uint8_t[length];
+
+ const ByteBuffer& array1 =
+ ByteBuffer::Handle(ByteBuffer::New(data, length));
+ EXPECT(!array1.IsNull());
+ EXPECT_EQ(length, array1.Length());
+
+ const ByteBuffer& array2 =
+ ByteBuffer::Handle(ByteBuffer::New(data, length));
+ EXPECT(!array2.IsNull());
+ EXPECT_EQ(length, array2.Length());
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetAt<float>(0, FLT_MIN);
+ array1.SetAt<float>(4, FLT_MAX);
+ EXPECT_EQ(FLT_MIN, array2.At<float>(0));
+ EXPECT_EQ(FLT_MAX, array2.At<float>(4));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetAt<float>(0, 0.0f);
+ EXPECT_EQ(0.0f, array2.At<float>(0));
+ array1.SetAt<float>(4, 1.0f);
+ EXPECT_EQ(1.0f, array2.At<float>(4));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetAt<double>(0, DBL_MIN);
+ EXPECT_EQ(DBL_MIN, array2.At<double>(0));
+ array1.SetAt<double>(8, DBL_MAX);
+ EXPECT_EQ(DBL_MAX, array2.At<double>(8));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetAt<double>(0, 0.0);
+ EXPECT_EQ(0.0, array2.At<double>(0));
+ array1.SetAt<double>(8, 1.0);
+ EXPECT_EQ(1.0, array2.At<double>(8));
+
+ delete[] data;
+}
+
+
+TEST_CASE(ByteBufferUnlignedAccess) {
+ intptr_t length = 24;
+ uint8_t* data = new uint8_t[length];
+
+ const ByteBuffer& array1 =
+ ByteBuffer::Handle(ByteBuffer::New(data, length));
+ EXPECT(!array1.IsNull());
+ EXPECT_EQ(length, array1.Length());
+
+ const ByteBuffer& array2 =
+ ByteBuffer::Handle(ByteBuffer::New(data, length));
+ EXPECT(!array2.IsNull());
+ EXPECT_EQ(length, array2.Length());
+
+ int float_misalign = 3;
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<float>(float_misalign, FLT_MIN);
+ array1.SetUnalignedAt<float>(4 + float_misalign, FLT_MAX);
+ EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(float_misalign));
+ EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + float_misalign));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<float>(float_misalign, 0.0f);
+ EXPECT_EQ(0.0f, array2.UnalignedAt<float>(float_misalign));
+ array1.SetUnalignedAt<float>(4 + float_misalign, 1.0f);
+ EXPECT_EQ(1.0f, array2.UnalignedAt<float>(4 + float_misalign));
+
+ int double_misalign = 5;
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<double>(double_misalign, DBL_MIN);
+ EXPECT_EQ(DBL_MIN, array2.UnalignedAt<double>(double_misalign));
+ array1.SetUnalignedAt<double>(8 + double_misalign, DBL_MAX);
+ EXPECT_EQ(DBL_MAX,
+ array2.UnalignedAt<double>(8 + double_misalign));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<double>(double_misalign, 0.0);
+ EXPECT_EQ(0.0, array2.UnalignedAt<double>(double_misalign));
+ array1.SetUnalignedAt<double>(8 + double_misalign, 1.0);
+ EXPECT_EQ(1.0, array2.UnalignedAt<double>(8 + double_misalign));
+
+ delete[] data;
+}
+
+
+TEST_CASE(ByteBufferSkewedUnalignedBaseAccess) {
+ intptr_t length = 24;
+ uint8_t* data = new uint8_t[length];
+
+ int skew = 2;
+
+ const ByteBuffer& array1 =
+ ByteBuffer::Handle(ByteBuffer::New(data + 3, length));
+ EXPECT(!array1.IsNull());
+ EXPECT_EQ(length, array1.Length());
+
+ const ByteBuffer& array2 =
+ ByteBuffer::Handle(ByteBuffer::New(data + 1, length));
+ EXPECT(!array2.IsNull());
+ EXPECT_EQ(length, array2.Length());
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<float>(0, FLT_MIN);
+ array1.SetUnalignedAt<float>(4, FLT_MAX);
+ EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(0 + skew));
+ EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + skew));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<float>(0, 0.0f);
+ EXPECT_EQ(0.0f, array2.UnalignedAt<float>(0 + skew));
+ array2.SetUnalignedAt<float>(4 + skew, 1.0f);
+ EXPECT_EQ(1.0f, array1.UnalignedAt<float>(4));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<double>(0, DBL_MIN);
+ EXPECT_EQ(DBL_MIN, array2.UnalignedAt<double>(0 + skew));
+ array2.SetUnalignedAt<double>(8 + skew, DBL_MAX);
+ EXPECT_EQ(DBL_MAX, array1.UnalignedAt<double>(8));
+
+ memset(data, 0xAA, ARRAY_SIZE(data));
+ array1.SetUnalignedAt<double>(0, 0.0);
+ EXPECT_EQ(0.0, array2.UnalignedAt<double>(0 + skew));
+ array2.SetUnalignedAt<double>(8 + skew, 1.0);
+ EXPECT_EQ(1.0, array1.UnalignedAt<double>(8));
+
+ delete[] data;
+}
+
+
TEST_CASE(Script) {
const char* url_chars = "builtin:test-case";
const char* source_chars = "This will not compile.";
« no previous file with comments | « runtime/vm/object_store.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698