3v4l.org

run code in 300+ PHP versions simultaneously
<?php $tests = ['1613938511.464898123456789', '1613938511.464898923456789', '1613938511.123456789', '1613938511.12345678910', '1613938519.123456789', '1613938511.999999', '1613938511.999999999999']; foreach ($tests as $test) { echo "Testing : $test\n"; $f = (float)$test; // echo " string=" . $f . " | json =" . json_encode($f); $jsonOne = substr(json_encode($f),0,17); $testOne = substr($test,0,17); echo "\n> Test passed :" . $jsonOne ." =?= ". $testOne . " ::: " . ($jsonOne === $testOne ? 'yes' : 'no'); echo "\n-------------------------------------------------\n"; } // more complex testing $test1MResults = []; $testFailed = []; for ($i = 0; $i < 1000000; $i++) { $testFloat = '1613938511.' . $i; $floatN = (float) $testFloat; $jsonN = json_encode($floatN); $floatJsonN = (float) $jsonN; $absN = (int) abs($floatN - $floatJsonN) * 1000000; /** * Why using or when compare text faild ? because json delete the zero at end of a float , but in our testFloat its composed string 'xx'.$i (10) * Why using int comparasion ? to strict verify that $floatN === $floatJsonN with the 6 digits * * You can play with conditions to see example of fails (that are not really a fail but just a wrong comparasion method) */ $passed = ($jsonN === $testFloat || $absN === 0); $test1MResults[] = $passed; if (false === $passed) { $testFailed[] = [$i, $jsonN, $testFloat, $absN, gettype($absN)]; } } $totalTests = count($test1MResults); $totalSuccess = count(array_filter($test1MResults)); $totalFails = $totalTests - $totalSuccess; print_r("Total Success : " . $totalSuccess . "\n"); print_r("Total Fails : " . ($totalFails) . "\n"); if ($totalFails > 0) { $maxShow = 10 > $totalFails ? $totalFails : 10; for ($i=0; $i < $maxShow; $i++) { print_r(json_encode($testFailed[$i])); echo "\n"; } for ($i=$totalFails; $i > $totalFails - $maxShow; $i--) { print_r(json_encode($testFailed[$i])); echo "\n"; } } echo "\n\n"; /** * Total Success : 1000000 * Total Fails : 0 */
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 2, Position 2 = 37
Branch analysis from position: 2
2 jumps found. (Code = 78) Position 1 = 3, Position 2 = 37
Branch analysis from position: 3
2 jumps found. (Code = 43) Position 1 = 30, Position 2 = 32
Branch analysis from position: 30
1 jumps found. (Code = 42) Position 1 = 33
Branch analysis from position: 33
1 jumps found. (Code = 42) Position 1 = 2
Branch analysis from position: 2
Branch analysis from position: 32
1 jumps found. (Code = 42) Position 1 = 2
Branch analysis from position: 2
Branch analysis from position: 37
1 jumps found. (Code = 42) Position 1 = 77
Branch analysis from position: 77
2 jumps found. (Code = 44) Position 1 = 79, Position 2 = 42
Branch analysis from position: 79
2 jumps found. (Code = 43) Position 1 = 100, Position 2 = 133
Branch analysis from position: 100
2 jumps found. (Code = 43) Position 1 = 102, Position 2 = 104
Branch analysis from position: 102
1 jumps found. (Code = 42) Position 1 = 105
Branch analysis from position: 105
1 jumps found. (Code = 42) Position 1 = 117
Branch analysis from position: 117
2 jumps found. (Code = 44) Position 1 = 119, Position 2 = 108
Branch analysis from position: 119
1 jumps found. (Code = 42) Position 1 = 130
Branch analysis from position: 130
2 jumps found. (Code = 44) Position 1 = 133, Position 2 = 121
Branch analysis from position: 133
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 121
2 jumps found. (Code = 44) Position 1 = 133, Position 2 = 121
Branch analysis from position: 133
Branch analysis from position: 121
Branch analysis from position: 108
2 jumps found. (Code = 44) Position 1 = 119, Position 2 = 108
Branch analysis from position: 119
Branch analysis from position: 108
Branch analysis from position: 104
1 jumps found. (Code = 42) Position 1 = 117
Branch analysis from position: 117
Branch analysis from position: 133
Branch analysis from position: 42
2 jumps found. (Code = 47) Position 1 = 61, Position 2 = 63
Branch analysis from position: 61
2 jumps found. (Code = 43) Position 1 = 68, Position 2 = 76
Branch analysis from position: 68
2 jumps found. (Code = 44) Position 1 = 79, Position 2 = 42
Branch analysis from position: 79
Branch analysis from position: 42
Branch analysis from position: 76
Branch analysis from position: 63
Branch analysis from position: 37
filename:       /in/XKHV4
function name:  (null)
number of ops:  135
compiled vars:  !0 = $tests, !1 = $test, !2 = $f, !3 = $jsonOne, !4 = $testOne, !5 = $test1MResults, !6 = $testFailed, !7 = $i, !8 = $testFloat, !9 = $floatN, !10 = $jsonN, !11 = $floatJsonN, !12 = $absN, !13 = $passed, !14 = $totalTests, !15 = $totalSuccess, !16 = $totalFails, !17 = $maxShow
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   ASSIGN                                                   !0, <array>
    6     1      > FE_RESET_R                                       $19     !0, ->37
          2    > > FE_FETCH_R                                               $19, !1, ->37
    9     3    >   ROPE_INIT                                     3  ~21     'Testing+%3A+'
          4        ROPE_ADD                                      1  ~21     ~21, !1
          5        ROPE_END                                      2  ~20     ~21, '%0A'
          6        ECHO                                                     ~20
   10     7        CAST                                          5  ~23     !1
          8        ASSIGN                                                   !2, ~23
   12     9        INIT_FCALL                                               'substr'
         10        INIT_FCALL                                               'json_encode'
         11        SEND_VAR                                                 !2
         12        DO_ICALL                                         $25     
         13        SEND_VAR                                                 $25
         14        SEND_VAL                                                 0
         15        SEND_VAL                                                 17
         16        DO_ICALL                                         $26     
         17        ASSIGN                                                   !3, $26
   13    18        INIT_FCALL                                               'substr'
         19        SEND_VAR                                                 !1
         20        SEND_VAL                                                 0
         21        SEND_VAL                                                 17
         22        DO_ICALL                                         $28     
         23        ASSIGN                                                   !4, $28
   14    24        CONCAT                                           ~30     '%0A%3E+Test+passed+%3A', !3
         25        CONCAT                                           ~31     ~30, '+%3D%3F%3D+'
         26        CONCAT                                           ~32     ~31, !4
         27        CONCAT                                           ~33     ~32, '+%3A%3A%3A+'
         28        IS_IDENTICAL                                             !3, !4
         29      > JMPZ                                                     ~34, ->32
         30    >   QM_ASSIGN                                        ~35     'yes'
         31      > JMP                                                      ->33
         32    >   QM_ASSIGN                                        ~35     'no'
         33    >   CONCAT                                           ~36     ~33, ~35
         34        ECHO                                                     ~36
   15    35        ECHO                                                     '%0A-------------------------------------------------%0A'
    6    36      > JMP                                                      ->2
         37    >   FE_FREE                                                  $19
   23    38        ASSIGN                                                   !5, <array>
   24    39        ASSIGN                                                   !6, <array>
   25    40        ASSIGN                                                   !7, 0
         41      > JMP                                                      ->77
   26    42    >   CONCAT                                           ~40     '1613938511.', !7
         43        ASSIGN                                                   !8, ~40
   27    44        CAST                                          5  ~42     !8
         45        ASSIGN                                                   !9, ~42
   29    46        INIT_FCALL                                               'json_encode'
         47        SEND_VAR                                                 !9
         48        DO_ICALL                                         $44     
         49        ASSIGN                                                   !10, $44
   30    50        CAST                                          5  ~46     !10
         51        ASSIGN                                                   !11, ~46
   31    52        INIT_FCALL                                               'abs'
         53        SUB                                              ~48     !9, !11
         54        SEND_VAL                                                 ~48
         55        DO_ICALL                                         $49     
         56        CAST                                          4  ~50     $49
         57        MUL                                              ~51     ~50, 1000000
         58        ASSIGN                                                   !12, ~51
   39    59        IS_IDENTICAL                                     ~53     !10, !8
         60      > JMPNZ_EX                                         ~53     ~53, ->63
         61    >   IS_IDENTICAL                                     ~54     !12, 0
         62        BOOL                                             ~53     ~54
         63    >   ASSIGN                                                   !13, ~53
   40    64        ASSIGN_DIM                                               !5
         65        OP_DATA                                                  !13
   42    66        TYPE_CHECK                                    4          !13
         67      > JMPZ                                                     ~57, ->76
   43    68    >   INIT_ARRAY                                       ~59     !7
         69        ADD_ARRAY_ELEMENT                                ~59     !10
         70        ADD_ARRAY_ELEMENT                                ~59     !8
         71        ADD_ARRAY_ELEMENT                                ~59     !12
         72        GET_TYPE                                         ~60     !12
         73        ADD_ARRAY_ELEMENT                                ~59     ~60
         74        ASSIGN_DIM                                               !6
         75        OP_DATA                                                  ~59
   25    76    >   PRE_INC                                                  !7
         77    >   IS_SMALLER                                               !7, 1000000
         78      > JMPNZ                                                    ~62, ->42
   47    79    >   COUNT                                            ~63     !5
         80        ASSIGN                                                   !14, ~63
   48    81        INIT_FCALL                                               'array_filter'
         82        SEND_VAR                                                 !5
         83        DO_ICALL                                         $65     
         84        COUNT                                            ~66     $65
         85        ASSIGN                                                   !15, ~66
   49    86        SUB                                              ~68     !14, !15
         87        ASSIGN                                                   !16, ~68
   50    88        INIT_FCALL                                               'print_r'
         89        CONCAT                                           ~70     'Total+Success+%3A+', !15
         90        CONCAT                                           ~71     ~70, '%0A'
         91        SEND_VAL                                                 ~71
         92        DO_ICALL                                                 
   51    93        INIT_FCALL                                               'print_r'
         94        CONCAT                                           ~73     'Total+Fails+%3A+', !16
         95        CONCAT                                           ~74     ~73, '%0A'
         96        SEND_VAL                                                 ~74
         97        DO_ICALL                                                 
   53    98        IS_SMALLER                                               0, !16
         99      > JMPZ                                                     ~76, ->133
   54   100    >   IS_SMALLER                                               !16, 10
        101      > JMPZ                                                     ~77, ->104
        102    >   QM_ASSIGN                                        ~78     !16
        103      > JMP                                                      ->105
        104    >   QM_ASSIGN                                        ~78     10
        105    >   ASSIGN                                                   !17, ~78
   55   106        ASSIGN                                                   !7, 0
        107      > JMP                                                      ->117
   56   108    >   INIT_FCALL                                               'print_r'
        109        INIT_FCALL                                               'json_encode'
        110        FETCH_DIM_R                                      ~81     !6, !7
        111        SEND_VAL                                                 ~81
        112        DO_ICALL                                         $82     
        113        SEND_VAR                                                 $82
        114        DO_ICALL                                                 
   57   115        ECHO                                                     '%0A'
   55   116        PRE_INC                                                  !7
        117    >   IS_SMALLER                                               !7, !17
        118      > JMPNZ                                                    ~85, ->108
   59   119    >   ASSIGN                                                   !7, !16
        120      > JMP                                                      ->130
   60   121    >   INIT_FCALL                                               'print_r'
        122        INIT_FCALL                                               'json_encode'
        123        FETCH_DIM_R                                      ~87     !6, !7
        124        SEND_VAL                                                 ~87
        125        DO_ICALL                                         $88     
        126        SEND_VAR                                                 $88
        127        DO_ICALL                                                 
   61   128        ECHO                                                     '%0A'
   59   129        PRE_DEC                                                  !7
        130    >   SUB                                              ~91     !16, !17
        131        IS_SMALLER                                               ~91, !7
        132      > JMPNZ                                                    ~92, ->121
   65   133    >   ECHO                                                     '%0A%0A'
   70   134      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
145.45 ms | 1413 KiB | 23 Q