Changeset 53473
- Timestamp:
- 06/06/2022 10:48:21 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/pluggable.php
r53472 r53473 2597 2597 * @since 2.6.2 2598 2598 * @since 4.4.0 Uses PHP7 random_int() or the random_compat library if available. 2599 * @since 6.1.0 Returns zero instead of a random number if both `$min` and `$max` are zero. 2599 2600 * 2600 2601 * @global string $rnd_value 2601 2602 * 2602 * @param int $min Lower limit for the generated number. 2603 * @param int $max Upper limit for the generated number. 2603 * @param int $min Optional. Lower limit for the generated number. 2604 * Accepts positive integers or zero. Defaults to 0. 2605 * @param int $max Optional. Upper limit for the generated number. 2606 * Accepts positive integers. Defaults to 4294967295. 2604 2607 * @return int A random number between min and max. 2605 2608 */ 2606 function wp_rand( $min = 0, $max = 0) {2609 function wp_rand( $min = null, $max = null ) { 2607 2610 global $rnd_value; 2608 2611 … … 2610 2613 // truncate integers larger than PHP_INT_MAX to PHP_INT_MAX rather than overflowing them to floats. 2611 2614 $max_random_number = 3000000000 === 2147483647 ? (float) '4294967295' : 4294967295; // 4294967295 = 0xffffffff 2615 2616 if ( null === $min ) { 2617 $min = 0; 2618 } 2619 2620 if ( null === $max ) { 2621 $max = $max_random_number; 2622 } 2612 2623 2613 2624 // We only handle ints, floats are truncated to their integer value. … … 2619 2630 if ( $use_random_int_functionality ) { 2620 2631 try { 2621 $_max = ( 0 != $max ) ? $max : $max_random_number;2622 2632 // wp_rand() can accept arguments in either order, PHP cannot. 2623 $_max = max( $min, $ _max );2624 $_min = min( $min, $ _max );2633 $_max = max( $min, $max ); 2634 $_min = min( $min, $max ); 2625 2635 $val = random_int( $_min, $_max ); 2626 2636 if ( false !== $val ) { … … 2662 2672 2663 2673 // Reduce the value to be within the min - max range. 2664 if ( 0 != $max ) { 2665 $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 ); 2666 } 2674 $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 ); 2667 2675 2668 2676 return abs( (int) $value ); -
trunk/tests/phpunit/tests/pluggable.php
r53231 r53473 225 225 ), 226 226 'wp_rand' => array( 227 'min' => 0,228 'max' => 0,227 'min' => null, 228 'max' => null, 229 229 ), 230 230 'wp_set_password' => array( 'password', 'user_id' ), … … 355 355 $this->assertSame( $current_user, $from_get_user_by ); 356 356 } 357 358 /** 359 * Tests that wp_rand() returns zero. 360 * 361 * @ticket 55194 362 * @dataProvider data_wp_rand_should_return_zero 363 * @covers ::wp_rand 364 * 365 * @param mixed $min Lower limit for the generated number. 366 * @param mixed $max Upper limit for the generated number. 367 */ 368 public function test_wp_rand_should_return_zero( $min, $max ) { 369 $this->assertSame( 0, wp_rand( $min, $max ) ); 370 } 371 372 /** 373 * Data provider. 374 * 375 * @return array 376 */ 377 public function data_wp_rand_should_return_zero() { 378 return array( 379 'min and max as 0' => array( 380 'min' => 0, 381 'max' => 0, 382 ), 383 'min and max as 0.0' => array( 384 'min' => 0.0, 385 'max' => 0.0, 386 ), 387 'min as null, max as 0' => array( 388 'min' => null, 389 'max' => 0, 390 ), 391 ); 392 } 393 394 /** 395 * Tests that wp_rand() returns a value between 1 and 99. 396 * 397 * @ticket 55194 398 * @dataProvider data_wp_rand_should_return_between_1_and_99 399 * @covers ::wp_rand 400 * 401 * @param int $min Lower limit for the generated number. 402 * @param int $max Upper limit for the generated number. 403 */ 404 public function test_wp_rand_should_return_between_1_and_99( $min, $max ) { 405 $this->assertGreaterThan( 406 0, 407 wp_rand( $min, $max ), 408 'The value was not greater than 0' 409 ); 410 411 $this->assertLessThan( 412 100, 413 wp_rand( $min, $max ), 414 'The value was not less than 100' 415 ); 416 } 417 418 /** 419 * Data provider. 420 * 421 * @return array 422 */ 423 public function data_wp_rand_should_return_between_1_and_99() { 424 return array( 425 '1 and 99' => array( 426 'min' => 1, 427 'max' => 99, 428 ), 429 '-1 and 99' => array( 430 'min' => -1, 431 'max' => 99, 432 ), 433 '1 and -99' => array( 434 'min' => 1, 435 'max' => -99, 436 ), 437 '-1 and -99' => array( 438 'min' => -1, 439 'max' => -99, 440 ), 441 '1.0 and 99.0' => array( 442 'min' => 1.0, 443 'max' => 99.0, 444 ), 445 '-1.0 and -99.0' => array( 446 'min' => -1.0, 447 'max' => -99.0, 448 ), 449 ); 450 } 357 451 }
Note: See TracChangeset
for help on using the changeset viewer.