1
require File.dirname(__FILE__) + "/../../test_helper"
2
require 'ferret/number_tools'
5
class NumberToolsTest < Test::Unit::TestCase
8
def test_to_i_lex_near_zero()
9
(-10..10).each do |num|
10
assert(num.to_s_lex > (num-1).to_s_lex,
11
"Strings should sort correctly but " +
12
"#{num.to_s_lex} <= #{(num-1).to_s_lex}")
13
assert_equal(num, num.to_s_lex.to_i_lex)
17
def test_to_i_pad_near_zero()
19
assert(num.to_s_pad(3) > (num-1).to_s_pad(3),
20
"Strings should sort correctly but " +
21
"#{num.to_s_pad(3)} <= #{(num-1).to_s_pad(3)}")
22
assert_equal(num, num.to_s_pad(3).to_i)
26
def test_to_i_lex_larger_numbers
28
num1 = rand(10000000000000000000000000000000000)
29
num2 = rand(10000000000000000000000000000000000)
30
num1 *= -1 if rand(2) == 0
31
num2 *= -1 if rand(2) == 0
33
assert_equal(num1, num1.to_s_lex.to_i_lex)
34
assert_equal(num2, num2.to_s_lex.to_i_lex)
35
assert_equal(num1 < num2, num1.to_s_lex < num2.to_s_lex,
36
"Strings should sort correctly but " +
37
"#{num1} < #{num2} == #{num1 < num2} but " +
38
"#{num1.to_s_lex} < #{num2.to_s_lex} == " +
39
"#{num1.to_s_lex < num2.to_s_lex}")
45
num1 = rand(10000000000000000000000000000000000)
46
num2 = rand(10000000000000000000000000000000000)
47
assert_equal(num1, num1.to_s_pad(35).to_i)
48
assert_equal(num2, num2.to_s_pad(35).to_i)
49
assert_equal(num1 < num2, num1.to_s_pad(35) < num2.to_s_pad(35),
50
"Strings should sort correctly but " +
51
"#{num1} < #{num2} == #{num1 < num2} but " +
52
"#{num1.to_s_pad(35)} < #{num2.to_s_pad(35)} == " +
53
"#{num1.to_s_pad(35) < num2.to_s_pad(35)}")
57
def test_time_to_s_lex
58
t_num = Time.now.to_i - 365*24*60*60 # prevent range error
61
t1 = Time.now - rand(t_num)
62
t2 = Time.now - rand(t_num)
63
assert_equal(t1.to_s, t1.to_s_lex(:second).to_time_lex.to_s)
64
assert_equal(t2.to_s, t2.to_s_lex(:second).to_time_lex.to_s)
65
[:year, :month, :day, :hour, :minute, :second, :millisecond].each do |prec|
66
t1_x = t1.to_s_lex(prec).to_time_lex
67
t2_x = t2.to_s_lex(prec).to_time_lex
68
assert_equal(t1_x < t2_x, t1.to_s_lex(prec) < t2.to_s_lex(prec),
69
"Strings should sort correctly but " +
70
"#{t1_x} < #{t2_x} == #{t1_x < t2_x} but " +
71
"#{t1.to_s_lex(prec)} < #{t2.to_s_lex(prec)} == " +
72
"#{t1.to_s_lex(prec) < t2.to_s_lex(prec)}")
77
def test_date_to_s_lex
79
d1 = Date.civil(rand(2200), rand(12) + 1, rand(28) + 1)
80
d2 = Date.civil(rand(2200), rand(12) + 1, rand(28) + 1)
81
assert_equal(d1.to_s, d1.to_s_lex(:day).to_date_lex.to_s)
82
assert_equal(d2.to_s, d2.to_s_lex(:day).to_date_lex.to_s)
83
[:year, :month, :day].each do |prec|
84
d1_x = d1.to_s_lex(prec).to_date_lex
85
d2_x = d2.to_s_lex(prec).to_date_lex
86
assert_equal(d1_x < d2_x, d1.to_s_lex(prec) < d2.to_s_lex(prec),
87
"Strings should sort correctly but " +
88
"#{d1_x} < #{d2_x} == #{d1_x < d2_x} but " +
89
"#{d1.to_s_lex(prec)} < #{d2.to_s_lex(prec)} == " +
90
"#{d1.to_s_lex(prec) < d2.to_s_lex(prec)}")
96
def test_date_time_to_s_lex
98
d1 = "#{rand(600) + 1600}-#{rand(12)+1}-#{rand(28)+1} " +
99
"#{rand(24)}:#{rand(60)}:#{rand(60)}"
100
d2 = "#{rand(600) + 1600}-#{rand(12)+1}-#{rand(28)+1} " +
101
"#{rand(24)}:#{rand(60)}:#{rand(60)}"
102
d1 = DateTime.strptime(d1, "%Y-%m-%d %H:%M:%S")
103
d2 = DateTime.strptime(d2, "%Y-%m-%d %H:%M:%S")
104
assert_equal(d1.to_s, d1.to_s_lex(:second).to_date_time_lex.to_s)
105
assert_equal(d2.to_s, d2.to_s_lex(:second).to_date_time_lex.to_s)
106
[:year, :month, :day, :hour, :minute, :second].each do |prec|
107
d1_x = d1.to_s_lex(prec).to_date_lex
108
d2_x = d2.to_s_lex(prec).to_date_lex
109
assert_equal(d1_x < d2_x, d1.to_s_lex(prec) < d2.to_s_lex(prec),
110
"Strings should sort correctly but " +
111
"#{d1_x} < #{d2_x} == #{d1_x < d2_x} but " +
112
"#{d1.to_s_lex(prec)} < #{d2.to_s_lex(prec)} == " +
113
"#{d1.to_s_lex(prec) < d2.to_s_lex(prec)}")