viiite 0.1.0

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 (67) hide show
  1. data/CHANGELOG.md +5 -0
  2. data/Gemfile +25 -0
  3. data/Gemfile.lock +55 -0
  4. data/LICENCE.md +22 -0
  5. data/Manifest.txt +15 -0
  6. data/README.md +204 -0
  7. data/Rakefile +23 -0
  8. data/bin/viiite +4 -0
  9. data/examples/bench_iteration.rb +9 -0
  10. data/examples/bench_sort.eps +816 -0
  11. data/examples/bench_sort.rash +100 -0
  12. data/examples/bench_sort.rb +38 -0
  13. data/examples/raw.rash +6 -0
  14. data/lib/viiite/command/graph_style.rash +1 -0
  15. data/lib/viiite/command/help.rb +24 -0
  16. data/lib/viiite/command/plot.rb +88 -0
  17. data/lib/viiite/command/report.rb +47 -0
  18. data/lib/viiite/command/run.rb +23 -0
  19. data/lib/viiite/command/serie_style.rash +1 -0
  20. data/lib/viiite/command.rb +45 -0
  21. data/lib/viiite/formatter/plot.rb +38 -0
  22. data/lib/viiite/formatter.rb +5 -0
  23. data/lib/viiite/loader.rb +3 -0
  24. data/lib/viiite/runner.rb +59 -0
  25. data/lib/viiite/tms.rb +89 -0
  26. data/lib/viiite/version.rb +14 -0
  27. data/lib/viiite/viiite_file.rb +20 -0
  28. data/lib/viiite.rb +56 -0
  29. data/spec/fixtures/bench_iteration.rb +9 -0
  30. data/spec/integration/raw_data.rash +6 -0
  31. data/spec/integration/report/viiite_report_1.cmd +1 -0
  32. data/spec/integration/report/viiite_report_1.stdout +7 -0
  33. data/spec/integration/report/viiite_report_2.cmd +1 -0
  34. data/spec/integration/report/viiite_report_2.stdout +10 -0
  35. data/spec/integration/report/viiite_report_3.cmd +1 -0
  36. data/spec/integration/report/viiite_report_3.stdout +18 -0
  37. data/spec/integration/report/viiite_report_4.cmd +1 -0
  38. data/spec/integration/report/viiite_report_4.stdout +22 -0
  39. data/spec/integration/test_command.rb +33 -0
  40. data/spec/integration/viiite/viiite_help.cmd +1 -0
  41. data/spec/integration/viiite/viiite_help.stdout +25 -0
  42. data/spec/spec_helper.rb +23 -0
  43. data/spec/unit/command/test_run.rb +25 -0
  44. data/spec/unit/formatter/plot/test_to_data.rb +16 -0
  45. data/spec/unit/formatter/plot/test_to_dataset.rb +22 -0
  46. data/spec/unit/formatter/plot/test_to_plot.rb +21 -0
  47. data/spec/unit/test_runner.rb +57 -0
  48. data/spec/unit/test_viiite.rb +12 -0
  49. data/spec/unit/tms/test_coerce.rb +46 -0
  50. data/spec/unit/tms/test_divide.rb +26 -0
  51. data/spec/unit/tms/test_minus.rb +26 -0
  52. data/spec/unit/tms/test_plus.rb +34 -0
  53. data/spec/unit/tms/test_times.rb +26 -0
  54. data/spec/unit/tms/test_to_a.rb +11 -0
  55. data/spec/unit/tms/test_to_ruby_literal.rb +11 -0
  56. data/spec/unit/tms/test_to_s.rb +11 -0
  57. data/tasks/clean.rake +3 -0
  58. data/tasks/debug_mail.rake +78 -0
  59. data/tasks/debug_mail.txt +13 -0
  60. data/tasks/gem.rake +68 -0
  61. data/tasks/integration_test.rake +51 -0
  62. data/tasks/spec_test.rake +79 -0
  63. data/tasks/unit_test.rake +77 -0
  64. data/tasks/yard.rake +51 -0
  65. data/viiite.gemspec +192 -0
  66. data/viiite.noespec +40 -0
  67. metadata +297 -0
