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

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: 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object_store.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 intptr_t length = 16;
1632 uint8_t* data = new uint8_t[length];
1633
1634 const ByteBuffer& array1 =
1635 ByteBuffer::Handle(ByteBuffer::New(data, length));
1636 EXPECT(!array1.IsNull());
1637 EXPECT_EQ(length, array1.Length());
1638
1639 const ByteBuffer& array2 =
1640 ByteBuffer::Handle(ByteBuffer::New(data, length));
1641 EXPECT(!array2.IsNull());
1642 EXPECT_EQ(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 delete[] data;
1669 }
1670
1671
1672 TEST_CASE(ByteBufferUnlignedAccess) {
1673 intptr_t length = 24;
1674 uint8_t* data = new uint8_t[length];
1675
1676 const ByteBuffer& array1 =
1677 ByteBuffer::Handle(ByteBuffer::New(data, length));
1678 EXPECT(!array1.IsNull());
1679 EXPECT_EQ(length, array1.Length());
1680
1681 const ByteBuffer& array2 =
1682 ByteBuffer::Handle(ByteBuffer::New(data, length));
1683 EXPECT(!array2.IsNull());
1684 EXPECT_EQ(length, array2.Length());
1685
1686 int float_misalign = 3;
1687 memset(data, 0xAA, ARRAY_SIZE(data));
1688 array1.SetUnalignedAt<float>(float_misalign, FLT_MIN);
1689 array1.SetUnalignedAt<float>(4 + float_misalign, FLT_MAX);
1690 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(float_misalign));
1691 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + float_misalign));
1692
1693 memset(data, 0xAA, ARRAY_SIZE(data));
1694 array1.SetUnalignedAt<float>(float_misalign, 0.0f);
1695 EXPECT_EQ(0.0f, array2.UnalignedAt<float>(float_misalign));
1696 array1.SetUnalignedAt<float>(4 + float_misalign, 1.0f);
1697 EXPECT_EQ(1.0f, array2.UnalignedAt<float>(4 + float_misalign));
1698
1699 int double_misalign = 5;
1700 memset(data, 0xAA, ARRAY_SIZE(data));
1701 array1.SetUnalignedAt<double>(double_misalign, DBL_MIN);
1702 EXPECT_EQ(DBL_MIN, array2.UnalignedAt<double>(double_misalign));
1703 array1.SetUnalignedAt<double>(8 + double_misalign, DBL_MAX);
1704 EXPECT_EQ(DBL_MAX,
1705 array2.UnalignedAt<double>(8 + double_misalign));
1706
1707 memset(data, 0xAA, ARRAY_SIZE(data));
1708 array1.SetUnalignedAt<double>(double_misalign, 0.0);
1709 EXPECT_EQ(0.0, array2.UnalignedAt<double>(double_misalign));
1710 array1.SetUnalignedAt<double>(8 + double_misalign, 1.0);
1711 EXPECT_EQ(1.0, array2.UnalignedAt<double>(8 + double_misalign));
1712
1713 delete[] data;
1714 }
1715
1716
1717 TEST_CASE(ByteBufferSkewedUnalignedBaseAccess) {
1718 intptr_t length = 24;
1719 uint8_t* data = new uint8_t[length];
1720
1721 int skew = 2;
1722
1723 const ByteBuffer& array1 =
1724 ByteBuffer::Handle(ByteBuffer::New(data + 3, length));
1725 EXPECT(!array1.IsNull());
1726 EXPECT_EQ(length, array1.Length());
1727
1728 const ByteBuffer& array2 =
1729 ByteBuffer::Handle(ByteBuffer::New(data + 1, length));
1730 EXPECT(!array2.IsNull());
1731 EXPECT_EQ(length, array2.Length());
1732
1733 memset(data, 0xAA, ARRAY_SIZE(data));
1734 array1.SetUnalignedAt<float>(0, FLT_MIN);
1735 array1.SetUnalignedAt<float>(4, FLT_MAX);
1736 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(0 + skew));
1737 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + skew));
1738
1739 memset(data, 0xAA, ARRAY_SIZE(data));
1740 array1.SetUnalignedAt<float>(0, 0.0f);
1741 EXPECT_EQ(0.0f, array2.UnalignedAt<float>(0 + skew));
1742 array2.SetUnalignedAt<float>(4 + skew, 1.0f);
1743 EXPECT_EQ(1.0f, array1.UnalignedAt<float>(4));
1744
1745 memset(data, 0xAA, ARRAY_SIZE(data));
1746 array1.SetUnalignedAt<double>(0, DBL_MIN);
1747 EXPECT_EQ(DBL_MIN, array2.UnalignedAt<double>(0 + skew));
1748 array2.SetUnalignedAt<double>(8 + skew, DBL_MAX);
1749 EXPECT_EQ(DBL_MAX, array1.UnalignedAt<double>(8));
1750
1751 memset(data, 0xAA, ARRAY_SIZE(data));
1752 array1.SetUnalignedAt<double>(0, 0.0);
1753 EXPECT_EQ(0.0, array2.UnalignedAt<double>(0 + skew));
1754 array2.SetUnalignedAt<double>(8 + skew, 1.0);
1755 EXPECT_EQ(1.0, array1.UnalignedAt<double>(8));
1756
1757 delete[] data;
1758 }
1759
1760
1595 TEST_CASE(Script) { 1761 TEST_CASE(Script) {
1596 const char* url_chars = "builtin:test-case"; 1762 const char* url_chars = "builtin:test-case";
1597 const char* source_chars = "This will not compile."; 1763 const char* source_chars = "This will not compile.";
1598 const String& url = String::Handle(String::New(url_chars)); 1764 const String& url = String::Handle(String::New(url_chars));
1599 const String& source = String::Handle(String::New(source_chars)); 1765 const String& source = String::Handle(String::New(source_chars));
1600 const Script& script = Script::Handle(Script::New(url, 1766 const Script& script = Script::Handle(Script::New(url,
1601 source, 1767 source,
1602 RawScript::kSource)); 1768 RawScript::kSource));
1603 EXPECT(!script.IsNull()); 1769 EXPECT(!script.IsNull());
1604 EXPECT(script.IsScript()); 1770 EXPECT(script.IsScript());
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 cls = iterator.GetNextClass(); 2115 cls = iterator.GetNextClass();
1950 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); 2116 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw()));
1951 count++; 2117 count++;
1952 } 2118 }
1953 ASSERT(count == 2); 2119 ASSERT(count == 2);
1954 } 2120 }
1955 2121
1956 #endif // TARGET_ARCH_IA32. 2122 #endif // TARGET_ARCH_IA32.
1957 2123
1958 } // namespace dart 2124 } // namespace dart
OLDNEW
« 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