Doc #73770 [Com]: Truth table errors
| From: | andrewgrom at rambler dot ru | Date: | Sat, 17 Dec 2016 18:19:48 +0000 |
| Subject: | Doc #73770 [Com]: Truth table errors | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-14263@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73770&edit=1
ID: 73770
Comment by: andrewgrom at rambler dot ru
Reported by: rjhdby@php.net
Summary: Truth table errors
Status: Open
Type: Documentation Problem
Package: COM related
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
The problem is more complex. It is bitwise operation.
$T = new VARIANT(255,VT_UI1);
$F = new VARIANT(0,VT_UI1);
$N = new VARIANT(VT_NULL,VT_UI1);
echo variant_imp($T, $F).PHP_EOL;
echo variant_imp($T, $T).PHP_EOL;
echo variant_imp($T, $N).PHP_EOL;
echo variant_imp($F, $F).PHP_EOL;
echo variant_imp($F, $T).PHP_EOL;
echo variant_imp($F, $N).PHP_EOL;
echo variant_imp($N, $F).PHP_EOL;
echo variant_imp($N, $T).PHP_EOL;
echo variant_imp($N, $N).PHP_EOL;
0
255
1 <--- Not null
255
255
255
254 <--- Not null. True in all bits except one
255
255 <--- Totaly not null. True in all bits
Previous Comments:
------------------------------------------------------------------------
[2016-12-17 11:41:20] requinix@php.net
When I try
foreach ([true, false, null] as $i)
foreach ([true, false, null] as $j) {
$v = variant_imp($i, $j);
$v = (variant_get_type($v) == VT_NULL ? null : (int)$v);
printf("variant_imp(%s, %s) = %s\n", json_encode($i), json_encode($j), json_encode($v));
}
I get
variant_imp(true, true) = -1
variant_imp(true, false) = 0
variant_imp(true, null) = null
variant_imp(false, true) = -1
variant_imp(false, false) = -1
variant_imp(false, null) = -1
variant_imp(null, true) = -1
variant_imp(null, false) = null
variant_imp(null, null) = null
true->false should be false ("true implies false" is wrong). true->null,
null->false, and null->null should all be unknown.
------------------------------------------------------------------------
[2016-12-17 09:12:19] rjhdby@php.net
Description:
------------
---
From manual page: http://www.php.net/function.variant-imp
---
Truth table for bitwise implication is not correct.
Must be
If left is If right is then the result is
TRUE TRUE TRUE
TRUE FALSE TRUE >> FALSE
TRUE NULL TRUE >> FALSE
FALSE TRUE TRUE
FALSE FALSE TRUE
FALSE NULL TRUE
NULL TRUE TRUE
NULL FALSE NULL >> TRUE
NULL NULL NULL >> TRUE
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73770&edit=1