/
test_faker_number.rb
130 lines (108 loc) · 3.59 KB
/
test_faker_number.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# frozen_string_literal: true
require_relative '../../test_helper'
require 'minitest/mock'
class TestFakerNumber < Test::Unit::TestCase
def setup
@tester = Faker::Number
end
def test_number
assert @tester.number(10).to_s.match(/[0-9]{10}/)
10.times do |digits|
digits += 1
assert @tester.number(digits).to_s.match(/^[0-9]{#{digits}}$/)
end
assert @tester.number(10).to_s.length == 10
assert @tester.number(1).to_s.length == 1
assert @tester.number(0).nil?
end
def test_decimal
100.times do
assert @tester.decimal(2).to_s.match(/[1-9][0-9]\.[0-9][1-9]/)
assert @tester.decimal(4, 5).to_s.match(/[1-9][0-9]{3}\.[0-9]{4}[1-9]/)
end
end
def test_digit
assert @tester.digit.to_s.match(/[0-9]{1}/)
assert((1..1000).collect { |_i| @tester.digit == 9 }.include?(true))
end
def test_even_distribution
assert stats = {}
assert times = 10_000
times.times do
assert num = @tester.digit
stats[num] ||= 0
assert stats[num] += 1
end
stats.each do |_k, v|
assert_in_delta 10.0, 100.0 * v / times, 2.0
end
end
def test_normal
n = 10_000
values = Array.new(n) { @tester.normal(150.0, 100.0) }
mean = values.reduce(:+) / n.to_f
variance = values.inject(0) { |var, value| var + (value - mean)**2 } / (n - 1).to_f
std_dev = Math.sqrt variance
assert_in_delta 150.0, mean, 5.0
assert_in_delta 100.0, std_dev, 3.0
end
def test_between
100.times do
random_number = @tester.between(-50, 50)
assert random_number >= -50, "Expected >= -50, but got #{random_number}"
assert random_number <= 50, "Expected <= 50, but got #{random_number}"
end
end
def test_within
100.times do
random_number = @tester.within(-50..50)
assert random_number >= -50, "Expected >= -50, but got #{random_number}"
assert random_number <= 50, "Expected <= 50, but got #{random_number}"
end
end
def test_positive
100.times do
random_number = @tester.positive(1, 100)
assert random_number >= 1, "Expected >= 1, but got #{random_number}"
assert random_number <= 100, "Expected <= 100, but got #{random_number}"
end
end
def test_negative
100.times do
random_number = @tester.negative(-1, -100)
assert random_number <= -1, "Expected <= -1, but got #{random_number}"
assert random_number >= -100, "Expected >= -100, but got #{random_number}"
end
end
def test_force_positive
random_number = @tester.positive(-1, -100)
assert random_number >= 1, "Expected >= 1, but got #{random_number}"
assert random_number <= 100, "Expected <= 100, but got #{random_number}"
end
def test_force_negative
random_number = @tester.negative(1, 100)
assert random_number <= -1, "Expected <= -1, but got #{random_number}"
assert random_number >= -100, "Expected >= -100, but got #{random_number}"
end
def test_parameters_order
random_number = @tester.between(100, 1)
assert random_number >= 1, "Expected >= 1, but got #{random_number}"
assert random_number <= 100, "Expected <= 100, but got #{random_number}"
end
def test_hexadecimal
assert @tester.hexadecimal(4).match(/[0-9a-f]{4}/)
assert @tester.hexadecimal(7).match(/[0-9a-f]{7}/)
end
def test_insignificant_zero
@tester.stub :digit, 0 do
assert_equal 0, @tester.number(1)
100.times do
assert_match(/^[1-9]0/, @tester.number(2).to_s)
end
assert_equal 0.0, @tester.decimal(1, 1)
100.times do
assert_match(/^0\.[0-9]/, @tester.decimal(1, 2).to_s)
end
end
end
end