| ... | @@ -1651,115 +1651,219 @@ test "insertSlice" { | ... | @@ -1651,115 +1651,219 @@ test "insertSlice" { |
| 1651 | } | 1651 | } |
| 1652 | } | 1652 | } |
| 1653 | | 1653 | |
| 1654 | test "replaceRange" { | 1654 | test "ArrayList.replaceRange" { |
| 1655 | var arena = std.heap.ArenaAllocator.init(testing.allocator); | 1655 | const a = testing.allocator; |
| 1656 | defer arena.deinit(); | 1656 | |
| 1657 | const a = arena.allocator(); | 1657 | { |
| | 1658 | var list = ArrayList(i32).init(a); |
| | 1659 | defer list.deinit(); |
| | 1660 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1661 | |
| | 1662 | try list.replaceRange(1, 0, &[_]i32{ 0, 0, 0 }); |
| | 1663 | |
| | 1664 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 2, 3, 4, 5 }, list.items); |
| | 1665 | } |
| | 1666 | { |
| | 1667 | var list = ArrayList(i32).init(a); |
| | 1668 | defer list.deinit(); |
| | 1669 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1670 | |
| | 1671 | try list.replaceRange(1, 1, &[_]i32{ 0, 0, 0 }); |
| | 1672 | |
| | 1673 | try testing.expectEqualSlices( |
| | 1674 | i32, |
| | 1675 | &[_]i32{ 1, 0, 0, 0, 3, 4, 5 }, |
| | 1676 | list.items, |
| | 1677 | ); |
| | 1678 | } |
| | 1679 | { |
| | 1680 | var list = ArrayList(i32).init(a); |
| | 1681 | defer list.deinit(); |
| | 1682 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1683 | |
| | 1684 | try list.replaceRange(1, 2, &[_]i32{ 0, 0, 0 }); |
| | 1685 | |
| | 1686 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 4, 5 }, list.items); |
| | 1687 | } |
| | 1688 | { |
| | 1689 | var list = ArrayList(i32).init(a); |
| | 1690 | defer list.deinit(); |
| | 1691 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1692 | |
| | 1693 | try list.replaceRange(1, 3, &[_]i32{ 0, 0, 0 }); |
| | 1694 | |
| | 1695 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 5 }, list.items); |
| | 1696 | } |
| | 1697 | { |
| | 1698 | var list = ArrayList(i32).init(a); |
| | 1699 | defer list.deinit(); |
| | 1700 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1701 | |
| | 1702 | try list.replaceRange(1, 4, &[_]i32{ 0, 0, 0 }); |
| | 1703 | |
| | 1704 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0 }, list.items); |
| | 1705 | } |
| | 1706 | } |
| | 1707 | |
| | 1708 | test "ArrayList.replaceRangeAssumeCapacity" { |
| | 1709 | const a = testing.allocator; |
| | 1710 | |
| | 1711 | { |
| | 1712 | var list = ArrayList(i32).init(a); |
| | 1713 | defer list.deinit(); |
| | 1714 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1715 | |
| | 1716 | list.replaceRangeAssumeCapacity(1, 0, &[_]i32{ 0, 0, 0 }); |
| | 1717 | |
| | 1718 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 2, 3, 4, 5 }, list.items); |
| | 1719 | } |
| | 1720 | { |
| | 1721 | var list = ArrayList(i32).init(a); |
| | 1722 | defer list.deinit(); |
| | 1723 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1724 | |
| | 1725 | list.replaceRangeAssumeCapacity(1, 1, &[_]i32{ 0, 0, 0 }); |
| | 1726 | |
| | 1727 | try testing.expectEqualSlices( |
| | 1728 | i32, |
| | 1729 | &[_]i32{ 1, 0, 0, 0, 3, 4, 5 }, |
| | 1730 | list.items, |
| | 1731 | ); |
| | 1732 | } |
| | 1733 | { |
| | 1734 | var list = ArrayList(i32).init(a); |
| | 1735 | defer list.deinit(); |
| | 1736 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1737 | |
| | 1738 | list.replaceRangeAssumeCapacity(1, 2, &[_]i32{ 0, 0, 0 }); |
| | 1739 | |
| | 1740 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 4, 5 }, list.items); |
| | 1741 | } |
| | 1742 | { |
| | 1743 | var list = ArrayList(i32).init(a); |
| | 1744 | defer list.deinit(); |
| | 1745 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1746 | |
| | 1747 | list.replaceRangeAssumeCapacity(1, 3, &[_]i32{ 0, 0, 0 }); |
| | 1748 | |
| | 1749 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 5 }, list.items); |
| | 1750 | } |
| | 1751 | { |
| | 1752 | var list = ArrayList(i32).init(a); |
| | 1753 | defer list.deinit(); |
| | 1754 | try list.appendSlice(&[_]i32{ 1, 2, 3, 4, 5 }); |
| 1658 | | 1755 | |
| 1659 | const init = [_]i32{ 1, 2, 3, 4, 5 }; | 1756 | list.replaceRangeAssumeCapacity(1, 4, &[_]i32{ 0, 0, 0 }); |
| 1660 | const new = [_]i32{ 0, 0, 0 }; | | |
| 1661 | | 1757 | |
| 1662 | const result_zero = [_]i32{ 1, 0, 0, 0, 2, 3, 4, 5 }; | 1758 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0 }, list.items); |
| 1663 | const result_eq = [_]i32{ 1, 0, 0, 0, 5 }; | 1759 | } |
| 1664 | const result_le = [_]i32{ 1, 0, 0, 0, 4, 5 }; | 1760 | } |
| 1665 | const result_gt = [_]i32{ 1, 0, 0, 0 }; | 1761 | |
| | 1762 | test "ArrayListUnmanaged.replaceRange" { |
| | 1763 | const a = testing.allocator; |
| 1666 | | 1764 | |
| 1667 | { | 1765 | { |
| 1668 | var list_zero = ArrayList(i32).init(a); | 1766 | var list = ArrayListUnmanaged(i32){}; |
| 1669 | var list_eq = ArrayList(i32).init(a); | 1767 | defer list.deinit(a); |
| 1670 | var list_lt = ArrayList(i32).init(a); | 1768 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1671 | var list_gt = ArrayList(i32).init(a); | | |
| 1672 | | 1769 | |
| 1673 | try list_zero.appendSlice(&init); | 1770 | try list.replaceRange(a, 1, 0, &[_]i32{ 0, 0, 0 }); |
| 1674 | try list_eq.appendSlice(&init); | | |
| 1675 | try list_lt.appendSlice(&init); | | |
| 1676 | try list_gt.appendSlice(&init); | | |
| 1677 | | 1771 | |
| 1678 | try list_zero.replaceRange(1, 0, &new); | 1772 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 2, 3, 4, 5 }, list.items); |
| 1679 | try list_eq.replaceRange(1, 3, &new); | 1773 | } |
| 1680 | try list_lt.replaceRange(1, 2, &new); | 1774 | { |
| | 1775 | var list = ArrayListUnmanaged(i32){}; |
| | 1776 | defer list.deinit(a); |
| | 1777 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1681 | | 1778 | |
| 1682 | // after_range > new_items.len in function body | 1779 | try list.replaceRange(a, 1, 1, &[_]i32{ 0, 0, 0 }); |
| 1683 | try testing.expect(1 + 4 > new.len); | | |
| 1684 | try list_gt.replaceRange(1, 4, &new); | | |
| 1685 | | 1780 | |
| 1686 | try testing.expectEqualSlices(i32, list_zero.items, &result_zero); | 1781 | try testing.expectEqualSlices( |
| 1687 | try testing.expectEqualSlices(i32, list_eq.items, &result_eq); | 1782 | i32, |
| 1688 | try testing.expectEqualSlices(i32, list_lt.items, &result_le); | 1783 | &[_]i32{ 1, 0, 0, 0, 3, 4, 5 }, |
| 1689 | try testing.expectEqualSlices(i32, list_gt.items, &result_gt); | 1784 | list.items, |
| | 1785 | ); |
| 1690 | } | 1786 | } |
| 1691 | { | 1787 | { |
| 1692 | var list_zero = ArrayListUnmanaged(i32){}; | 1788 | var list = ArrayListUnmanaged(i32){}; |
| 1693 | var list_eq = ArrayListUnmanaged(i32){}; | 1789 | defer list.deinit(a); |
| 1694 | var list_lt = ArrayListUnmanaged(i32){}; | 1790 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1695 | var list_gt = ArrayListUnmanaged(i32){}; | | |
| 1696 | | 1791 | |
| 1697 | try list_zero.appendSlice(a, &init); | 1792 | try list.replaceRange(a, 1, 2, &[_]i32{ 0, 0, 0 }); |
| 1698 | try list_eq.appendSlice(a, &init); | | |
| 1699 | try list_lt.appendSlice(a, &init); | | |
| 1700 | try list_gt.appendSlice(a, &init); | | |
| 1701 | | 1793 | |
| 1702 | try list_zero.replaceRange(a, 1, 0, &new); | 1794 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 4, 5 }, list.items); |
| 1703 | try list_eq.replaceRange(a, 1, 3, &new); | 1795 | } |
| 1704 | try list_lt.replaceRange(a, 1, 2, &new); | 1796 | { |
| | 1797 | var list = ArrayListUnmanaged(i32){}; |
| | 1798 | defer list.deinit(a); |
| | 1799 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1705 | | 1800 | |
| 1706 | // after_range > new_items.len in function body | 1801 | try list.replaceRange(a, 1, 3, &[_]i32{ 0, 0, 0 }); |
| 1707 | try testing.expect(1 + 4 > new.len); | | |
| 1708 | try list_gt.replaceRange(a, 1, 4, &new); | | |
| 1709 | | 1802 | |
| 1710 | try testing.expectEqualSlices(i32, list_zero.items, &result_zero); | 1803 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 5 }, list.items); |
| 1711 | try testing.expectEqualSlices(i32, list_eq.items, &result_eq); | | |
| 1712 | try testing.expectEqualSlices(i32, list_lt.items, &result_le); | | |
| 1713 | try testing.expectEqualSlices(i32, list_gt.items, &result_gt); | | |
| 1714 | } | 1804 | } |
| | 1805 | { |
| | 1806 | var list = ArrayListUnmanaged(i32){}; |
| | 1807 | defer list.deinit(a); |
| | 1808 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1809 | |
| | 1810 | try list.replaceRange(a, 1, 4, &[_]i32{ 0, 0, 0 }); |
| | 1811 | |
| | 1812 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0 }, list.items); |
| | 1813 | } |
| | 1814 | } |
| | 1815 | |
| | 1816 | test "ArrayListUnmanaged.replaceRangeAssumeCapacity" { |
| | 1817 | const a = testing.allocator; |
| | 1818 | |
| | 1819 | { |
| | 1820 | var list = ArrayListUnmanaged(i32){}; |
| | 1821 | defer list.deinit(a); |
| | 1822 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| | 1823 | |
| | 1824 | list.replaceRangeAssumeCapacity(1, 0, &[_]i32{ 0, 0, 0 }); |
| 1715 | | 1825 | |
| | 1826 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 2, 3, 4, 5 }, list.items); |
| | 1827 | } |
| 1716 | { | 1828 | { |
| 1717 | var list_zero = ArrayList(i32).init(a); | 1829 | var list = ArrayListUnmanaged(i32){}; |
| 1718 | var list_eq = ArrayList(i32).init(a); | 1830 | defer list.deinit(a); |
| 1719 | var list_lt = ArrayList(i32).init(a); | 1831 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1720 | var list_gt = ArrayList(i32).init(a); | | |
| 1721 | | 1832 | |
| 1722 | try list_zero.appendSlice(&init); | 1833 | list.replaceRangeAssumeCapacity(1, 1, &[_]i32{ 0, 0, 0 }); |
| 1723 | try list_eq.appendSlice(&init); | | |
| 1724 | try list_lt.appendSlice(&init); | | |
| 1725 | try list_gt.appendSlice(&init); | | |
| 1726 | | 1834 | |
| 1727 | list_zero.replaceRangeAssumeCapacity(1, 0, &new); | 1835 | try testing.expectEqualSlices( |
| 1728 | list_eq.replaceRangeAssumeCapacity(1, 3, &new); | 1836 | i32, |
| 1729 | list_lt.replaceRangeAssumeCapacity(1, 2, &new); | 1837 | &[_]i32{ 1, 0, 0, 0, 3, 4, 5 }, |
| | 1838 | list.items, |
| | 1839 | ); |
| | 1840 | } |
| | 1841 | { |
| | 1842 | var list = ArrayListUnmanaged(i32){}; |
| | 1843 | defer list.deinit(a); |
| | 1844 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1730 | | 1845 | |
| 1731 | // after_range > new_items.len in function body | 1846 | list.replaceRangeAssumeCapacity(1, 2, &[_]i32{ 0, 0, 0 }); |
| 1732 | try testing.expect(1 + 4 > new.len); | | |
| 1733 | list_gt.replaceRangeAssumeCapacity(1, 4, &new); | | |
| 1734 | | 1847 | |
| 1735 | try testing.expectEqualSlices(i32, list_zero.items, &result_zero); | 1848 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 4, 5 }, list.items); |
| 1736 | try testing.expectEqualSlices(i32, list_eq.items, &result_eq); | | |
| 1737 | try testing.expectEqualSlices(i32, list_lt.items, &result_le); | | |
| 1738 | try testing.expectEqualSlices(i32, list_gt.items, &result_gt); | | |
| 1739 | } | 1849 | } |
| 1740 | { | 1850 | { |
| 1741 | var list_zero = ArrayListUnmanaged(i32){}; | 1851 | var list = ArrayListUnmanaged(i32){}; |
| 1742 | var list_eq = ArrayListUnmanaged(i32){}; | 1852 | defer list.deinit(a); |
| 1743 | var list_lt = ArrayListUnmanaged(i32){}; | 1853 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1744 | var list_gt = ArrayListUnmanaged(i32){}; | | |
| 1745 | | 1854 | |
| 1746 | try list_zero.appendSlice(a, &init); | 1855 | list.replaceRangeAssumeCapacity(1, 3, &[_]i32{ 0, 0, 0 }); |
| 1747 | try list_eq.appendSlice(a, &init); | | |
| 1748 | try list_lt.appendSlice(a, &init); | | |
| 1749 | try list_gt.appendSlice(a, &init); | | |
| 1750 | | 1856 | |
| 1751 | list_zero.replaceRangeAssumeCapacity(1, 0, &new); | 1857 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0, 5 }, list.items); |
| 1752 | list_eq.replaceRangeAssumeCapacity(1, 3, &new); | 1858 | } |
| 1753 | list_lt.replaceRangeAssumeCapacity(1, 2, &new); | 1859 | { |
| | 1860 | var list = ArrayListUnmanaged(i32){}; |
| | 1861 | defer list.deinit(a); |
| | 1862 | try list.appendSlice(a, &[_]i32{ 1, 2, 3, 4, 5 }); |
| 1754 | | 1863 | |
| 1755 | // after_range > new_items.len in function body | 1864 | list.replaceRangeAssumeCapacity(1, 4, &[_]i32{ 0, 0, 0 }); |
| 1756 | try testing.expect(1 + 4 > new.len); | | |
| 1757 | list_gt.replaceRangeAssumeCapacity(1, 4, &new); | | |
| 1758 | | 1865 | |
| 1759 | try testing.expectEqualSlices(i32, list_zero.items, &result_zero); | 1866 | try testing.expectEqualSlices(i32, &[_]i32{ 1, 0, 0, 0 }, list.items); |
| 1760 | try testing.expectEqualSlices(i32, list_eq.items, &result_eq); | | |
| 1761 | try testing.expectEqualSlices(i32, list_lt.items, &result_le); | | |
| 1762 | try testing.expectEqualSlices(i32, list_gt.items, &result_gt); | | |
| 1763 | } | 1867 | } |
| 1764 | } | 1868 | } |
| 1765 | | 1869 | |