data/lib/viiite.rb ADDED
@@ -0,0 +1,56 @@
1
+ require "viiite/version"
2
+ require "viiite/loader"
3
+ require "viiite/tms"
4
+ require "viiite/formatter"
5
+ require "viiite/runner"
6
+ require "viiite/command"
7
+ require "viiite/viiite_file"
8
+ require "benchmark"
9
+
10
+ #
11
+ # Benchmarking and complexity analyzer utility
12
+ #
13
+ module Viiite
14
+
15
+ # Builds a Tms object
16
+ def self.Tms(*args)
17
+ Viiite::Tms.coerce(args)
18
+ end
19
+
20
+ def self.measure(&block)
21
+ Viiite::Tms.coerce Benchmark.measure(&block)
22
+ end
23
+
24
+ # Builds a runner instance via the DSL definition given by the block.
25
+ #
26
+ # Example
27
+ #
28
+ # Viiite.runner do |b|
29
+ # b.variation_point :ruby_version, Viiite.which_ruby
30
+ # b.range_over([100, 1000, 10000, 100000], :runs) do |runs|
31
+ # b.variation_point :test, :via_reader do
32
+ # b.report{ runs.times{ foo.via_reader } }
33
+ # end
34
+ # b.variation_point :test, :via_method do
35
+ # b.report{ runs.times{ foo.via_method } }
36
+ # end
37
+ # end
38
+ # end
39
+ #
40
+ def self.bm(&block)
41
+ Runner.new(block)
42
+ end
43
+
44
+ #
45
+ # Returns a short string with a ruby interpreter description
46
+ #
47
+ def self.which_ruby
48
+ if Object.const_defined?(:RUBY_DESCRIPTION)
49
+ RUBY_DESCRIPTION =~ /^([^\s]+\s*[^\s]+)/
50
+ $1
51
+ else
52
+ "ruby #{RUBY_VERSION} (#{RUBY_PLATFORM})"
53
+ end
54
+ end
55
+
56
+ end # module Viiite
@@ -0,0 +1,9 @@
1
+ require 'viiite'
2
+ n = 15000
3
+ Viiite.bm do |r|
4
+ r.variation_point :ruby, Viiite.which_ruby
5
+ r.report(:for) { for i in 1..n; a = "1"; end }
6
+ r.report(:times) { n.times do ; a = "1"; end }
7
+ r.report(:upto) { 1.upto(n) do ; a = "1"; end }
8
+ end
9
+
@@ -0,0 +1,6 @@
1
+ {:bench => :for, :ruby => "ruby 1.8.7", :tms => Viiite::Tms(0.01,0.0,0.0,0.0,0.0111169815063477)}
2
+ {:bench => :times, :ruby => "ruby 1.8.7", :tms => Viiite::Tms(0.01,0.0,0.0,0.0,0.00408315658569336)}
3
+ {:bench => :upto, :ruby => "ruby 1.8.7", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.00950002670288086)}
4
+ {:ruby => "ruby 1.9.2p136", :bench => :for, :tms => Viiite::Tms(0.010000000000000009,0.0,0.0,0.0,0.0076122283935546875)}
5
+ {:ruby => "ruby 1.9.2p136", :bench => :times, :tms => Viiite::Tms(0.010000000000000009,0.0,0.0,0.0,0.006944417953491211)}
6
+ {:ruby => "ruby 1.9.2p136", :bench => :upto, :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.003862142562866211)}
@@ -0,0 +1 @@
1
+ viiite report raw_data
@@ -0,0 +1,7 @@
1
+ +--------+-----------------------------------------------+
2
+ | :bench | :measure |
3
+ +--------+-----------------------------------------------+
4
+ | :for | 0.010000 0.000000 0.010000 ( 0.009365) |
5
+ | :times | 0.010000 0.000000 0.010000 ( 0.005514) |
6
+ | :upto | 0.000000 0.000000 0.000000 ( 0.006681) |
7
+ +--------+-----------------------------------------------+
@@ -0,0 +1 @@
1
+ viiite report raw_data --regroup=ruby,bench
@@ -0,0 +1,10 @@
1
+ +----------------+--------+-----------------------------------------------+
2
+ | :ruby | :bench | :measure |
3
+ +----------------+--------+-----------------------------------------------+
4
+ | ruby 1.8.7 | :for | 0.010000 0.000000 0.010000 ( 0.011117) |
5
+ | ruby 1.8.7 | :times | 0.010000 0.000000 0.010000 ( 0.004083) |
6
+ | ruby 1.8.7 | :upto | 0.000000 0.000000 0.000000 ( 0.009500) |
7
+ | ruby 1.9.2p136 | :for | 0.010000 0.000000 0.010000 ( 0.007612) |
8
+ | ruby 1.9.2p136 | :times | 0.010000 0.000000 0.010000 ( 0.006944) |
9
+ | ruby 1.9.2p136 | :upto | 0.000000 0.000000 0.000000 ( 0.003862) |
10
+ +----------------+--------+-----------------------------------------------+
@@ -0,0 +1 @@
1
+ viiite report raw_data --hierarchy --regroup=ruby,bench
@@ -0,0 +1,18 @@
1
+ +----------------+------------------------------------------------------------+
2
+ | :ruby | :measure |
3
+ +----------------+------------------------------------------------------------+
4
+ | ruby 1.8.7 | +--------+-----------------------------------------------+ |
5
+ | | | :bench | :measure | |
6
+ | | +--------+-----------------------------------------------+ |
7
+ | | | :for | 0.010000 0.000000 0.010000 ( 0.011117) | |
8
+ | | | :times | 0.010000 0.000000 0.010000 ( 0.004083) | |
9
+ | | | :upto | 0.000000 0.000000 0.000000 ( 0.009500) | |
10
+ | | +--------+-----------------------------------------------+ |
11
+ | ruby 1.9.2p136 | +--------+-----------------------------------------------+ |
12
+ | | | :bench | :measure | |
13
+ | | +--------+-----------------------------------------------+ |
14
+ | | | :for | 0.010000 0.000000 0.010000 ( 0.007612) | |
15
+ | | | :times | 0.010000 0.000000 0.010000 ( 0.006944) | |
16
+ | | | :upto | 0.000000 0.000000 0.000000 ( 0.003862) | |
17
+ | | +--------+-----------------------------------------------+ |
18
+ +----------------+------------------------------------------------------------+
@@ -0,0 +1 @@
1
+ viiite report raw_data --hierarchy --regroup=bench,ruby
@@ -0,0 +1,22 @@
1
+ +--------+--------------------------------------------------------------------+
2
+ | :bench | :measure |
3
+ +--------+--------------------------------------------------------------------+
4
+ | :for | +----------------+-----------------------------------------------+ |
5
+ | | | :ruby | :measure | |
6
+ | | +----------------+-----------------------------------------------+ |
7
+ | | | ruby 1.8.7 | 0.010000 0.000000 0.010000 ( 0.011117) | |
8
+ | | | ruby 1.9.2p136 | 0.010000 0.000000 0.010000 ( 0.007612) | |
9
+ | | +----------------+-----------------------------------------------+ |
10
+ | :times | +----------------+-----------------------------------------------+ |
11
+ | | | :ruby | :measure | |
12
+ | | +----------------+-----------------------------------------------+ |
13
+ | | | ruby 1.8.7 | 0.010000 0.000000 0.010000 ( 0.004083) | |
14
+ | | | ruby 1.9.2p136 | 0.010000 0.000000 0.010000 ( 0.006944) | |
15
+ | | +----------------+-----------------------------------------------+ |
16
+ | :upto | +----------------+-----------------------------------------------+ |
17
+ | | | :ruby | :measure | |
18
+ | | +----------------+-----------------------------------------------+ |
19
+ | | | ruby 1.8.7 | 0.000000 0.000000 0.000000 ( 0.009500) | |
20
+ | | | ruby 1.9.2p136 | 0.000000 0.000000 0.000000 ( 0.003862) | |
21
+ | | +----------------+-----------------------------------------------+ |
22
+ +--------+--------------------------------------------------------------------+
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ describe "viiite command / " do
3
+
4
+ Dir[File.expand_path('../**/*.cmd', __FILE__)].each do |input|
5
+ cmd = File.readlines(input).first
6
+ specify{ cmd.should =~ /^viiite / }
7
+
8
+ describe "#{File.basename(input)}: #{cmd}" do
9
+ let(:argv) { Quickl.parse_commandline_args(cmd)[1..-1] }
10
+ let(:stdout) { File.join(File.dirname(input), "#{File.basename(input, ".cmd")}.stdout") }
11
+ let(:stderr) { File.join(File.dirname(input), "#{File.basename(input, ".cmd")}.stderr") }
12
+ let(:stdout_expected) { File.exists?(stdout) ? File.read(stdout) : "" }
13
+ let(:stderr_expected) { File.exists?(stderr) ? File.read(stderr) : "" }
14
+
15
+ before{ redirect_io }
16
+ after { restore_io }
17
+
18
+ specify{
19
+ begin
20
+ if i = argv.index("raw_data")
21
+ argv[i] = File.expand_path('../raw_data.rash', __FILE__)
22
+ end
23
+ Viiite::Command.run(argv)
24
+ rescue SystemExit
25
+ $stdout << "SystemExit" << "\n"
26
+ end
27
+ $stdout.string.should(eq(stdout_expected)) unless RUBY_VERSION < "1.9"
28
+ $stderr.string.should(eq(stderr_expected)) unless RUBY_VERSION < "1.9"
29
+ }
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1 @@
1
+ viiite --help
@@ -0,0 +1,25 @@
1
+
2
+ viiite - Benchmark ruby scripts the easy way
3
+
4
+ SYNOPSIS
5
+ viiite [--version] [--help] COMMAND [cmd opts] ARGS...
6
+
7
+ OPTIONS
8
+ -Idirectory specify $LOAD_PATH directory (may be used more than once)
9
+ -rlibrary require the library, before executing viiite
10
+ --help Show help
11
+ --version Show version
12
+
13
+ COMMANDS
14
+ help Show help about a specific command
15
+ run Run a benchmark and output raw data
16
+ report Report benchmarking results as a table
17
+ plot Report benchmarking results as a plot
18
+
19
+ DESCRIPTION
20
+ This command helps you benchmarking ruby applications and manipulating
21
+ benchmark results very simply.
22
+
23
+ See 'viiite help COMMAND' for more information on a specific command.
24
+
25
+ SystemExit
@@ -0,0 +1,23 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'viiite'
3
+
4
+ def redirect_io
5
+ $oldstdout = $stdout
6
+ $oldstderr = $stderr
7
+ $stdout = StringIO.new
8
+ $stderr = StringIO.new
9
+ [$stdout, $stderr]
10
+ end
11
+
12
+ def restore_io
13
+ $stdout = $oldstdout
14
+ $stderr = $oldstderr
15
+ $oldstdout = nil
16
+ $oldstderr = nil
17
+ end
18
+
19
+ def bench_iteration
20
+ File.expand_path('../fixtures/bench_iteration.rb', __FILE__)
21
+ end
22
+
23
+
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ class Command
4
+ describe Run do
5
+
6
+ subject{ Run.run(argv) }
7
+
8
+ before{ redirect_io }
9
+ after { restore_io }
10
+
11
+ describe "when passed a benchmark file" do
12
+ let(:argv){ [bench_iteration] }
13
+ specify{
14
+ subject
15
+ $stdout.string.each_line do |line|
16
+ h = eval(line)
17
+ h.should be_a(Hash)
18
+ h[:tms].should be_a(Viiite::Tms)
19
+ end
20
+ }
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ class Formatter::Plot
4
+ describe "to_data" do
5
+
6
+ let(:data) { [ {:x => 1, :y => 10}, {:x => 2, :y => 20} ] }
7
+
8
+ subject{ Formatter::Plot.to_data(data) }
9
+
10
+ it "should return the expected array" do
11
+ subject.should == [ [1,2], [10,20] ]
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ class Formatter::Plot
4
+ describe "to_dataset" do
5
+
6
+ let(:tuple) {
7
+ {:title => "serie",
8
+ :linewidth => 4,
9
+ :data => [ {:x => 1, :y => 10}, {:x => 2, :y => 20} ] }
10
+ }
11
+ subject{ Formatter::Plot.to_dataset(tuple) }
12
+
13
+ it "should return a correct dataset instance" do
14
+ subject.should be_a(Gnuplot::DataSet)
15
+ subject.title.should == "serie"
16
+ subject.linewidth.should == 4
17
+ subject.data.should == [ [1,2], [10,20] ]
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ class Formatter::Plot
4
+ describe "to_plot" do
5
+
6
+ let(:data) { [ {:x => 1, :y => 10}, {:x => 2, :y => 20} ] }
7
+
8
+ let(:dataset) { {:title => "serie", :linewidth => 4, :data => data } }
9
+
10
+ let(:plot) { {:title => "plot", :series => [ dataset ] } }
11
+
12
+ subject{ Formatter::Plot.to_plot(plot) }
13
+
14
+ it "should return a correct plot instance" do
15
+ subject.is_a?(Gnuplot::Plot).should be_true
16
+ subject["title"].should == '"plot"'
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Runner do
4
+
5
+ it "should be definable with Viiite.bm" do
6
+ b = Viiite.bm do |viiite|
7
+ viiite.report{ 1 + 1 }
8
+ end
9
+ b.should be_kind_of(Viiite::Runner)
10
+ end
11
+
12
+ it "should be executable" do
13
+ b = Viiite.bm do |viiite|
14
+ viiite.report{ 1 + 1 }
15
+ end
16
+ res = []
17
+ b.each do |tuple|
18
+ tuple.should have_key(:tms)
19
+ res << tuple
20
+ end
21
+ res.should be_kind_of(Array)
22
+ res.size.should == 1
23
+ res.first[:tms].should be_kind_of(Viiite::Tms)
24
+ end
25
+
26
+ it "should be enumerable" do
27
+ b = Viiite.bm do |viiite|
28
+ viiite.report{ 1 + 1 }
29
+ end
30
+ res = b.to_a
31
+ res.should be_kind_of(Array)
32
+ res.size.should == 1
33
+ res.first[:tms].should be_kind_of(Viiite::Tms)
34
+ end
35
+
36
+ it "should support variation points" do
37
+ b = Viiite.bm do |viiite|
38
+ 2.times do |i|
39
+ viiite.variation_point(:"#run", i)
40
+ viiite.report do end
41
+ end
42
+ end
43
+ res = b.to_a
44
+ res.collect{|t| t[:"#run"]}.should == [0, 1]
45
+ end
46
+
47
+ it "should support ranging over values" do
48
+ b = Viiite.bm do |viiite|
49
+ viiite.range_over [10, 100, 1000], :times do |t|
50
+ viiite.report do end
51
+ end
52
+ end
53
+ b.to_a.collect{|t| t[:times]}.should == [10, 100, 1000]
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ describe Viiite do
3
+
4
+ it "should have a version number" do
5
+ Viiite.const_defined?(:VERSION).should be_true
6
+ end
7
+
8
+ it "should provide a way to have short ruby descr" do
9
+ Viiite.which_ruby.should_not be_empty
10
+ end
11
+
12
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, ".coerce" do
4
+
5
+ subject{ Tms.coerce(arg) }
6
+
7
+ describe "from zero" do
8
+ let(:arg){ 0.0 }
9
+ specify{
10
+ subject.should be_a(Tms)
11
+ subject.to_a.should eq([0.0, 0.0, 0.0, 0.0, 0.0])
12
+ }
13
+ end
14
+
15
+ describe "from one" do
16
+ let(:arg){ 1.0 }
17
+ specify{
18
+ subject.should be_a(Tms)
19
+ subject.to_a.should eq([1.0, 0.0, 0.0, 0.0, 0.0])
20
+ }
21
+ end
22
+
23
+ describe "from a complete hash" do
24
+ let(:arg){ {
25
+ :utime => 1.0,
26
+ :stime => 2.0,
27
+ :cutime => 3.0,
28
+ :cstime => 4.0,
29
+ :real => 5.0,
30
+ } }
31
+ specify{
32
+ subject.should be_a(Tms)
33
+ subject.to_a.should eq([1.0, 2.0, 3.0, 4.0, 5.0])
34
+ }
35
+ end
36
+
37
+ describe "from an array" do
38
+ let(:arg){ [1.0, 2.0, 3.0, 4.0, 5.0] }
39
+ specify{
40
+ subject.should be_a(Tms)
41
+ subject.to_a.should eq([1.0, 2.0, 3.0, 4.0, 5.0])
42
+ }
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#divide" do
4
+
5
+ subject{ tms / operand }
6
+ let(:tms){ Viiite::Tms.new([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ describe "with an integer" do
9
+ let(:operand){ 2 }
10
+ specify{
11
+ subject.should be_a(Tms)
12
+ subject.to_a.should eq([0.5, 1.0, 1.5, 2.0, 2.5])
13
+ }
14
+ end
15
+
16
+ describe "with another tms" do
17
+ let(:operand){ tms }
18
+ specify{
19
+ subject.should be_a(Tms)
20
+ subject.to_a.should eq([1.0, 1.0, 1.0, 1.0, 1.0])
21
+ }
22
+ end
23
+
24
+ end
25
+ end
26
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#minus" do
4
+
5
+ subject{ tms - operand }
6
+ let(:tms){ Viiite::Tms.new([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ describe "with an integer" do
9
+ let(:operand){ 1 }
10
+ specify{
11
+ subject.should be_a(Tms)
12
+ subject.to_a.should eq([0.0, 1.0, 2.0, 3.0, 4.0])
13
+ }
14
+ end
15
+
16
+ describe "with another tms" do
17
+ let(:operand){ tms }
18
+ specify{
19
+ subject.should be_a(Tms)
20
+ subject.to_a.should eq([0.0, 0.0, 0.0, 0.0, 0.0])
21
+ }
22
+ end
23
+
24
+ end
25
+ end
26
+
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#plus" do
4
+
5
+ subject{ tms + operand }
6
+ let(:tms){ Viiite::Tms.new([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ describe "with an integer" do
9
+ let(:operand){ 2 }
10
+ specify{
11
+ subject.should be_a(Tms)
12
+ subject.to_a.should eq([3.0, 4.0, 5.0, 6.0, 7.0])
13
+ }
14
+ end
15
+
16
+ describe "with another tms" do
17
+ let(:operand){ tms }
18
+ specify{
19
+ subject.should be_a(Tms)
20
+ subject.to_a.should eq([2.0, 4.0, 6.0, 8.0, 10.0])
21
+ }
22
+ end
23
+
24
+ describe "the other way around" do
25
+ subject{ 2 + tms }
26
+ specify{
27
+ subject.should be_a(Tms)
28
+ subject.to_a.should eq([3.0, 4.0, 5.0, 6.0, 7.0])
29
+ }
30
+ end
31
+
32
+ end
33
+ end
34
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#times" do
4
+
5
+ subject{ tms * operand }
6
+ let(:tms){ Viiite::Tms.new([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ describe "with an integer" do
9
+ let(:operand){ 2 }
10
+ specify{
11
+ subject.should be_a(Tms)
12
+ subject.to_a.should eq([2.0, 4.0, 6.0, 8.0, 10.0])
13
+ }
14
+ end
15
+
16
+ describe "with another tms" do
17
+ let(:operand){ tms }
18
+ specify{
19
+ subject.should be_a(Tms)
20
+ subject.to_a.should eq([1.0, 4.0, 9.0, 16.0, 25.0])
21
+ }
22
+ end
23
+
24
+ end
25
+ end
26
+
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#to_a" do
4
+
5
+ subject{ tms.to_a }
6
+ let(:tms){ Tms.coerce([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ it{ should eq([1.0, 2.0, 3.0, 4.0, 5.0]) }
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#to_ruby_literal" do
4
+
5
+ it "should be such that eval leads the same value" do
6
+ tms = Viiite::Tms.new([1.0, 2.0, 3.0, 4.0, 5.0])
7
+ eval(tms.to_ruby_literal).should eql(tms)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ module Viiite
3
+ describe Tms, "#to_s" do
4
+
5
+ subject{ tms.to_s }
6
+ let(:tms){ Tms.coerce([1.0, 2.0, 3.0, 4.0, 5.0]) }
7
+
8
+ it{ should eq(" 1.000000 2.000000 10.000000 ( 5.000000)") }
9
+
10
+ end
11
+ end
data/tasks/clean.rake ADDED
@@ -0,0 +1,3 @@
1
+ task :clean do
2
+ Dir["**/*.rbc"].each{|f| FileUtils.rm_rf(f)}
3
+ end