gerbilcharts 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. data/History.txt +11 -0
  2. data/License.txt +21 -0
  3. data/Manifest.txt +75 -0
  4. data/PostInstall.txt +7 -0
  5. data/README.txt +174 -0
  6. data/Rakefile +4 -0
  7. data/lib/gerbilcharts.rb +18 -0
  8. data/lib/gerbilcharts/charts.rb +16 -0
  9. data/lib/gerbilcharts/charts/area_chart.rb +36 -0
  10. data/lib/gerbilcharts/charts/bar_chart.rb +33 -0
  11. data/lib/gerbilcharts/charts/bar_chart_compact.rb +26 -0
  12. data/lib/gerbilcharts/charts/chart_base.rb +123 -0
  13. data/lib/gerbilcharts/charts/impulse_chart.rb +30 -0
  14. data/lib/gerbilcharts/charts/line_chart.rb +35 -0
  15. data/lib/gerbilcharts/charts/stacked_area_chart.rb +31 -0
  16. data/lib/gerbilcharts/models.rb +19 -0
  17. data/lib/gerbilcharts/models/bucketized_timeseries_graph_model.rb +138 -0
  18. data/lib/gerbilcharts/models/discrete_time_range.rb +63 -0
  19. data/lib/gerbilcharts/models/graph_model.rb +89 -0
  20. data/lib/gerbilcharts/models/graph_model_group.rb +240 -0
  21. data/lib/gerbilcharts/models/monotonous_graph_model.rb +192 -0
  22. data/lib/gerbilcharts/models/presets.rb +94 -0
  23. data/lib/gerbilcharts/models/raw_range.rb +68 -0
  24. data/lib/gerbilcharts/models/round_range.rb +104 -0
  25. data/lib/gerbilcharts/models/round_time_range.rb +105 -0
  26. data/lib/gerbilcharts/models/sampled_timeseries_graph_model.rb +80 -0
  27. data/lib/gerbilcharts/models/simple_timeseries_model_group.rb +68 -0
  28. data/lib/gerbilcharts/models/time_series_graph_model.rb +34 -0
  29. data/lib/gerbilcharts/public/brushmetal.css +197 -0
  30. data/lib/gerbilcharts/public/gerbil.js +327 -0
  31. data/lib/gerbilcharts/surfaces.rb +32 -0
  32. data/lib/gerbilcharts/surfaces/area_surface.rb +46 -0
  33. data/lib/gerbilcharts/surfaces/axis.rb +31 -0
  34. data/lib/gerbilcharts/surfaces/bar_surface.rb +62 -0
  35. data/lib/gerbilcharts/surfaces/basic_grid.rb +17 -0
  36. data/lib/gerbilcharts/surfaces/chart.rb +132 -0
  37. data/lib/gerbilcharts/surfaces/graph_element.rb +170 -0
  38. data/lib/gerbilcharts/surfaces/grid.rb +38 -0
  39. data/lib/gerbilcharts/surfaces/horizontal_axis.rb +32 -0
  40. data/lib/gerbilcharts/surfaces/horizontal_name_axis.rb +28 -0
  41. data/lib/gerbilcharts/surfaces/horizontal_time_axis.rb +25 -0
  42. data/lib/gerbilcharts/surfaces/impulse_surface.rb +47 -0
  43. data/lib/gerbilcharts/surfaces/legend.rb +59 -0
  44. data/lib/gerbilcharts/surfaces/line_surface.rb +53 -0
  45. data/lib/gerbilcharts/surfaces/mark_band.rb +17 -0
  46. data/lib/gerbilcharts/surfaces/panel.rb +17 -0
  47. data/lib/gerbilcharts/surfaces/pie_surface.rb +16 -0
  48. data/lib/gerbilcharts/surfaces/rect.rb +86 -0
  49. data/lib/gerbilcharts/surfaces/stacked_area_surface.rb +66 -0
  50. data/lib/gerbilcharts/surfaces/stacked_grid.rb +15 -0
  51. data/lib/gerbilcharts/surfaces/surface.rb +20 -0
  52. data/lib/gerbilcharts/surfaces/surface_background.rb +13 -0
  53. data/lib/gerbilcharts/surfaces/title_panel.rb +44 -0
  54. data/lib/gerbilcharts/surfaces/tracker.rb +62 -0
  55. data/lib/gerbilcharts/surfaces/vertical_axis.rb +46 -0
  56. data/lib/gerbilcharts/svgdc.rb +22 -0
  57. data/lib/gerbilcharts/svgdc/filters.rb +40 -0
  58. data/lib/gerbilcharts/svgdc/presentation_attributes.rb +50 -0
  59. data/lib/gerbilcharts/svgdc/svg_circle.rb +22 -0
  60. data/lib/gerbilcharts/svgdc/svg_custom_win.rb +36 -0
  61. data/lib/gerbilcharts/svgdc/svg_element.rb +87 -0
  62. data/lib/gerbilcharts/svgdc/svg_line.rb +26 -0
  63. data/lib/gerbilcharts/svgdc/svg_polygon.rb +34 -0
  64. data/lib/gerbilcharts/svgdc/svg_polyline.rb +27 -0
  65. data/lib/gerbilcharts/svgdc/svg_rect.rb +29 -0
  66. data/lib/gerbilcharts/svgdc/svg_shape.rb +10 -0
  67. data/lib/gerbilcharts/svgdc/svg_text.rb +21 -0
  68. data/lib/gerbilcharts/svgdc/svg_win.rb +52 -0
  69. data/lib/gerbilcharts/svgdc/svgdc.rb +335 -0
  70. data/lib/gerbilcharts/svgdc/transformations.rb +66 -0
  71. data/lib/gerbilcharts/version.rb +9 -0
  72. data/setup.rb +1585 -0
  73. data/test/test_Scratch.rb +21 -0
  74. data/test/test_charts.rb +119 -0
  75. data/test/test_gerbilcharts.rb +11 -0
  76. data/test/test_helper.rb +2 -0
  77. data/test/test_models.rb +118 -0
  78. data/test/test_noob.rb +81 -0
  79. data/test/test_ranges.rb +135 -0
  80. data/test/test_svgdc.rb +221 -0
  81. data/test/trafgen.rb +25 -0
  82. metadata +156 -0
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestScratch < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+
12
+ def test_1
13
+
14
+ g=GerbilCharts::SVGDC::SVGDC.new(300,200)
15
+ g.circle(40,50,20, :id => "What" )
16
+ g.render( :file => "/tmp/Scratch1.svg")
17
+
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,119 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestCharts < Test::Unit::TestCase
4
+
5
+ attr_reader :test_vector_tm1
6
+ attr_reader :test_vector_tm2
7
+ attr_reader :mod1, :mod2, :modbucket1
8
+
9
+ def setup
10
+ @test_vector_tm1 = []
11
+ @test_vector_tm2 = []
12
+ @test_vector_tm3 = []
13
+ tbeg = Time.local( 1978, "jun", 5, 9, 10, 0, 0)
14
+ sbeg = tbeg
15
+ sec_inc = 1000
16
+
17
+ for i in (0..20)
18
+ @test_vector_tm1 << [sbeg + i*sec_inc, i*sec_inc*1000 ]
19
+ @test_vector_tm2 << [sbeg + i*sec_inc, i*sec_inc*1200 ]
20
+ @test_vector_tm3 << [sbeg + i*sec_inc, i*sec_inc*1000*rand() ]
21
+ end
22
+
23
+ @mod1 = GerbilCharts::Models::TimeSeriesGraphModel.new("External Gateway")
24
+ @mod1.add_tuples @test_vector_tm1
25
+
26
+ @mod2 = GerbilCharts::Models::TimeSeriesGraphModel.new("209.216.22.220")
27
+ @mod2.add_tuples @test_vector_tm2
28
+
29
+ @mod3 = GerbilCharts::Models::TimeSeriesGraphModel.new("udldev Print Server")
30
+ @mod3.add_tuples @test_vector_tm3
31
+
32
+ @modgroup = GerbilCharts::Models::GraphModelGroup.new("Hosts")
33
+ @modgroup.add(@mod1)
34
+ @modgroup.add(@mod2)
35
+ @modgroup.add(@mod3)
36
+
37
+ setup_bucketized_models()
38
+
39
+ end
40
+
41
+ def setup_bucketized_models
42
+ # bucketized models
43
+ modbucket1 = GerbilCharts::Models::BucketizedTimeSeriesGraphModel.new("Out Bw",60)
44
+ tbeg = Time.local( 1978, "jun", 5, 9, 10, 0, 0)
45
+ sbeg = tbeg
46
+
47
+ #second with some gaps
48
+ sbeg = tbeg
49
+ test_vector_bucket_1 = []
50
+ test_vector_bucket_1 << [sbeg + 60, 1000 ]
51
+ test_vector_bucket_1 << [sbeg + 120, 1000 ]
52
+ test_vector_bucket_1 << [sbeg + 180, 1000 ]
53
+ test_vector_bucket_1 << [sbeg + 239, 1000 ]
54
+ test_vector_bucket_1 << [sbeg + 295, 1000 ]
55
+ test_vector_bucket_1 << [sbeg + 296, 1000 ]
56
+ test_vector_bucket_1 << [sbeg + 297, 5000 ]
57
+ test_vector_bucket_1 << [sbeg + 298, 1000 ]
58
+ test_vector_bucket_1 << [sbeg + 360, 1000 ]
59
+ test_vector_bucket_1 << [sbeg + 420, 1000 ]
60
+ test_vector_bucket_1 << [sbeg + 480, 1000 ]
61
+ test_vector_bucket_1 << [sbeg + 530, 1000 ]
62
+ test_vector_bucket_1 << [sbeg + 604, 1000 ]
63
+ test_vector_bucket_1 << [sbeg + 800, 1000 ]
64
+ modbucket1.add_tuples(test_vector_bucket_1)
65
+
66
+ #second with some gaps
67
+ modbucket2 = GerbilCharts::Models::BucketizedTimeSeriesGraphModel.new("In Bw",60)
68
+ sbeg = tbeg
69
+ test_vector_bucket_2 = []
70
+ test_vector_bucket_2 << [sbeg + 10, 1800 ]
71
+ test_vector_bucket_2 << [sbeg + 20, 2600 ]
72
+ test_vector_bucket_2 << [sbeg + 22, 1000 ]
73
+ test_vector_bucket_2 << [sbeg + 60, 1000 ]
74
+ test_vector_bucket_2 << [sbeg + 120, 1900 ]
75
+ test_vector_bucket_2 << [sbeg + 180, 700 ]
76
+ test_vector_bucket_2 << [sbeg + 240, 5000 ]
77
+ test_vector_bucket_2 << [sbeg + 301, 1000 ]
78
+ test_vector_bucket_2 << [sbeg + 350, 1000 ]
79
+ test_vector_bucket_2 << [sbeg + 420, 100 ]
80
+ test_vector_bucket_2 << [sbeg + 470, 500 ]
81
+ test_vector_bucket_2 << [sbeg + 540, 1000 ]
82
+ modbucket2.add_tuples(test_vector_bucket_2)
83
+
84
+ @modgroupbucketized = GerbilCharts::Models::GraphModelGroup.new("Bandwidth")
85
+ @modgroupbucketized .add(modbucket1)
86
+ @modgroupbucketized .add(modbucket2)
87
+
88
+ end
89
+
90
+
91
+ # test a line chart
92
+ def test_line_1
93
+
94
+ mychart = GerbilCharts::Charts::LineChart.new( :width => 350, :height => 200, :style => 'brushmetal.css')
95
+ mychart.setmodelgroup(@modgroup)
96
+ mychart.render('/tmp/c_linechart1.svg')
97
+
98
+ end
99
+
100
+ # test a bar chart
101
+ def test_bar_1
102
+
103
+ mychart = GerbilCharts::Charts::BarChart.new( :width => 300, :height => 150, :style => 'brushmetal.css')
104
+ mychart.setmodelgroup(@modgroup)
105
+ mychart.render('/tmp/c_barchart1.svg')
106
+
107
+ end
108
+
109
+ # test a area chart
110
+ def test_stacked_area_1
111
+
112
+ mychart = GerbilCharts::Charts::StackedAreaChart.new( :width => 350, :height => 200, :style => 'brushmetal.css')
113
+ mychart.setmodelgroup(@modgroupbucketized)
114
+ mychart.render('/tmp/c_sachart1.svg')
115
+
116
+ end
117
+
118
+ end
119
+
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestGerbilcharts < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/gerbilcharts'
@@ -0,0 +1,118 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestModels < Test::Unit::TestCase
4
+
5
+ def setup
6
+ # test vector
7
+ @tvector = []
8
+ @tvector << [ Time.local(1973,"Apr",2,8,30,0), 0 ]
9
+ @tvector << [ Time.local(1973,"Apr",2,8,30,10), 0.5 ]
10
+ @tvector << [ Time.local(1973,"Apr",2,8,30,11), 18 ]
11
+ @tvector << [ Time.local(1973,"Apr",2,8,30,15), 911 ]
12
+ @tvector << [ Time.local(1973,"Apr",2,8,30,18), 100 ]
13
+ @tvector << [ Time.local(1973,"Apr",2,8,30,19), 80 ]
14
+ @tvector << [ Time.local(1973,"Apr",2,8,30,20), 98 ]
15
+ @tvector << [ Time.local(1973,"Apr",2,8,30,45), 1002 ]
16
+ @tvector << [ Time.local(1973,"Apr",2,8,30,58), 3014 ]
17
+ @tvector << [ Time.local(1973,"Apr",2,8,31,0), 1002 ]
18
+ @tvector << [ Time.local(1973,"Apr",2,8,32,0), 88 ]
19
+ @tvector << [ Time.local(1973,"Apr",2,8,32,20), 882]
20
+ @tvector << [ Time.local(1973,"Apr",2,8,32,21), 3015 ]
21
+ @tvector << [ Time.local(1973,"Apr",2,8,36,0), 10 ]
22
+ @tvector << [ Time.local(1973,"Apr",2,8,46,0), 1 ]
23
+ @tvector << [ Time.local(1973,"Apr",2,8,47,0), 2 ]
24
+ @tvector << [ Time.local(1973,"Apr",2,8,47,1), 3 ]
25
+ @tvector << [ Time.local(1973,"Apr",2,8,47,5), 4 ]
26
+ @tvector << [ Time.local(1973,"Apr",2,8,50,0), 59 ]
27
+ @tvector << [ Time.local(1973,"Apr",2,8,58,0), 188 ]
28
+ @tvector << [ Time.local(1973,"Apr",2,9,00,17), 4017 ]
29
+ @tvector << [ Time.local(1973,"Apr",2,9,20,18), 18 ]
30
+ @tvector << [ Time.local(1973,"Apr",2,9,40,20), 10 ]
31
+ @tvector << [ Time.local(1973,"Apr",2,10,13,7), 100 ]
32
+ @tvector << [ Time.local(1973,"Apr",2,10,14,7), 100 ]
33
+ @tvector << [ Time.local(1973,"Apr",2,10,15,7), 100 ]
34
+ @tvector << [ Time.local(1973,"Apr",2,10,17,7), 100 ]
35
+
36
+
37
+ end
38
+
39
+ # Test model simple
40
+ def test_model_simple
41
+ m = GerbilCharts::Models::GraphModel.new("TestModelName")
42
+ assert m.name == "TestModelName"
43
+ end
44
+
45
+
46
+ # Test timeseries graph model
47
+ def test_timeseries_1
48
+ p "--- Testing basic timeseries model --- "
49
+
50
+ # load this into a timeseries model
51
+ mod = GerbilCharts::Models::TimeSeriesGraphModel.new("TestModel1")
52
+ @tvector.each do |tpl|
53
+ mod.add (tpl[0],tpl[1])
54
+ end
55
+
56
+ #dbg_print_model(mod)
57
+
58
+ # crop over than 9:00 AM
59
+ mod.crop_older(Time.local(1973,"Apr",2,9,00,00))
60
+
61
+ #dbg_print_model(mod)
62
+ end
63
+
64
+ def dbg_print_model(mod)
65
+
66
+ # test various things about the model
67
+ rx,ry = mod.ranges
68
+ p "range x = #{rx} y = #{ry}"
69
+
70
+ # round ranges
71
+ rx,ry = mod.round_ranges
72
+ p "round range x = #{rx} y = #{ry}"
73
+
74
+ # labels
75
+ p "Labels are :"
76
+ p "First = #{rx.format_min_value}"
77
+ rx.each_label do |v,s|
78
+ p "v = #{v} s=#{s}"
79
+ end
80
+ end
81
+
82
+ # testing the bucketized timeseries
83
+ # with bucket size 5 mins
84
+ def test_bucketized_1
85
+ p "--- Testing bucketized model --- "
86
+
87
+ # bucketized with sec buckets
88
+ mod = GerbilCharts::Models::BucketizedTimeSeriesGraphModel.new("TestModel2",5 * 60)
89
+ @tvector.each do |tpl|
90
+ mod.add (tpl[0],tpl[1])
91
+ end
92
+
93
+ dbg_print_model(mod)
94
+
95
+ # print data points
96
+ mod.each_tuple do |x,y|
97
+ p "bkt #{Time.at(x)} = #{y}"
98
+ end
99
+ end
100
+
101
+ # test simple timeseries
102
+ def test_simple_group_1
103
+
104
+ p "Testing simple timeseries model group helper"
105
+
106
+ modelgroup = GerbilCharts::Models::SimpleTimeSeriesModelGroup.new( :title => "Sales figures",
107
+ :timeseries => (1..6).collect { |month| Time.local(2008,month) },
108
+ :models => [ ["Bruce", 1, 10, 18, 28, 80, 122],
109
+ ["Rex" , 12,22, 45, 70, 218, 109],
110
+ ["Buzo" , 0, 23, 25, 40, 18, 59]
111
+ ]
112
+ )
113
+ modelgroup.each_model { |mod| dbg_print_model(mod) }
114
+
115
+ end
116
+
117
+
118
+ end
data/test/test_noob.rb ADDED
@@ -0,0 +1,81 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require 'trafgen'
4
+
5
+ # tests some easy to use mods
6
+ # newbies enter here
7
+ class TestChartsNoob < Test::Unit::TestCase
8
+
9
+
10
+ # test sales figures of 3 sales people
11
+ # use a simple timeseries model
12
+ def test_monthly_sales
13
+
14
+ mychart = GerbilCharts::Charts::LineChart.new( :width => 350, :height => 200, :style => 'brushmetal.css',
15
+ :circle_data_points => true )
16
+
17
+ modelgroup = GerbilCharts::Models::SimpleTimeSeriesModelGroup.new(
18
+ :title => "Sales figures",
19
+ :timeseries => (1..6).collect { |month| Time.local(2008,month) },
20
+ :models => [ ["Bruce", 1, 10, 18, 28, 80, 122],
21
+ ["Rex" , 112,22, 45, 70, 218, 309],
22
+ ["Buzo" , 0, 23, 25, 40, 18, 59]
23
+ ]
24
+ )
25
+
26
+ mychart.modelgroup=modelgroup
27
+
28
+ mychart.render('/tmp/n_monthly_sales.svg')
29
+
30
+ end
31
+
32
+ # test daily traffic
33
+ def test_daily_traf_1
34
+
35
+ mychart = GerbilCharts::Charts::ImpulseChart.new( :width => 450, :height => 200, :style => 'brushmetal.css')
36
+
37
+ tend = Time.now
38
+ tbegin = tend - 3600*24
39
+
40
+ model1 = GerbilCharts::Models::BucketizedTimeSeriesGraphModel.new( "eth0", 3600 )
41
+ TimeSeriesDataGenerator.new(tbegin,tend,300,200000, 6000000).each_tuple do |t,v|
42
+ model1.add(t,v)
43
+ end
44
+
45
+ model2 = GerbilCharts::Models::BucketizedTimeSeriesGraphModel.new( "wan1", 3600 )
46
+ TimeSeriesDataGenerator.new(tbegin,tend,300,200000, 6000000).each_tuple do |t,v|
47
+ model2.add(t,v)
48
+ end
49
+
50
+ modelgroup = GerbilCharts::Models::GraphModelGroup.new( "External Traffic")
51
+ modelgroup.add model2
52
+ modelgroup.add model1
53
+
54
+ mychart.modelgroup=modelgroup
55
+ mychart.render('/tmp/n_daily_traffic.svg')
56
+
57
+ # demo resuses the model in a different view (an area chart this time)
58
+ myareachart = GerbilCharts::Charts::AreaChart.new( :width => 450, :height => 200, :style => 'brushmetal.css')
59
+ myareachart.modelgroup=modelgroup
60
+ myareachart.render('/tmp/n_daily_traffic_area.svg')
61
+
62
+
63
+ # demo to reuse the model ina bar
64
+ mybarchart = GerbilCharts::Charts::BarChart.new( :width => 450, :height => 200, :style => 'brushmetal.css')
65
+ mybarchart.modelgroup=modelgroup
66
+ mybarchart.render('/tmp/n_daily_traffic_bar.svg')
67
+
68
+
69
+ # demo stacked area
70
+ mysachart = GerbilCharts::Charts::StackedAreaChart.new( :width => 450, :height => 200, :style => 'brushmetal.css')
71
+ mysachart.modelgroup=modelgroup
72
+ mysachart.render('/tmp/n_daily_traffic_sa.svg')
73
+
74
+
75
+ end
76
+
77
+
78
+
79
+ end
80
+
81
+
@@ -0,0 +1,135 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestRanges < Test::Unit::TestCase
4
+
5
+ def setup
6
+ # test vector
7
+ @tvector = []
8
+ @tvector << [ Time.local(1973,"Apr",2,8,30,0), 0 ]
9
+ @tvector << [ Time.local(1973,"Apr",2,8,30,10), 0.5 ]
10
+ @tvector << [ Time.local(1973,"Apr",2,8,30,11), 18 ]
11
+ @tvector << [ Time.local(1973,"Apr",2,8,30,15), 911 ]
12
+ @tvector << [ Time.local(1973,"Apr",2,8,30,18), 100 ]
13
+ @tvector << [ Time.local(1973,"Apr",2,8,30,19), 80 ]
14
+ @tvector << [ Time.local(1973,"Apr",2,8,30,20), 98 ]
15
+ @tvector << [ Time.local(1973,"Apr",2,8,30,45), 1002 ]
16
+ @tvector << [ Time.local(1973,"Apr",2,8,30,58), 3014 ]
17
+ @tvector << [ Time.local(1973,"Apr",2,8,31,0), 1002 ]
18
+ @tvector << [ Time.local(1973,"Apr",2,8,32,0), 88 ]
19
+ @tvector << [ Time.local(1973,"Apr",2,8,32,20), 882]
20
+ @tvector << [ Time.local(1973,"Apr",2,8,32,21), 3015 ]
21
+ @tvector << [ Time.local(1973,"Apr",2,8,36,0), 10 ]
22
+ @tvector << [ Time.local(1973,"Apr",2,8,46,0), 1 ]
23
+ @tvector << [ Time.local(1973,"Apr",2,8,47,0), 2 ]
24
+ @tvector << [ Time.local(1973,"Apr",2,8,47,1), 3 ]
25
+ @tvector << [ Time.local(1973,"Apr",2,8,47,5), 4 ]
26
+ @tvector << [ Time.local(1973,"Apr",2,8,50,0), 59 ]
27
+ @tvector << [ Time.local(1973,"Apr",2,8,58,0), 188 ]
28
+ @tvector << [ Time.local(1973,"Apr",2,9,00,17), 4017 ]
29
+ @tvector << [ Time.local(1973,"Apr",2,9,20,18), 18 ]
30
+ @tvector << [ Time.local(1973,"Apr",2,9,40,20), 10 ]
31
+ @tvector << [ Time.local(1973,"Apr",2,10,13,7), 100 ]
32
+ @tvector << [ Time.local(1973,"Apr",2,10,14,7), 100 ]
33
+ @tvector << [ Time.local(1973,"Apr",2,10,15,7), 100 ]
34
+ @tvector << [ Time.local(1973,"Apr",2,10,17,7), 100 ]
35
+
36
+ end
37
+
38
+ # test raw range - simple version
39
+ def test_raw_range_1
40
+ r = GerbilCharts::Models::RawRange.new
41
+
42
+ [10,20,10,0,0,1001,19920,882991.22].each do |v|
43
+ r.update v
44
+ end
45
+
46
+ r.min_max do |mn,mx|
47
+ assert mn==0
48
+ assert mx==882991.22
49
+ end
50
+ end
51
+
52
+ # test - various methods
53
+ def test_raw_range_2
54
+ r = GerbilCharts::Models::RawRange.new
55
+ [10,20,10,0,0,1001,19920,20001].each do |v|
56
+ r.update v
57
+ end
58
+
59
+ # update from another range
60
+ r2 = GerbilCharts::Models::RawRange.new
61
+ r2.update(-10)
62
+ r2.update 20002
63
+ r.update_r r2
64
+
65
+ # check if updated correctly
66
+ assert r.rmax == 20002
67
+ assert r.rmin == -10
68
+
69
+ # check scaling
70
+ fv = r.scale_factor(20002)
71
+ assert_in_delta(fv,1,0.001)
72
+ fv = r.scale_factor(10000)
73
+ assert_in_delta(fv,0.5,0.001)
74
+
75
+ # check if reset works
76
+ r.reset
77
+ assert_nil(r.rmax)
78
+ assert_nil(r.rmin)
79
+ end
80
+
81
+ # test round range
82
+ def test_round_range_1
83
+ r = GerbilCharts::Models::RawRange.new
84
+ [10,20,10,0,0,1001,19920,20001].each do |v|
85
+ r.update v
86
+ end
87
+
88
+ rr = GerbilCharts::Models::RoundRange.new(r)
89
+ assert_equal(rr.rmax,50000)
90
+ assert_equal(rr.rmin,0)
91
+ assert_equal(rr.lmax,10000,"checking ideal label interval")
92
+
93
+ r.update(50001)
94
+ rr = GerbilCharts::Models::RoundRange.new(r)
95
+ assert_equal(rr.rmax,100000)
96
+ assert_equal(rr.lmax,25000,"checking ideal label interval for a 100K interval")
97
+
98
+ end
99
+
100
+ # test time hours
101
+ def test_round_time_range_1
102
+ r = GerbilCharts::Models::RawRange.new
103
+ tbase = Time.local(1973,"Apr",2,8,30,0)
104
+
105
+ @tvector.each do |t|
106
+ r.update t[0]
107
+ end
108
+
109
+ rr = GerbilCharts::Models::RoundTimeRange.new(r)
110
+ rr.each_label do |v,s|
111
+ # p "v = #{v} s=#{s}"
112
+ end
113
+ assert_equal(rr.rdelta,7200) # 3 hr range
114
+ assert_equal(rr.ldelta,1800) # label every 30 mins
115
+
116
+ # add a 4 hr gap (9hr range + 2 hr labels)
117
+ r.update( @tvector.last[0] + 4*3600)
118
+ rr = GerbilCharts::Models::RoundTimeRange.new(r)
119
+ rr.each_label do |v,s|
120
+ # p "v = #{v} s=#{s}"
121
+ end
122
+ assert_equal(rr.rdelta,6*3600)
123
+ assert_equal(rr.ldelta,2*3600)
124
+
125
+ # add a new 10hr gap
126
+ r.update( @tvector.last[0] + 10*3600)
127
+ rr = GerbilCharts::Models::RoundTimeRange.new(r)
128
+ rr.each_label do |v,s|
129
+ # p "v = #{v} s=#{s}"
130
+ end
131
+ assert_equal(rr.rdelta,43200)
132
+ assert_equal(rr.ldelta,10800)
133
+ end
134
+
135
+ end