@@ -1467,3 +1467,355 @@ TEST(ValueTest, ModOperator)
14671467 v = -150 ;
14681468 ASSERT_EQ (v % " -Infinity" , -150 );
14691469}
1470+
1471+ TEST (ValueTest, EqualityOperators)
1472+ {
1473+ {
1474+ Value v1 = 10 ;
1475+ Value v2 = 10 ;
1476+ Value v3 = 8 ;
1477+
1478+ ASSERT_TRUE (v1 == v2);
1479+ ASSERT_FALSE (v1 != v2);
1480+
1481+ ASSERT_FALSE (v1 == v3);
1482+ ASSERT_TRUE (v1 != v3);
1483+
1484+ ASSERT_FALSE (v2 == v3);
1485+ ASSERT_TRUE (v2 != v3);
1486+ }
1487+
1488+ {
1489+ Value v1 = -4.25 ;
1490+ Value v2 = -4.25 ;
1491+ Value v3 = 5.312 ;
1492+
1493+ ASSERT_TRUE (v1 == v2);
1494+ ASSERT_FALSE (v1 != v2);
1495+
1496+ ASSERT_FALSE (v1 == v3);
1497+ ASSERT_TRUE (v1 != v3);
1498+
1499+ ASSERT_FALSE (v2 == v3);
1500+ ASSERT_TRUE (v2 != v3);
1501+ }
1502+
1503+ {
1504+ Value v1 = true ;
1505+ Value v2 = true ;
1506+ Value v3 = false ;
1507+
1508+ ASSERT_TRUE (v1 == v2);
1509+ ASSERT_FALSE (v1 != v2);
1510+
1511+ ASSERT_FALSE (v1 == v3);
1512+ ASSERT_TRUE (v1 != v3);
1513+
1514+ ASSERT_FALSE (v2 == v3);
1515+ ASSERT_TRUE (v2 != v3);
1516+ }
1517+
1518+ {
1519+ Value v1 = " abC def" ;
1520+ Value v2 = " abC def" ;
1521+ Value v3 = " abc dEf" ;
1522+ Value v4 = " hello world" ;
1523+
1524+ ASSERT_TRUE (v1 == v2);
1525+ ASSERT_FALSE (v1 != v2);
1526+
1527+ ASSERT_TRUE (v1 == v3);
1528+ ASSERT_FALSE (v1 != v3);
1529+
1530+ ASSERT_TRUE (v2 == v3);
1531+ ASSERT_FALSE (v2 != v3);
1532+
1533+ ASSERT_FALSE (v1 == v4);
1534+ ASSERT_TRUE (v1 != v4);
1535+
1536+ ASSERT_FALSE (v2 == v4);
1537+ ASSERT_TRUE (v2 != v4);
1538+
1539+ ASSERT_FALSE (v3 == v4);
1540+ ASSERT_TRUE (v3 != v4);
1541+ }
1542+
1543+ {
1544+ Value v1 (Value::SpecialValue::Infinity);
1545+ Value v2 (Value::SpecialValue::Infinity);
1546+ Value v3 (Value::SpecialValue::NegativeInfinity);
1547+ Value v4 (Value::SpecialValue::NegativeInfinity);
1548+ Value v5 (Value::SpecialValue::NaN);
1549+ Value v6 (Value::SpecialValue::NaN);
1550+
1551+ ASSERT_TRUE (v1 == v2);
1552+ ASSERT_FALSE (v1 != v2);
1553+
1554+ ASSERT_TRUE (v3 == v4);
1555+ ASSERT_FALSE (v3 != v4);
1556+
1557+ // TODO: Enable this after #196 is fixed
1558+ /* ASSERT_TRUE(v5 == v6);
1559+ ASSERT_FALSE(v5 != v6);*/
1560+
1561+ ASSERT_FALSE (v1 == v3);
1562+ ASSERT_TRUE (v1 != v3);
1563+
1564+ ASSERT_FALSE (v1 == v5);
1565+ ASSERT_TRUE (v1 != v5);
1566+
1567+ ASSERT_FALSE (v3 == v5);
1568+ ASSERT_TRUE (v3 != v5);
1569+ }
1570+
1571+ {
1572+ Value v1 = 5.00 ;
1573+ Value v2 = 5 ;
1574+ Value v3 = 6 ;
1575+
1576+ ASSERT_TRUE (v1 == v2);
1577+ ASSERT_FALSE (v1 != v2);
1578+
1579+ ASSERT_FALSE (v1 == v3);
1580+ ASSERT_TRUE (v1 != v3);
1581+
1582+ ASSERT_FALSE (v2 == v3);
1583+ ASSERT_TRUE (v2 != v3);
1584+ }
1585+
1586+ {
1587+ Value v1 = 1 ;
1588+ Value v2 = true ;
1589+ Value v3 = false ;
1590+
1591+ ASSERT_TRUE (v1 == v2);
1592+ ASSERT_FALSE (v1 != v2);
1593+
1594+ ASSERT_FALSE (v1 == v3);
1595+ ASSERT_TRUE (v1 != v3);
1596+
1597+ ASSERT_FALSE (v2 == v3);
1598+ ASSERT_TRUE (v2 != v3);
1599+ }
1600+
1601+ {
1602+ Value v1 = 5.25 ;
1603+ Value v2 = " 5.25" ;
1604+ Value v3 = " 5.26" ;
1605+
1606+ ASSERT_TRUE (v1 == v2);
1607+ ASSERT_FALSE (v1 != v2);
1608+
1609+ ASSERT_FALSE (v1 == v3);
1610+ ASSERT_TRUE (v1 != v3);
1611+
1612+ ASSERT_FALSE (v2 == v3);
1613+ ASSERT_TRUE (v2 != v3);
1614+ }
1615+
1616+ {
1617+ Value v1 = 1 ;
1618+ Value v2 = true ;
1619+ Value v3 = false ;
1620+
1621+ ASSERT_TRUE (v1 == v2);
1622+ ASSERT_FALSE (v1 != v2);
1623+
1624+ ASSERT_FALSE (v1 == v3);
1625+ ASSERT_TRUE (v1 != v3);
1626+
1627+ ASSERT_FALSE (v2 == v3);
1628+ ASSERT_TRUE (v2 != v3);
1629+ }
1630+
1631+ {
1632+ Value v1 = 5 ;
1633+ Value v2 = 0 ;
1634+ Value v3 (Value::SpecialValue::Infinity);
1635+ Value v4 (Value::SpecialValue::NegativeInfinity);
1636+ Value v5 (Value::SpecialValue::NaN);
1637+
1638+ ASSERT_FALSE (v1 == v3);
1639+ ASSERT_TRUE (v1 != v3);
1640+
1641+ ASSERT_FALSE (v1 == v4);
1642+ ASSERT_TRUE (v1 != v4);
1643+
1644+ ASSERT_FALSE (v1 == v5);
1645+ ASSERT_TRUE (v1 != v5);
1646+
1647+ // TODO: Enable this after #198 is fixed
1648+ /* ASSERT_FALSE(v2 == v5);
1649+ ASSERT_TRUE(v2 != v5);*/
1650+ }
1651+
1652+ {
1653+ Value v1 = true ;
1654+ Value v2 = false ;
1655+ Value v3 = " true" ;
1656+ Value v4 = " false" ;
1657+ Value v5 = " TRUE" ;
1658+ Value v6 = " FALSE" ;
1659+
1660+ ASSERT_TRUE (v1 == v3);
1661+ ASSERT_FALSE (v1 != v3);
1662+
1663+ ASSERT_TRUE (v2 == v4);
1664+ ASSERT_FALSE (v2 != v4);
1665+
1666+ ASSERT_FALSE (v1 == v2);
1667+ ASSERT_TRUE (v1 != v2);
1668+
1669+ ASSERT_FALSE (v2 == v3);
1670+ ASSERT_TRUE (v2 != v3);
1671+
1672+ ASSERT_TRUE (v1 == v5);
1673+ ASSERT_FALSE (v1 != v5);
1674+
1675+ ASSERT_TRUE (v2 == v6);
1676+ ASSERT_FALSE (v2 != v6);
1677+ }
1678+
1679+ {
1680+ Value v1 = true ;
1681+ Value v2 = false ;
1682+ Value v3 (Value::SpecialValue::Infinity);
1683+ Value v4 (Value::SpecialValue::NegativeInfinity);
1684+ Value v5 (Value::SpecialValue::NaN);
1685+
1686+ ASSERT_FALSE (v1 == v3);
1687+ ASSERT_TRUE (v1 != v3);
1688+
1689+ ASSERT_FALSE (v1 == v4);
1690+ ASSERT_TRUE (v1 != v4);
1691+
1692+ ASSERT_FALSE (v1 == v5);
1693+ ASSERT_TRUE (v1 != v5);
1694+
1695+ ASSERT_FALSE (v2 == v5);
1696+ ASSERT_TRUE (v2 != v5);
1697+ }
1698+
1699+ {
1700+ Value v1 = " Infinity" ;
1701+ Value v2 = " infinity" ;
1702+ Value v3 = " -Infinity" ;
1703+ Value v4 = " -infinity" ;
1704+ Value v5 = " NaN" ;
1705+ Value v6 = " nan" ;
1706+ Value v7 (Value::SpecialValue::Infinity);
1707+ Value v8 (Value::SpecialValue::NegativeInfinity);
1708+ Value v9 (Value::SpecialValue::NaN);
1709+
1710+ // Infinity
1711+ ASSERT_TRUE (v1 == v7);
1712+ ASSERT_FALSE (v1 != v7);
1713+
1714+ ASSERT_FALSE (v1 == v8);
1715+ ASSERT_TRUE (v1 != v8);
1716+
1717+ ASSERT_FALSE (v1 == v9);
1718+ ASSERT_TRUE (v1 != v9);
1719+
1720+ // infinity
1721+ ASSERT_TRUE (v2 == v7);
1722+ ASSERT_FALSE (v2 != v7);
1723+
1724+ ASSERT_FALSE (v2 == v8);
1725+ ASSERT_TRUE (v2 != v8);
1726+
1727+ ASSERT_FALSE (v2 == v9);
1728+ ASSERT_TRUE (v2 != v9);
1729+
1730+ // -Infinity
1731+ ASSERT_FALSE (v3 == v7);
1732+ ASSERT_TRUE (v3 != v7);
1733+
1734+ ASSERT_TRUE (v3 == v8);
1735+ ASSERT_FALSE (v3 != v8);
1736+
1737+ ASSERT_FALSE (v3 == v9);
1738+ ASSERT_TRUE (v3 != v9);
1739+
1740+ // -infinity
1741+ ASSERT_FALSE (v4 == v7);
1742+ ASSERT_TRUE (v4 != v7);
1743+
1744+ ASSERT_TRUE (v4 == v8);
1745+ ASSERT_FALSE (v4 != v8);
1746+
1747+ ASSERT_FALSE (v4 == v9);
1748+ ASSERT_TRUE (v4 != v9);
1749+
1750+ // NaN
1751+ ASSERT_FALSE (v5 == v7);
1752+ ASSERT_TRUE (v5 != v7);
1753+
1754+ ASSERT_FALSE (v5 == v8);
1755+ ASSERT_TRUE (v5 != v8);
1756+
1757+ // TODO: Enable this after #197 is fixed
1758+ /* ASSERT_TRUE(v5 == v9);
1759+ ASSERT_FALSE(v5 != v9);*/
1760+
1761+ // nan
1762+ ASSERT_FALSE (v6 == v7);
1763+ ASSERT_TRUE (v6 != v7);
1764+
1765+ ASSERT_FALSE (v6 == v8);
1766+ ASSERT_TRUE (v6 != v8);
1767+
1768+ ASSERT_TRUE (v6 == v9);
1769+ ASSERT_FALSE (v6 != v9);
1770+ }
1771+
1772+ {
1773+ Value v1 = " abc" ;
1774+ Value v2 = " " ;
1775+ Value v3 = " " ;
1776+ Value v4 = " 0" ;
1777+ Value v5 (Value::SpecialValue::Infinity);
1778+ Value v6 (Value::SpecialValue::NegativeInfinity);
1779+ Value v7 (Value::SpecialValue::NaN);
1780+
1781+ // Infinity
1782+ ASSERT_FALSE (v1 == v5);
1783+ ASSERT_TRUE (v1 != v5);
1784+
1785+ ASSERT_FALSE (v2 == v5);
1786+ ASSERT_TRUE (v2 != v5);
1787+
1788+ ASSERT_FALSE (v3 == v5);
1789+ ASSERT_TRUE (v3 != v5);
1790+
1791+ ASSERT_FALSE (v4 == v5);
1792+ ASSERT_TRUE (v4 != v5);
1793+
1794+ // -Infinity
1795+ ASSERT_FALSE (v1 == v6);
1796+ ASSERT_TRUE (v1 != v6);
1797+
1798+ ASSERT_FALSE (v2 == v6);
1799+ ASSERT_TRUE (v2 != v6);
1800+
1801+ ASSERT_FALSE (v3 == v6);
1802+ ASSERT_TRUE (v3 != v6);
1803+
1804+ ASSERT_FALSE (v4 == v6);
1805+ ASSERT_TRUE (v4 != v6);
1806+
1807+ // NaN
1808+ ASSERT_FALSE (v1 == v7);
1809+ ASSERT_TRUE (v1 != v7);
1810+
1811+ ASSERT_FALSE (v2 == v7);
1812+ ASSERT_TRUE (v2 != v7);
1813+
1814+ ASSERT_FALSE (v3 == v7);
1815+ ASSERT_TRUE (v3 != v7);
1816+
1817+ // TODO: Enable this after #198 is fixed
1818+ /* ASSERT_FALSE(v4 == v7);
1819+ ASSERT_TRUE(v4 != v7);*/
1820+ }
1821+ }
0 commit comments