@@ -1629,3 +1629,355 @@ TEST(ValueTest, ModOperator)
16291629 v = -150 ;
16301630 ASSERT_EQ (v % " -Infinity" , -150 );
16311631}
1632+
1633+ TEST (ValueTest, EqualityOperators)
1634+ {
1635+ {
1636+ Value v1 = 10 ;
1637+ Value v2 = 10 ;
1638+ Value v3 = 8 ;
1639+
1640+ ASSERT_TRUE (v1 == v2);
1641+ ASSERT_FALSE (v1 != v2);
1642+
1643+ ASSERT_FALSE (v1 == v3);
1644+ ASSERT_TRUE (v1 != v3);
1645+
1646+ ASSERT_FALSE (v2 == v3);
1647+ ASSERT_TRUE (v2 != v3);
1648+ }
1649+
1650+ {
1651+ Value v1 = -4.25 ;
1652+ Value v2 = -4.25 ;
1653+ Value v3 = 5.312 ;
1654+
1655+ ASSERT_TRUE (v1 == v2);
1656+ ASSERT_FALSE (v1 != v2);
1657+
1658+ ASSERT_FALSE (v1 == v3);
1659+ ASSERT_TRUE (v1 != v3);
1660+
1661+ ASSERT_FALSE (v2 == v3);
1662+ ASSERT_TRUE (v2 != v3);
1663+ }
1664+
1665+ {
1666+ Value v1 = true ;
1667+ Value v2 = true ;
1668+ Value v3 = false ;
1669+
1670+ ASSERT_TRUE (v1 == v2);
1671+ ASSERT_FALSE (v1 != v2);
1672+
1673+ ASSERT_FALSE (v1 == v3);
1674+ ASSERT_TRUE (v1 != v3);
1675+
1676+ ASSERT_FALSE (v2 == v3);
1677+ ASSERT_TRUE (v2 != v3);
1678+ }
1679+
1680+ {
1681+ Value v1 = " abC def" ;
1682+ Value v2 = " abC def" ;
1683+ Value v3 = " abc dEf" ;
1684+ Value v4 = " hello world" ;
1685+
1686+ ASSERT_TRUE (v1 == v2);
1687+ ASSERT_FALSE (v1 != v2);
1688+
1689+ ASSERT_TRUE (v1 == v3);
1690+ ASSERT_FALSE (v1 != v3);
1691+
1692+ ASSERT_TRUE (v2 == v3);
1693+ ASSERT_FALSE (v2 != v3);
1694+
1695+ ASSERT_FALSE (v1 == v4);
1696+ ASSERT_TRUE (v1 != v4);
1697+
1698+ ASSERT_FALSE (v2 == v4);
1699+ ASSERT_TRUE (v2 != v4);
1700+
1701+ ASSERT_FALSE (v3 == v4);
1702+ ASSERT_TRUE (v3 != v4);
1703+ }
1704+
1705+ {
1706+ Value v1 (Value::SpecialValue::Infinity);
1707+ Value v2 (Value::SpecialValue::Infinity);
1708+ Value v3 (Value::SpecialValue::NegativeInfinity);
1709+ Value v4 (Value::SpecialValue::NegativeInfinity);
1710+ Value v5 (Value::SpecialValue::NaN);
1711+ Value v6 (Value::SpecialValue::NaN);
1712+
1713+ ASSERT_TRUE (v1 == v2);
1714+ ASSERT_FALSE (v1 != v2);
1715+
1716+ ASSERT_TRUE (v3 == v4);
1717+ ASSERT_FALSE (v3 != v4);
1718+
1719+ // TODO: Enable this after #196 is fixed
1720+ /* ASSERT_TRUE(v5 == v6);
1721+ ASSERT_FALSE(v5 != v6);*/
1722+
1723+ ASSERT_FALSE (v1 == v3);
1724+ ASSERT_TRUE (v1 != v3);
1725+
1726+ ASSERT_FALSE (v1 == v5);
1727+ ASSERT_TRUE (v1 != v5);
1728+
1729+ ASSERT_FALSE (v3 == v5);
1730+ ASSERT_TRUE (v3 != v5);
1731+ }
1732+
1733+ {
1734+ Value v1 = 5.00 ;
1735+ Value v2 = 5 ;
1736+ Value v3 = 6 ;
1737+
1738+ ASSERT_TRUE (v1 == v2);
1739+ ASSERT_FALSE (v1 != v2);
1740+
1741+ ASSERT_FALSE (v1 == v3);
1742+ ASSERT_TRUE (v1 != v3);
1743+
1744+ ASSERT_FALSE (v2 == v3);
1745+ ASSERT_TRUE (v2 != v3);
1746+ }
1747+
1748+ {
1749+ Value v1 = 1 ;
1750+ Value v2 = true ;
1751+ Value v3 = false ;
1752+
1753+ ASSERT_TRUE (v1 == v2);
1754+ ASSERT_FALSE (v1 != v2);
1755+
1756+ ASSERT_FALSE (v1 == v3);
1757+ ASSERT_TRUE (v1 != v3);
1758+
1759+ ASSERT_FALSE (v2 == v3);
1760+ ASSERT_TRUE (v2 != v3);
1761+ }
1762+
1763+ {
1764+ Value v1 = 5.25 ;
1765+ Value v2 = " 5.25" ;
1766+ Value v3 = " 5.26" ;
1767+
1768+ ASSERT_TRUE (v1 == v2);
1769+ ASSERT_FALSE (v1 != v2);
1770+
1771+ ASSERT_FALSE (v1 == v3);
1772+ ASSERT_TRUE (v1 != v3);
1773+
1774+ ASSERT_FALSE (v2 == v3);
1775+ ASSERT_TRUE (v2 != v3);
1776+ }
1777+
1778+ {
1779+ Value v1 = 1 ;
1780+ Value v2 = true ;
1781+ Value v3 = false ;
1782+
1783+ ASSERT_TRUE (v1 == v2);
1784+ ASSERT_FALSE (v1 != v2);
1785+
1786+ ASSERT_FALSE (v1 == v3);
1787+ ASSERT_TRUE (v1 != v3);
1788+
1789+ ASSERT_FALSE (v2 == v3);
1790+ ASSERT_TRUE (v2 != v3);
1791+ }
1792+
1793+ {
1794+ Value v1 = 5 ;
1795+ Value v2 = 0 ;
1796+ Value v3 (Value::SpecialValue::Infinity);
1797+ Value v4 (Value::SpecialValue::NegativeInfinity);
1798+ Value v5 (Value::SpecialValue::NaN);
1799+
1800+ ASSERT_FALSE (v1 == v3);
1801+ ASSERT_TRUE (v1 != v3);
1802+
1803+ ASSERT_FALSE (v1 == v4);
1804+ ASSERT_TRUE (v1 != v4);
1805+
1806+ ASSERT_FALSE (v1 == v5);
1807+ ASSERT_TRUE (v1 != v5);
1808+
1809+ // TODO: Enable this after #198 is fixed
1810+ /* ASSERT_FALSE(v2 == v5);
1811+ ASSERT_TRUE(v2 != v5);*/
1812+ }
1813+
1814+ {
1815+ Value v1 = true ;
1816+ Value v2 = false ;
1817+ Value v3 = " true" ;
1818+ Value v4 = " false" ;
1819+ Value v5 = " TRUE" ;
1820+ Value v6 = " FALSE" ;
1821+
1822+ ASSERT_TRUE (v1 == v3);
1823+ ASSERT_FALSE (v1 != v3);
1824+
1825+ ASSERT_TRUE (v2 == v4);
1826+ ASSERT_FALSE (v2 != v4);
1827+
1828+ ASSERT_FALSE (v1 == v2);
1829+ ASSERT_TRUE (v1 != v2);
1830+
1831+ ASSERT_FALSE (v2 == v3);
1832+ ASSERT_TRUE (v2 != v3);
1833+
1834+ ASSERT_TRUE (v1 == v5);
1835+ ASSERT_FALSE (v1 != v5);
1836+
1837+ ASSERT_TRUE (v2 == v6);
1838+ ASSERT_FALSE (v2 != v6);
1839+ }
1840+
1841+ {
1842+ Value v1 = true ;
1843+ Value v2 = false ;
1844+ Value v3 (Value::SpecialValue::Infinity);
1845+ Value v4 (Value::SpecialValue::NegativeInfinity);
1846+ Value v5 (Value::SpecialValue::NaN);
1847+
1848+ ASSERT_FALSE (v1 == v3);
1849+ ASSERT_TRUE (v1 != v3);
1850+
1851+ ASSERT_FALSE (v1 == v4);
1852+ ASSERT_TRUE (v1 != v4);
1853+
1854+ ASSERT_FALSE (v1 == v5);
1855+ ASSERT_TRUE (v1 != v5);
1856+
1857+ ASSERT_FALSE (v2 == v5);
1858+ ASSERT_TRUE (v2 != v5);
1859+ }
1860+
1861+ {
1862+ Value v1 = " Infinity" ;
1863+ Value v2 = " infinity" ;
1864+ Value v3 = " -Infinity" ;
1865+ Value v4 = " -infinity" ;
1866+ Value v5 = " NaN" ;
1867+ Value v6 = " nan" ;
1868+ Value v7 (Value::SpecialValue::Infinity);
1869+ Value v8 (Value::SpecialValue::NegativeInfinity);
1870+ Value v9 (Value::SpecialValue::NaN);
1871+
1872+ // Infinity
1873+ ASSERT_TRUE (v1 == v7);
1874+ ASSERT_FALSE (v1 != v7);
1875+
1876+ ASSERT_FALSE (v1 == v8);
1877+ ASSERT_TRUE (v1 != v8);
1878+
1879+ ASSERT_FALSE (v1 == v9);
1880+ ASSERT_TRUE (v1 != v9);
1881+
1882+ // infinity
1883+ ASSERT_TRUE (v2 == v7);
1884+ ASSERT_FALSE (v2 != v7);
1885+
1886+ ASSERT_FALSE (v2 == v8);
1887+ ASSERT_TRUE (v2 != v8);
1888+
1889+ ASSERT_FALSE (v2 == v9);
1890+ ASSERT_TRUE (v2 != v9);
1891+
1892+ // -Infinity
1893+ ASSERT_FALSE (v3 == v7);
1894+ ASSERT_TRUE (v3 != v7);
1895+
1896+ ASSERT_TRUE (v3 == v8);
1897+ ASSERT_FALSE (v3 != v8);
1898+
1899+ ASSERT_FALSE (v3 == v9);
1900+ ASSERT_TRUE (v3 != v9);
1901+
1902+ // -infinity
1903+ ASSERT_FALSE (v4 == v7);
1904+ ASSERT_TRUE (v4 != v7);
1905+
1906+ ASSERT_TRUE (v4 == v8);
1907+ ASSERT_FALSE (v4 != v8);
1908+
1909+ ASSERT_FALSE (v4 == v9);
1910+ ASSERT_TRUE (v4 != v9);
1911+
1912+ // NaN
1913+ ASSERT_FALSE (v5 == v7);
1914+ ASSERT_TRUE (v5 != v7);
1915+
1916+ ASSERT_FALSE (v5 == v8);
1917+ ASSERT_TRUE (v5 != v8);
1918+
1919+ // TODO: Enable this after #197 is fixed
1920+ /* ASSERT_TRUE(v5 == v9);
1921+ ASSERT_FALSE(v5 != v9);*/
1922+
1923+ // nan
1924+ ASSERT_FALSE (v6 == v7);
1925+ ASSERT_TRUE (v6 != v7);
1926+
1927+ ASSERT_FALSE (v6 == v8);
1928+ ASSERT_TRUE (v6 != v8);
1929+
1930+ ASSERT_TRUE (v6 == v9);
1931+ ASSERT_FALSE (v6 != v9);
1932+ }
1933+
1934+ {
1935+ Value v1 = " abc" ;
1936+ Value v2 = " " ;
1937+ Value v3 = " " ;
1938+ Value v4 = " 0" ;
1939+ Value v5 (Value::SpecialValue::Infinity);
1940+ Value v6 (Value::SpecialValue::NegativeInfinity);
1941+ Value v7 (Value::SpecialValue::NaN);
1942+
1943+ // Infinity
1944+ ASSERT_FALSE (v1 == v5);
1945+ ASSERT_TRUE (v1 != v5);
1946+
1947+ ASSERT_FALSE (v2 == v5);
1948+ ASSERT_TRUE (v2 != v5);
1949+
1950+ ASSERT_FALSE (v3 == v5);
1951+ ASSERT_TRUE (v3 != v5);
1952+
1953+ ASSERT_FALSE (v4 == v5);
1954+ ASSERT_TRUE (v4 != v5);
1955+
1956+ // -Infinity
1957+ ASSERT_FALSE (v1 == v6);
1958+ ASSERT_TRUE (v1 != v6);
1959+
1960+ ASSERT_FALSE (v2 == v6);
1961+ ASSERT_TRUE (v2 != v6);
1962+
1963+ ASSERT_FALSE (v3 == v6);
1964+ ASSERT_TRUE (v3 != v6);
1965+
1966+ ASSERT_FALSE (v4 == v6);
1967+ ASSERT_TRUE (v4 != v6);
1968+
1969+ // NaN
1970+ ASSERT_FALSE (v1 == v7);
1971+ ASSERT_TRUE (v1 != v7);
1972+
1973+ ASSERT_FALSE (v2 == v7);
1974+ ASSERT_TRUE (v2 != v7);
1975+
1976+ ASSERT_FALSE (v3 == v7);
1977+ ASSERT_TRUE (v3 != v7);
1978+
1979+ // TODO: Enable this after #198 is fixed
1980+ /* ASSERT_FALSE(v4 == v7);
1981+ ASSERT_TRUE(v4 != v7);*/
1982+ }
1983+ }
0 commit comments