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

Side by Side 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: Make loads and stores byte relative 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/assert.h" 5 #include "vm/assert.h"
6 #include "vm/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/object_store.h" 10 #include "vm/object_store.h"
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 1585
1586 other_array = Array::New(kArrayLen - 1); 1586 other_array = Array::New(kArrayLen - 1);
1587 other_array.SetAt(0, array); 1587 other_array.SetAt(0, array);
1588 other_array.SetAt(2, array); 1588 other_array.SetAt(2, array);
1589 EXPECT(!array.Equals(other_array)); 1589 EXPECT(!array.Equals(other_array));
1590 1590
1591 EXPECT_EQ(0, Array::Handle(Array::Empty()).Length()); 1591 EXPECT_EQ(0, Array::Handle(Array::Empty()).Length());
1592 } 1592 }
1593 1593
1594 1594
1595 TEST_CASE(ByteBuffer) {
1596 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
1597 intptr_t data_length = ARRAY_SIZE(data);
1598
1599 const ByteBuffer& array1 =
1600 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1601 EXPECT(!array1.IsNull());
1602 EXPECT_EQ(data_length, array1.Length());
1603 EXPECT_EQ(-3, array1.At<int8_t>(0));
1604 EXPECT_EQ(253, array1.At<uint8_t>(0));
1605 EXPECT_EQ(-2, array1.At<int8_t>(1));
1606 EXPECT_EQ(254, array1.At<uint8_t>(1));
1607 EXPECT_EQ(-1, array1.At<int8_t>(2));
1608 EXPECT_EQ(255, array1.At<uint8_t>(2));
1609 EXPECT_EQ(0, array1.At<int8_t>(3));
1610 EXPECT_EQ(0, array1.At<uint8_t>(3));
1611 EXPECT_EQ(1, array1.At<int8_t>(4));
1612 EXPECT_EQ(1, array1.At<uint8_t>(4));
1613 EXPECT_EQ(2, array1.At<int8_t>(5));
1614 EXPECT_EQ(2, array1.At<uint8_t>(5));
1615
1616 const ByteBuffer& array2 =
1617 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1618 EXPECT(!array1.IsNull());
1619 EXPECT_EQ(data_length, array2.Length());
1620 EXPECT(array1.Equals(array2));
1621 EXPECT(array2.Equals(array1));
1622
1623 array1.SetAt<uint8_t>(0, 123);
1624 array2.SetAt<int8_t>(2, -123);
1625 EXPECT(array1.Equals(array2));
1626 EXPECT(array2.Equals(array1));
1627 }
1628
1629
1630 TEST_CASE(ByteBufferAlignedAccess) {
1631 uint8_t data[16];
1632 intptr_t data_length = ARRAY_SIZE(data);
1633
1634 const ByteBuffer& array1 =
1635 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1636 EXPECT(!array1.IsNull());
1637 EXPECT_EQ(data_length, array1.Length());
1638
1639 const ByteBuffer& array2 =
1640 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1641 EXPECT(!array2.IsNull());
1642 EXPECT_EQ(data_length, array2.Length());
1643
1644 memset(data, 0xAA, ARRAY_SIZE(data));
1645 array1.SetAt<float>(0, FLT_MIN);
1646 array1.SetAt<float>(4, FLT_MAX);
1647 EXPECT_EQ(FLT_MIN, array2.At<float>(0));
1648 EXPECT_EQ(FLT_MAX, array2.At<float>(4));
1649
1650 memset(data, 0xAA, ARRAY_SIZE(data));
1651 array1.SetAt<float>(0, 0.0f);
1652 EXPECT_EQ(0.0f, array2.At<float>(0));
1653 array1.SetAt<float>(4, 1.0f);
1654 EXPECT_EQ(1.0f, array2.At<float>(4));
1655
1656 memset(data, 0xAA, ARRAY_SIZE(data));
1657 array1.SetAt<double>(0, DBL_MIN);
1658 EXPECT_EQ(DBL_MIN, array2.At<double>(0));
1659 array1.SetAt<double>(8, DBL_MAX);
1660 EXPECT_EQ(DBL_MAX, array2.At<double>(8));
1661
1662 memset(data, 0xAA, ARRAY_SIZE(data));
1663 array1.SetAt<double>(0, 0.0);
1664 EXPECT_EQ(0.0, array2.At<double>(0));
1665 array1.SetAt<double>(8, 1.0);
1666 EXPECT_EQ(1.0, array2.At<double>(8));
1667 }
1668
1669
1670 TEST_CASE(ByteBufferUnlignedAccess) {
1671 uint8_t data[24];
1672 intptr_t data_length = ARRAY_SIZE(data);
1673
1674 const ByteBuffer& array1 =
1675 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1676 EXPECT(!array1.IsNull());
1677 EXPECT_EQ(data_length, array1.Length());
1678
1679 const ByteBuffer& array2 =
1680 ByteBuffer::Handle(ByteBuffer::New(data, data_length));
1681 EXPECT(!array2.IsNull());
1682 EXPECT_EQ(data_length, array2.Length());
1683
1684 int float_misalign = 3;
1685 memset(data, 0xAA, ARRAY_SIZE(data));
1686 array1.SetUnalignedAt<float>(float_misalign, FLT_MIN);
1687 array1.SetUnalignedAt<float>(4 + float_misalign, FLT_MAX);
1688 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(float_misalign));
1689 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + float_misalign));
1690
1691 memset(data, 0xAA, ARRAY_SIZE(data));
1692 array1.SetUnalignedAt<float>(float_misalign, 0.0f);
1693 EXPECT_EQ(0.0f, array2.UnalignedAt<float>(float_misalign));
1694 array1.SetUnalignedAt<float>(4 + float_misalign, 1.0f);
1695 EXPECT_EQ(1.0f, array2.UnalignedAt<float>(4 + float_misalign));
1696
1697 int double_misalign = 5;
1698 memset(data, 0xAA, ARRAY_SIZE(data));
1699 array1.SetUnalignedAt<double>(double_misalign, DBL_MIN);
1700 EXPECT_EQ(DBL_MIN, array2.UnalignedAt<double>(double_misalign));
1701 array1.SetUnalignedAt<double>(8 + double_misalign, DBL_MAX);
1702 EXPECT_EQ(DBL_MAX,
1703 array2.UnalignedAt<double>(8+ double_misalign));
1704
1705 memset(data, 0xAA, ARRAY_SIZE(data));
1706 array1.SetUnalignedAt<double>(double_misalign, 0.0);
1707 EXPECT_EQ(0.0, array2.UnalignedAt<double>(double_misalign));
1708 array1.SetUnalignedAt<double>(8 + double_misalign, 1.0);
1709 EXPECT_EQ(1.0, array2.UnalignedAt<double>(8 + double_misalign));
1710 }
1711
1712
1595 TEST_CASE(Script) { 1713 TEST_CASE(Script) {
1596 const char* url_chars = "builtin:test-case"; 1714 const char* url_chars = "builtin:test-case";
1597 const char* source_chars = "This will not compile."; 1715 const char* source_chars = "This will not compile.";
1598 const String& url = String::Handle(String::New(url_chars)); 1716 const String& url = String::Handle(String::New(url_chars));
1599 const String& source = String::Handle(String::New(source_chars)); 1717 const String& source = String::Handle(String::New(source_chars));
1600 const Script& script = Script::Handle(Script::New(url, 1718 const Script& script = Script::Handle(Script::New(url,
1601 source, 1719 source,
1602 RawScript::kSource)); 1720 RawScript::kSource));
1603 EXPECT(!script.IsNull()); 1721 EXPECT(!script.IsNull());
1604 EXPECT(script.IsScript()); 1722 EXPECT(script.IsScript());
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 cls = iterator.GetNextClass(); 2067 cls = iterator.GetNextClass();
1950 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); 2068 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw()));
1951 count++; 2069 count++;
1952 } 2070 }
1953 ASSERT(count == 2); 2071 ASSERT(count == 2);
1954 } 2072 }
1955 2073
1956 #endif // TARGET_ARCH_IA32. 2074 #endif // TARGET_ARCH_IA32.
1957 2075
1958 } // namespace dart 2076 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698