mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-21 00:07:30 +00:00
Random: fixed nextSignedInt() not actually returning signed ints
closes #4646 closes #4645 Impact assessment by core usage search and poggit suggests that the impact of this change will be close to zero. However, since it changes behaviour which plugins might be unknowingly relying on, it's going into 4.1 rather than a patch release.
This commit is contained in:
parent
49a8afd126
commit
60938c8c9d
@ -94,7 +94,7 @@ class Random{
|
||||
$this->z = $this->w;
|
||||
$this->w = ($this->w ^ (($this->w >> 19) & 0x7fffffff) ^ ($t ^ (($t >> 8) & 0x7fffffff))) & 0xffffffff;
|
||||
|
||||
return $this->w;
|
||||
return Binary::signInt($this->w);
|
||||
}
|
||||
|
||||
/**
|
||||
|
43
tests/phpunit/utils/RandomTest.php
Normal file
43
tests/phpunit/utils/RandomTest.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\utils;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class RandomTest extends TestCase{
|
||||
|
||||
public function testNextSignedIntReturnsSignedInts() : void{
|
||||
//use a known seed which should definitely produce negatives
|
||||
$random = new Random(0);
|
||||
$negatives = false;
|
||||
|
||||
for($i = 0; $i < 100; ++$i){
|
||||
if($random->nextSignedInt() < 0){
|
||||
$negatives = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
self::assertTrue($negatives);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user