authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 00:53:00+02:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-31 00:53:00+02:00
log5118caf5ab2599ca61b57f68a89aa2d094f51981
treee3752c39dfaa011c6c4c671adc8081885e772786
parent24071c6803ccc0f11b2c4d7c8f22fa8933a98a7c

Added a lot of test cases


1 files changed, 149 insertions(+), 1 deletions(-)

std/zig/parser.zig+149-1
......@@ -1648,6 +1648,13 @@ test "zig fmt" {
16481648 \\
16491649 );
16501650
1651 try testCanonical(
1652 \\extern fn f1(s: [][]align(1) []const []volatile u8) c_int;
1653 \\extern fn f2(s: []align(1) const []align(1) volatile []const volatile u8) c_int;
1654 \\extern fn f3(s: []align(1) const volatile u8) c_int;
1655 \\
1656 );
1657
16511658 try testCanonical(
16521659 \\fn f1(a: bool, b: bool) bool {
16531660 \\ a != b;
......@@ -1716,7 +1723,7 @@ test "zig fmt" {
17161723
17171724 try testCanonical(
17181725 \\test "prefix operators" {
1719 \\ --%~??!*&0;
1726 \\ try return --%~??!*&0;
17201727 \\}
17211728 \\
17221729 );
......@@ -1730,4 +1737,145 @@ test "zig fmt" {
17301737 \\}
17311738 \\
17321739 );
1740
1741 try testCanonical(
1742 \\test "test index" {
1743 \\ a[0];
1744 \\ a[0 + 5];
1745 \\ a[0..];
1746 \\ a[0..5];
1747 \\}
1748 \\
1749 );
1750
1751 try testCanonical(
1752 \\test "test array" {
1753 \\ const a : [2]u8 = [2]u8{ 1, 2 };
1754 \\ const a : [2]u8 = []u8{ 1, 2 };
1755 \\ const a : [0]u8 = []u8{};
1756 \\}
1757 \\
1758 );
1759
1760// PrimaryExpression = Integer | Float | String | CharLiteral | KeywordLiteral | GroupedExpression | BlockExpression(BlockOrExpression) | Symbol | ("@" Symbol FnCallExpression) | ArrayType | FnProto | AsmExpression | ContainerDecl | ("continue" option(":" Symbol)) | ErrorSetDecl | PromiseType
1761 try testCanonical(
1762 \\test "values" {
1763 \\ 1;
1764 \\ 1.0;
1765 \\ "string";
1766 \\ c"cstring";
1767 \\ \\ Multi
1768 \\ \\ line
1769 \\ \\ string
1770 \\ ;
1771 \\ 'c';
1772 \\ true;
1773 \\ false;
1774 \\ null;
1775 \\ undefined;
1776 \\ error;
1777 \\ this;
1778 \\ unreachable;
1779 \\ suspend;
1780 \\}
1781 \\
1782 );
1783
1784 try testCanonical(
1785 \\test "percendence" {
1786 \\ a!b();
1787 \\ (a!b)();
1788 \\ !a!b;
1789 \\ !(a!b);
1790 \\ !a{};
1791 \\ !(a{});
1792 \\ a + b{};
1793 \\ (a + b){};
1794 \\ a << b + c;
1795 \\ (a << b) + c;
1796 \\ a & b << c;
1797 \\ (a & b) << c;
1798 \\ a ^ b & c;
1799 \\ (a ^ b) & c;
1800 \\ a | b ^ c;
1801 \\ (a | b) ^ c;
1802 \\ a == b | c;
1803 \\ (a == b) | c;
1804 \\ a and b == c;
1805 \\ (a and b) == c;
1806 \\ a or b and c;
1807 \\ (a or b) and c;
1808 \\ (a or b) and c;
1809 \\ a = b or c;
1810 \\ (a = b) or c;
1811 \\}
1812 \\
1813 );
1814
1815 try testCanonical(
1816 \\const S = struct {
1817 \\ const Self = this;
1818 \\ f1: u8,
1819 \\
1820 \\ fn method(self: &Self) Self {
1821 \\ return *self;
1822 \\ }
1823 \\
1824 \\ f2: u8,
1825 \\};
1826 \\
1827 \\const Ps = packed struct {
1828 \\ a: u8,
1829 \\ b: u8,
1830 \\
1831 \\ c: u8,
1832 \\};
1833 \\
1834 \\const Es = extern struct {
1835 \\ a: u8,
1836 \\ b: u8,
1837 \\
1838 \\ c: u8,
1839 \\};
1840 \\
1841 );
1842
1843 try testCanonical(
1844 \\const E = enum {
1845 \\ Ok,
1846 \\ SomethingElse = 0,
1847 \\};
1848 \\
1849 \\const E2 = enum(u8) {
1850 \\ Ok,
1851 \\ SomethingElse = 255,
1852 \\ SomethingThird,
1853 \\};
1854 \\
1855 \\const Ee = extern enum {
1856 \\ Ok,
1857 \\ SomethingElse,
1858 \\ SomethingThird,
1859 \\};
1860 \\
1861 \\const Ep = packed enum {
1862 \\ Ok,
1863 \\ SomethingElse,
1864 \\ SomethingThird,
1865 \\};
1866 \\
1867 );
1868
1869 try testCanonical(
1870 \\const a1 = []u8{ };
1871 \\const a2 = []u8{ 1, 2, 3, 4 };
1872 \\const s1 = S{ };
1873 \\const s2 = S{ .a = 1, .b = 2, };
1874 \\
1875 );
1876
1877 try testCanonical(@embedFile("ast.zig"));
1878 try testCanonical(@embedFile("index.zig"));
1879 try testCanonical(@embedFile("parser.zig"));
1880 try testCanonical(@embedFile("tokenizer.zig"));
17331881}