| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |