radarrplexorganizrnginxsonarrdashboardsabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepage
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							2.8 KiB
						
					
					
				
								<?php
							 | 
						|
								namespace Faker\Test\Provider;
							 | 
						|
								
							 | 
						|
								use Faker\Provider\Biased;
							 | 
						|
								use Faker\Generator;
							 | 
						|
								
							 | 
						|
								class BiasedTest extends \PHPUnit_Framework_TestCase
							 | 
						|
								{
							 | 
						|
								    const MAX = 10;
							 | 
						|
								    const NUMBERS = 25000;
							 | 
						|
								    protected $generator;
							 | 
						|
								    protected $results = array();
							 | 
						|
								    
							 | 
						|
								    protected function setUp()
							 | 
						|
								    {
							 | 
						|
								        $this->generator = new Generator();
							 | 
						|
								        $this->generator->addProvider(new Biased($this->generator));
							 | 
						|
								
							 | 
						|
								        $this->results = array_fill(1, self::MAX, 0);
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    public function performFake($function)
							 | 
						|
								    {
							 | 
						|
								        for($i = 0; $i < self::NUMBERS; $i++) {
							 | 
						|
								            $this->results[$this->generator->biasedNumberBetween(1, self::MAX, $function)]++;
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    public function testUnbiased()
							 | 
						|
								    {
							 | 
						|
								        $this->performFake(array('\Faker\Provider\Biased', 'unbiased'));
							 | 
						|
								
							 | 
						|
								        // assert that all numbers are near the expected unbiased value
							 | 
						|
								        foreach ($this->results as $number => $amount) {
							 | 
						|
								            // integral
							 | 
						|
								            $assumed = (1 / self::MAX * $number) - (1 / self::MAX * ($number - 1));
							 | 
						|
								            // calculate the fraction of the whole area
							 | 
						|
								            $assumed /= 1;
							 | 
						|
								            $this->assertGreaterThan(self::NUMBERS * $assumed * .95, $amount, "Value was more than 5 percent under the expected value");
							 | 
						|
								            $this->assertLessThan(self::NUMBERS * $assumed * 1.05, $amount, "Value was more than 5 percent over the expected value");
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    public function testLinearHigh()
							 | 
						|
								    {
							 | 
						|
								        $this->performFake(array('\Faker\Provider\Biased', 'linearHigh'));
							 | 
						|
								
							 | 
						|
								        foreach ($this->results as $number => $amount) {
							 | 
						|
								            // integral
							 | 
						|
								            $assumed = 0.5 * pow(1 / self::MAX * $number, 2) - 0.5 * pow(1 / self::MAX * ($number - 1), 2);
							 | 
						|
								            // calculate the fraction of the whole area
							 | 
						|
								            $assumed /= pow(1, 2) * .5;
							 | 
						|
								            $this->assertGreaterThan(self::NUMBERS * $assumed * .9, $amount, "Value was more than 10 percent under the expected value");
							 | 
						|
								            $this->assertLessThan(self::NUMBERS * $assumed * 1.1, $amount, "Value was more than 10 percent over the expected value");
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    public function testLinearLow()
							 | 
						|
								    {
							 | 
						|
								        $this->performFake(array('\Faker\Provider\Biased', 'linearLow'));
							 | 
						|
								
							 | 
						|
								        foreach ($this->results as $number => $amount) {
							 | 
						|
								            // integral
							 | 
						|
								            $assumed = -0.5 * pow(1 / self::MAX * $number, 2) - -0.5 * pow(1 / self::MAX * ($number - 1), 2);
							 | 
						|
								            // shift the graph up
							 | 
						|
								            $assumed += 1 / self::MAX;
							 | 
						|
								            // calculate the fraction of the whole area
							 | 
						|
								            $assumed /= pow(1, 2) * .5;
							 | 
						|
								            $this->assertGreaterThan(self::NUMBERS * $assumed * .9, $amount, "Value was more than 10 percent under the expected value");
							 | 
						|
								            $this->assertLessThan(self::NUMBERS * $assumed * 1.1, $amount, "Value was more than 10 percent over the expected value");
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |