Convert only Number instances to number when evaluate domain for inversion

Closes #15159
(grafted from 88cc5493f11bb7dc50026f87e34b416812eae666)

--HG--
branch : 8.0
This commit is contained in:
Cédric Krier committed 2026-10-12 12:42:56 +02:00
1 parent 082564ceda
commit 8237437e53
3 files changed
+101 -2

No files matched your search

+6 -2
View File
@@ -2981,9 +2981,13 @@
return ((a.isDate == b.isDate) &&
(a.isDateTime == b.isDateTime) &&
(a.valueOf() == b.valueOf()));
} else if ((a instanceof Number) || (b instanceof Number)) {
return (Number(a) === Number(b));
} else {
if (a instanceof Number) {
a = a.valueOf();
}
if (b instanceof Number) {
b = b.valueOf();
}
return (a === b);
}
};
+38
View File
@@ -2969,6 +2969,44 @@
var now = new Date();
[
[[['x', '=', 42]], {'x': 42}, true],
[[['x', '=', 42]], {'x': new Number(42)}, true],
[[['x', '=', 42]], {'x': 0}, false],
[[['x', '=', 42]], {'x': new Number(0)}, false],
[[['x', '=', 42]], {'x': null}, false],
[[['x', '=', new Number(42)]], {'x': 42}, true],
[[['x', '=', new Number(42)]], {'x': new Number(42)}, true],
[[['x', '=', new Number(42)]], {'x': 0}, false],
[[['x', '=', new Number(42)]], {'x': new Number(0)}, false],
[[['x', '=', new Number(42)]], {'x': null}, false],
[[['x', '=', 0]], {'x': 0}, true],
[[['x', '=', 0]], {'x': new Number(0)}, true],
[[['x', '=', 0]], {'x': null}, false],
[[['x', '=', new Number(0)]], {'x': 0}, true],
[[['x', '=', new Number(0)]], {'x': new Number(0)}, true],
[[['x', '=', new Number(0)]], {'x': null}, false],
[[['x', '=', null]], {'x': 0}, false],
[[['x', '=', null]], {'x': new Number(0)}, false],
[[['x', '=', null]], {'x': null}, true],
[[['x', '!=', 42]], {'x': 42}, false],
[[['x', '!=', 42]], {'x': new Number(42)}, false],
[[['x', '!=', 42]], {'x': 0}, true],
[[['x', '!=', 42]], {'x': new Number(0)}, true],
[[['x', '!=', 42]], {'x': null}, true],
[[['x', '!=', new Number(42)]], {'x': 42}, false],
[[['x', '!=', new Number(42)]], {'x': new Number(42)}, false],
[[['x', '!=', new Number(42)]], {'x': 0}, true],
[[['x', '!=', new Number(42)]], {'x': new Number(0)}, true],
[[['x', '!=', new Number(42)]], {'x': null}, true],
[[['x', '!=', 0]], {'x': 0}, false],
[[['x', '!=', 0]], {'x': new Number(0)}, false],
[[['x', '!=', 0]], {'x': null}, true],
[[['x', '!=', new Number(0)]], {'x': 0}, false],
[[['x', '!=', new Number(0)]], {'x': new Number(0)}, false],
[[['x', '!=', new Number(0)]], {'x': null}, true],
[[['x', '!=', null]], {'x': 0}, true],
[[['x', '!=', null]], {'x': new Number(0)}, true],
[[['x', '!=', null]], {'x': null}, false],
[[['x', '>', 5]], {'x': 6}, true],
[[['x', '>', 5]], {'x': 4}, false],
[[['x', '>', null]], {'x': today}, false],
+57
View File
@@ -884,6 +884,63 @@ class DomainInversionTestCase(TestCase):
unique_value(domain, single_value=False), (False, None, None))
def test_evaldomain(self):
domain = [['x', '=', 42]]
self.assertTrue(eval_domain(domain, {'x': 42}))
self.assertTrue(eval_domain(domain, {'x': Decimal('42')}))
self.assertFalse(eval_domain(domain, {'x': 0}))
self.assertFalse(eval_domain(domain, {'x': Decimal('0')}))
self.assertFalse(eval_domain(domain, {'x': None}))
domain = [['x', '=', Decimal('42')]]
self.assertTrue(eval_domain(domain, {'x': 42}))
self.assertTrue(eval_domain(domain, {'x': Decimal('42')}))
self.assertFalse(eval_domain(domain, {'x': 0}))
self.assertFalse(eval_domain(domain, {'x': Decimal('0')}))
self.assertFalse(eval_domain(domain, {'x': None}))
domain = [['x', '=', 0]]
self.assertTrue(eval_domain(domain, {'x': 0}))
self.assertTrue(eval_domain(domain, {'x': Decimal('0')}))
self.assertFalse(eval_domain(domain, {'x': None}))
domain = [['x', '=', Decimal('0')]]
self.assertTrue(eval_domain(domain, {'x': 0}))
self.assertTrue(eval_domain(domain, {'x': Decimal('0')}))
self.assertFalse(eval_domain(domain, {'x': None}))
domain = [['x', '=', None]]
self.assertFalse(eval_domain(domain, {'x': 0}))
self.assertFalse(eval_domain(domain, {'x': Decimal('0')}))
self.assertTrue(eval_domain(domain, {'x': None}))
domain = [['x', '!=', 42]]
self.assertFalse(eval_domain(domain, {'x': 42}))
self.assertFalse(eval_domain(domain, {'x': Decimal('42')}))
self.assertTrue(eval_domain(domain, {'x': Decimal('0')}))
self.assertTrue(eval_domain(domain, {'x': None}))
domain = [['x', '!=', Decimal('42')]]
self.assertFalse(eval_domain(domain, {'x': 42}))
self.assertFalse(eval_domain(domain, {'x': Decimal('42')}))
self.assertTrue(eval_domain(domain, {'x': Decimal('0')}))
self.assertTrue(eval_domain(domain, {'x': None}))
domain = [['x', '!=', 0]]
self.assertFalse(eval_domain(domain, {'x': 0}))
self.assertFalse(eval_domain(domain, {'x': Decimal('0')}))
self.assertTrue(eval_domain(domain, {'x': None}))
domain = [['x', '!=', Decimal('0')]]
self.assertFalse(eval_domain(domain, {'x': 0}))
self.assertFalse(eval_domain(domain, {'x': Decimal('0')}))
self.assertTrue(eval_domain(domain, {'x': None}))
domain = [['x', '!=', None]]
self.assertTrue(eval_domain(domain, {'x': 0}))
self.assertTrue(eval_domain(domain, {'x': Decimal('0')}))
self.assertFalse(eval_domain(domain, {'x': None}))
domain = [['x', '>', 5]]
self.assertTrue(eval_domain(domain, {'x': 6}))
self.assertFalse(eval_domain(domain, {'x': 4}))