gitlab-derailed_benchmarks 1.6.1
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.
- checksums.yaml +7 -0
- data/.github/workflows/check_changelog.yml +10 -0
- data/.gitignore +8 -0
- data/.gitlab-ci.yml +56 -0
- data/.travis.yml +18 -0
- data/Appraisals +26 -0
- data/CHANGELOG.md +105 -0
- data/Gemfile +9 -0
- data/README.md +692 -0
- data/Rakefile +29 -0
- data/bin/derailed +93 -0
- data/derailed_benchmarks.gemspec +39 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_5_1.gemfile +15 -0
- data/gemfiles/rails_5_2.gemfile +15 -0
- data/gemfiles/rails_6_0.gemfile +15 -0
- data/gemfiles/rails_git.gemfile +19 -0
- data/lib/derailed_benchmarks.rb +51 -0
- data/lib/derailed_benchmarks/auth_helper.rb +34 -0
- data/lib/derailed_benchmarks/auth_helpers/devise.rb +41 -0
- data/lib/derailed_benchmarks/core_ext/kernel_require.rb +88 -0
- data/lib/derailed_benchmarks/load_tasks.rb +145 -0
- data/lib/derailed_benchmarks/require_tree.rb +65 -0
- data/lib/derailed_benchmarks/stats_from_dir.rb +128 -0
- data/lib/derailed_benchmarks/stats_in_file.rb +60 -0
- data/lib/derailed_benchmarks/tasks.rb +292 -0
- data/lib/derailed_benchmarks/version.rb +5 -0
- data/test/derailed_benchmarks/core_ext/kernel_require_test.rb +33 -0
- data/test/derailed_benchmarks/require_tree_test.rb +95 -0
- data/test/derailed_benchmarks/stats_from_dir_test.rb +125 -0
- data/test/derailed_test.rb +14 -0
- data/test/fixtures/require/child_one.rb +4 -0
- data/test/fixtures/require/child_two.rb +9 -0
- data/test/fixtures/require/parent_one.rb +8 -0
- data/test/fixtures/require/raise_child.rb +6 -0
- data/test/fixtures/require/relative_child.rb +4 -0
- data/test/fixtures/require/relative_child_two.rb +4 -0
- data/test/fixtures/stats/significant/loser.bench.txt +100 -0
- data/test/fixtures/stats/significant/winner.bench.txt +100 -0
- data/test/integration/tasks_test.rb +132 -0
- data/test/rails_app/Rakefile +9 -0
- data/test/rails_app/app/assets/config/manifest.js +0 -0
- data/test/rails_app/app/assets/javascripts/authenticated.js +2 -0
- data/test/rails_app/app/assets/stylesheets/authenticated.css +4 -0
- data/test/rails_app/app/controllers/application_controller.rb +17 -0
- data/test/rails_app/app/controllers/authenticated_controller.rb +8 -0
- data/test/rails_app/app/controllers/pages_controller.rb +14 -0
- data/test/rails_app/app/helpers/application_helper.rb +4 -0
- data/test/rails_app/app/helpers/authenticated_helper.rb +4 -0
- data/test/rails_app/app/models/user.rb +13 -0
- data/test/rails_app/app/views/authenticated/index.html.erb +1 -0
- data/test/rails_app/app/views/layouts/application.html.erb +14 -0
- data/test/rails_app/app/views/pages/index.html.erb +1 -0
- data/test/rails_app/config.ru +6 -0
- data/test/rails_app/config/application.rb +52 -0
- data/test/rails_app/config/boot.rb +12 -0
- data/test/rails_app/config/database.yml +22 -0
- data/test/rails_app/config/environment.rb +11 -0
- data/test/rails_app/config/environments/development.rb +27 -0
- data/test/rails_app/config/environments/production.rb +51 -0
- data/test/rails_app/config/environments/test.rb +37 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +9 -0
- data/test/rails_app/config/initializers/devise.rb +258 -0
- data/test/rails_app/config/initializers/inflections.rb +12 -0
- data/test/rails_app/config/initializers/mime_types.rb +7 -0
- data/test/rails_app/config/initializers/secret_token.rb +13 -0
- data/test/rails_app/config/initializers/session_store.rb +10 -0
- data/test/rails_app/config/locales/devise.en.yml +59 -0
- data/test/rails_app/config/locales/en.yml +9 -0
- data/test/rails_app/config/locales/es.yml +10 -0
- data/test/rails_app/config/routes.rb +67 -0
- data/test/rails_app/db/migrate/20141210070547_devise_create_users.rb +45 -0
- data/test/rails_app/db/schema.rb +35 -0
- data/test/rails_app/perf.rake +10 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/rails_app/public/javascripts/application.js +2 -0
- data/test/rails_app/public/javascripts/controls.js +965 -0
- data/test/rails_app/public/javascripts/dragdrop.js +974 -0
- data/test/rails_app/public/javascripts/effects.js +1123 -0
- data/test/rails_app/public/javascripts/prototype.js +6001 -0
- data/test/rails_app/public/javascripts/rails.js +202 -0
- data/test/rails_app/public/stylesheets/.gitkeep +0 -0
- data/test/rails_app/script/rails +8 -0
- data/test/support/integration_case.rb +7 -0
- data/test/test_helper.rb +65 -0
- metadata +398 -0
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class KernelRequireTest < ActiveSupport::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              setup do
         | 
| 8 | 
            +
                require 'derailed_benchmarks/core_ext/kernel_require'
         | 
| 9 | 
            +
                GC.disable
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              teardown do
         | 
| 13 | 
            +
                GC.enable
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def assert_node_in_parent(file_name, parent)
         | 
| 17 | 
            +
                file = fixtures_dir(File.join("require", file_name))
         | 
| 18 | 
            +
                node = parent[file]
         | 
| 19 | 
            +
                assert node,                    "Expected:\n#{parent.children}\nto include:\n#{file.inspect}"
         | 
| 20 | 
            +
                assert node.cost < parent.cost, "Expected:\n#{node.inspect}\nto cost less than:\n#{parent.inspect}" unless parent == TOP_REQUIRE
         | 
| 21 | 
            +
                node
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              test "core extension profiles useage" do
         | 
| 25 | 
            +
                require fixtures_dir("require/parent_one.rb")
         | 
| 26 | 
            +
                parent    = assert_node_in_parent("parent_one.rb", TOP_REQUIRE)
         | 
| 27 | 
            +
                assert_node_in_parent("child_one.rb", parent)
         | 
| 28 | 
            +
                child_two = assert_node_in_parent("child_two.rb", parent)
         | 
| 29 | 
            +
                assert_node_in_parent("relative_child", parent)
         | 
| 30 | 
            +
                assert_node_in_parent("relative_child_two", parent)
         | 
| 31 | 
            +
                assert_node_in_parent("raise_child.rb", child_two)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class RequireTree < ActiveSupport::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def tree(name)
         | 
| 8 | 
            +
                DerailedBenchmarks::RequireTree.new(name)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def teardown
         | 
| 12 | 
            +
                DerailedBenchmarks::RequireTree.const_set("REQUIRED_BY",  {})
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              test "default_cost" do
         | 
| 16 | 
            +
                parent =  tree("parent")
         | 
| 17 | 
            +
                assert_equal 0,       parent.cost
         | 
| 18 | 
            +
                value       = rand(0..100)
         | 
| 19 | 
            +
                parent.cost = value
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                assert_equal value, parent.cost
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              test "stores child" do
         | 
| 25 | 
            +
                parent =  tree("parent")
         | 
| 26 | 
            +
                child  =  tree("child")
         | 
| 27 | 
            +
                parent << child
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                # [](name)
         | 
| 30 | 
            +
                assert_equal child,   parent["child"]
         | 
| 31 | 
            +
                # children
         | 
| 32 | 
            +
                assert_equal [child], parent.children
         | 
| 33 | 
            +
                assert_equal [child], parent.sorted_children
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              test "sorts children" do
         | 
| 37 | 
            +
                parent = tree("parent")
         | 
| 38 | 
            +
                parent.cost = rand(5..10)
         | 
| 39 | 
            +
                small  = tree("small")
         | 
| 40 | 
            +
                small.cost = rand(10..100)
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                large  = tree("large")
         | 
| 43 | 
            +
                large.cost = small.cost + 1
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                parent << small
         | 
| 46 | 
            +
                parent << large
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                expected = [large, small]
         | 
| 49 | 
            +
                assert_equal expected, parent.sorted_children
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                expected = <<-OUT
         | 
| 52 | 
            +
            parent: #{ parent.cost.round(4) } MiB
         | 
| 53 | 
            +
              large: #{ large.cost.round(4) } MiB
         | 
| 54 | 
            +
              small: #{ small.cost.round(4) } MiB
         | 
| 55 | 
            +
            OUT
         | 
| 56 | 
            +
                capture  = StringIO.new
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                parent.print_sorted_children(0, capture)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                assert_equal expected, capture.string
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              test "attributes duplicate children" do
         | 
| 64 | 
            +
                parent = tree("parent")
         | 
| 65 | 
            +
                parent.cost = rand(5..10)
         | 
| 66 | 
            +
                small  = tree("small")
         | 
| 67 | 
            +
                small.cost = rand(10..100)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                large  = tree("large")
         | 
| 70 | 
            +
                large.cost = small.cost + 1
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                dup    = tree("large")
         | 
| 73 | 
            +
                dup.cost = 0.4
         | 
| 74 | 
            +
                small << dup
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                parent << small
         | 
| 77 | 
            +
                parent << large
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                expected = [large, small]
         | 
| 80 | 
            +
                assert_equal expected, parent.sorted_children
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                expected = [dup]
         | 
| 83 | 
            +
                assert_equal expected, small.sorted_children
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                expected = <<-OUT
         | 
| 86 | 
            +
            parent: #{ parent.cost.round(4) } MiB
         | 
| 87 | 
            +
              large: #{ large.cost.round(4) } MiB (Also required by: small)
         | 
| 88 | 
            +
              small: #{ small.cost.round(4) } MiB
         | 
| 89 | 
            +
                large: #{ dup.cost.round(4) } MiB (Also required by: parent)
         | 
| 90 | 
            +
            OUT
         | 
| 91 | 
            +
                capture  = StringIO.new
         | 
| 92 | 
            +
                parent.print_sorted_children(0, capture)
         | 
| 93 | 
            +
                assert_equal expected, capture.string
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| @@ -0,0 +1,125 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class StatsFromDirTest < ActiveSupport::TestCase
         | 
| 6 | 
            +
              test "that it works" do
         | 
| 7 | 
            +
                dir = fixtures_dir("stats/significant")
         | 
| 8 | 
            +
                branch_info = {}
         | 
| 9 | 
            +
                branch_info["loser"]  = { desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), name: "loser" }
         | 
| 10 | 
            +
                branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), name: "winner" }
         | 
| 11 | 
            +
                stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                newest = stats.newest
         | 
| 14 | 
            +
                oldest = stats.oldest
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                assert newest.average < oldest.average
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                assert_equal "winner", newest.name
         | 
| 19 | 
            +
                assert_equal "loser", oldest.name
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                assert_in_delta 0.26, stats.d_max, 0.01
         | 
| 22 | 
            +
                assert_in_delta 0.2145966026289347, stats.d_critical, 0.00001
         | 
| 23 | 
            +
                assert_equal true, stats.significant?
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                format = DerailedBenchmarks::StatsFromDir::FORMAT
         | 
| 26 | 
            +
                assert_equal "1.0062", format % stats.x_faster
         | 
| 27 | 
            +
                assert_equal "0.6147", format % stats.percent_faster
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                assert_equal "11.3844", format % newest.median
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              test "alignment" do
         | 
| 33 | 
            +
                dir = fixtures_dir("stats/significant")
         | 
| 34 | 
            +
                branch_info = {}
         | 
| 35 | 
            +
                branch_info["loser"]  = { desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), name: "loser" }
         | 
| 36 | 
            +
                branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), name: "winner" }
         | 
| 37 | 
            +
                stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
         | 
| 38 | 
            +
                def stats.percent_faster
         | 
| 39 | 
            +
                  -0.1
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def stats.x_faster
         | 
| 43 | 
            +
                  0.9922
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                assert_equal 1, stats.align.length
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              test "banner faster" do
         | 
| 50 | 
            +
                dir = fixtures_dir("stats/significant")
         | 
| 51 | 
            +
                branch_info = {}
         | 
| 52 | 
            +
                branch_info["loser"]  = { desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), name: "loser" }
         | 
| 53 | 
            +
                branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), name: "winner" }
         | 
| 54 | 
            +
                stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
         | 
| 55 | 
            +
                newest = stats.newest
         | 
| 56 | 
            +
                oldest = stats.oldest
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                # Test fixture for banner
         | 
| 59 | 
            +
                def stats.d_max
         | 
| 60 | 
            +
                  "0.037"
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                def stats.d_critical
         | 
| 64 | 
            +
                  "0.001"
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def newest.median
         | 
| 68 | 
            +
                  10.5
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                def oldest.median
         | 
| 72 | 
            +
                  11.0
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                expected = <<~EOM
         | 
| 76 | 
            +
            [winner] "I am the new commit" - (10.5 seconds)
         | 
| 77 | 
            +
              FASTER 🚀🚀🚀 by:
         | 
| 78 | 
            +
                1.0476x [older/newer]
         | 
| 79 | 
            +
                4.5455% [(older - newer) / older * 100]
         | 
| 80 | 
            +
            [loser] "Old commit" - (11.0 seconds)
         | 
| 81 | 
            +
            EOM
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                actual = StringIO.new
         | 
| 84 | 
            +
                stats.banner(actual)
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                assert_match expected, actual.string
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
              test "banner slower" do
         | 
| 90 | 
            +
                dir = fixtures_dir("stats/significant")
         | 
| 91 | 
            +
                branch_info = {}
         | 
| 92 | 
            +
                branch_info["loser"]  = { desc: "I am the new commit", time: Time.now, file: dir.join("loser.bench.txt"), name: "loser" }
         | 
| 93 | 
            +
                branch_info["winner"] = { desc: "Old commit", time: Time.now - 10, file: dir.join("winner.bench.txt"), name: "winner" }
         | 
| 94 | 
            +
                stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
         | 
| 95 | 
            +
                newest = stats.newest
         | 
| 96 | 
            +
                oldest = stats.oldest
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                def oldest.median
         | 
| 99 | 
            +
                  10.5
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                def newest.median
         | 
| 103 | 
            +
                  11.0
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                expected = <<~EOM
         | 
| 107 | 
            +
            [loser] "I am the new commit" - (11.0 seconds)
         | 
| 108 | 
            +
              SLOWER 🐢🐢🐢 by:
         | 
| 109 | 
            +
                 0.9545x [older/newer]
         | 
| 110 | 
            +
                -4.7619% [(older - newer) / older * 100]
         | 
| 111 | 
            +
            [winner] "Old commit" - (10.5 seconds)
         | 
| 112 | 
            +
            EOM
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                actual = StringIO.new
         | 
| 115 | 
            +
                stats.banner(actual)
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                assert_match expected, actual.string
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
              test "stats from samples with slightly different sizes" do
         | 
| 121 | 
            +
                stats = DerailedBenchmarks::StatsFromDir.new({})
         | 
| 122 | 
            +
                out = stats.statistical_test([100,101,102, 100, 101, 99], [1,3, 3, 2])
         | 
| 123 | 
            +
                assert out[:alternative]
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class DerailedBenchmarksTest < ActiveSupport::TestCase
         | 
| 6 | 
            +
              test "truth" do
         | 
| 7 | 
            +
                assert_kind_of Module, DerailedBenchmarks
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              test "gem_is_bundled?" do
         | 
| 11 | 
            +
                assert DerailedBenchmarks.gem_is_bundled?("rack")
         | 
| 12 | 
            +
                refute DerailedBenchmarks.gem_is_bundled?("wicked")
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -0,0 +1,8 @@ | |
| 1 | 
            +
            class ParentOne
         | 
| 2 | 
            +
              @retained = +""
         | 
| 3 | 
            +
              1_000_000.times.map { @retained << "A" }
         | 
| 4 | 
            +
            end
         | 
| 5 | 
            +
            require File.expand_path('../child_one.rb', __FILE__)
         | 
| 6 | 
            +
            require File.expand_path('../child_two.rb', __FILE__)
         | 
| 7 | 
            +
            require_relative 'relative_child'
         | 
| 8 | 
            +
            require_relative File.expand_path('relative_child_two', __dir__)
         | 
| @@ -0,0 +1,100 @@ | |
| 1 | 
            +
              9.590142   0.831269  10.457801 ( 11.437769)
         | 
| 2 | 
            +
              9.836019   0.837319  10.728024 ( 11.792425)
         | 
| 3 | 
            +
              9.889497   0.837097  10.762795 ( 11.747066)
         | 
| 4 | 
            +
              9.532349   0.835770  10.407767 ( 11.343758)
         | 
| 5 | 
            +
              9.498824   0.821246  10.366225 ( 11.282013)
         | 
| 6 | 
            +
              9.531201   0.834812  10.412715 ( 11.330127)
         | 
| 7 | 
            +
              9.583804   0.830178  10.449280 ( 11.384867)
         | 
| 8 | 
            +
              9.681340   0.834776  10.553697 ( 11.496842)
         | 
| 9 | 
            +
              9.629079   0.820234  10.487276 ( 11.406677)
         | 
| 10 | 
            +
              9.616845   0.818370  10.481193 ( 11.395825)
         | 
| 11 | 
            +
              9.738706   0.825397  10.600923 ( 11.541978)
         | 
| 12 | 
            +
              9.613132   0.827242  10.477559 ( 11.406065)
         | 
| 13 | 
            +
              9.486763   0.818159  10.342470 ( 11.305299)
         | 
| 14 | 
            +
              9.590618   0.833308  10.468615 ( 11.428548)
         | 
| 15 | 
            +
              9.725126   0.842955  10.604727 ( 11.580922)
         | 
| 16 | 
            +
              9.598757   0.846951  10.491222 ( 11.462324)
         | 
| 17 | 
            +
              9.484803   0.836242  10.366269 ( 11.328111)
         | 
| 18 | 
            +
              9.591107   0.818305  10.455931 ( 11.381660)
         | 
| 19 | 
            +
              9.745620   0.841107  10.623715 ( 11.572584)
         | 
| 20 | 
            +
              9.670502   0.826673  10.535566 ( 11.464770)
         | 
| 21 | 
            +
              9.573957   0.825235  10.439166 ( 11.358507)
         | 
| 22 | 
            +
              9.468308   0.817744  10.330541 ( 11.240717)
         | 
| 23 | 
            +
              9.799312   0.833922  10.670213 ( 11.645225)
         | 
| 24 | 
            +
              9.575413   0.828039  10.444712 ( 11.366111)
         | 
| 25 | 
            +
              9.632808   0.828399  10.506581 ( 11.439761)
         | 
| 26 | 
            +
              9.599766   0.829294  10.467003 ( 11.427869)
         | 
| 27 | 
            +
              9.521930   0.828257  10.388242 ( 11.347915)
         | 
| 28 | 
            +
              9.842608   0.815513  10.694427 ( 11.667158)
         | 
| 29 | 
            +
              9.590377   0.837459  10.467418 ( 11.433524)
         | 
| 30 | 
            +
              9.729984   0.819101  10.587020 ( 11.539660)
         | 
| 31 | 
            +
              9.540025   0.819396  10.396442 ( 11.314444)
         | 
| 32 | 
            +
              9.615953   0.827258  10.479946 ( 11.414527)
         | 
| 33 | 
            +
              9.572009   0.824862  10.438432 ( 11.362800)
         | 
| 34 | 
            +
              9.612657   0.818645  10.476568 ( 11.385235)
         | 
| 35 | 
            +
              9.755889   0.823267  10.615302 ( 11.545301)
         | 
| 36 | 
            +
              9.493372   0.813202  10.345646 ( 11.254617)
         | 
| 37 | 
            +
              9.529610   0.816457  10.391484 ( 11.305237)
         | 
| 38 | 
            +
              9.575646   0.828898  10.449636 ( 11.374993)
         | 
| 39 | 
            +
              9.533278   0.828915  10.405592 ( 11.347798)
         | 
| 40 | 
            +
              9.692731   0.845925  10.577313 ( 11.545701)
         | 
| 41 | 
            +
              9.662406   0.835481  10.543032 ( 11.511367)
         | 
| 42 | 
            +
              9.588803   0.834782  10.468166 ( 11.427231)
         | 
| 43 | 
            +
              9.696038   0.832612  10.573877 ( 11.545533)
         | 
| 44 | 
            +
              9.612567   0.833363  10.491381 ( 11.410244)
         | 
| 45 | 
            +
              9.471584   0.836005  10.352883 ( 11.303213)
         | 
| 46 | 
            +
              9.682906   0.829932  10.558423 ( 11.466843)
         | 
| 47 | 
            +
              9.676123   0.825750  10.548111 ( 11.468789)
         | 
| 48 | 
            +
              9.509686   0.826678  10.380435 ( 11.290658)
         | 
| 49 | 
            +
              9.552683   0.826631  10.421387 ( 11.337799)
         | 
| 50 | 
            +
              9.579964   0.829423  10.447095 ( 11.358198)
         | 
| 51 | 
            +
              9.506519   0.812635  10.357147 ( 11.313867)
         | 
| 52 | 
            +
              9.654363   0.839408  10.531093 ( 11.515562)
         | 
| 53 | 
            +
              9.576167   0.833579  10.447897 ( 11.421267)
         | 
| 54 | 
            +
              9.498507   0.826285  10.370417 ( 11.336780)
         | 
| 55 | 
            +
              9.758637   0.842156  10.645638 ( 11.595915)
         | 
| 56 | 
            +
              9.635031   0.836329  10.516094 ( 11.475492)
         | 
| 57 | 
            +
              9.934052   0.825471  10.794286 ( 11.812346)
         | 
| 58 | 
            +
              9.652537   0.821982  10.520060 ( 11.434903)
         | 
| 59 | 
            +
              9.526788   0.820300  10.384780 ( 11.306397)
         | 
| 60 | 
            +
              9.473180   0.812507  10.329689 ( 11.233813)
         | 
| 61 | 
            +
              9.862016   0.841529  10.757393 ( 11.734586)
         | 
| 62 | 
            +
              9.534627   0.821267  10.392666 ( 11.313970)
         | 
| 63 | 
            +
              9.640884   0.837997  10.515254 ( 11.489616)
         | 
| 64 | 
            +
              9.535812   0.826216  10.407273 ( 11.318032)
         | 
| 65 | 
            +
              9.588703   0.851935  10.476997 ( 11.462256)
         | 
| 66 | 
            +
              9.574569   0.834756  10.454909 ( 11.404434)
         | 
| 67 | 
            +
              9.650073   0.839516  10.535755 ( 11.488113)
         | 
| 68 | 
            +
              9.551275   0.822510  10.415396 ( 11.378195)
         | 
| 69 | 
            +
              9.627255   0.829954  10.500136 ( 11.458503)
         | 
| 70 | 
            +
              9.560385   0.814457  10.419578 ( 11.333235)
         | 
| 71 | 
            +
              9.572809   0.819290  10.438854 ( 11.349594)
         | 
| 72 | 
            +
              9.660163   0.824722  10.530198 ( 11.443437)
         | 
| 73 | 
            +
              9.661319   0.837408  10.550881 ( 11.512634)
         | 
| 74 | 
            +
              9.637423   0.837322  10.520727 ( 11.432594)
         | 
| 75 | 
            +
              9.664915   0.825478  10.526599 ( 11.464716)
         | 
| 76 | 
            +
              9.644935   0.814938  10.505644 ( 11.424535)
         | 
| 77 | 
            +
              9.799771   0.835598  10.671993 ( 11.613622)
         | 
| 78 | 
            +
              9.791496   0.840368  10.676233 ( 11.643770)
         | 
| 79 | 
            +
              9.760101   0.850254  10.648067 ( 11.619884)
         | 
| 80 | 
            +
              9.784358   0.829651  10.658058 ( 11.632889)
         | 
| 81 | 
            +
              9.727932   0.844568  10.616464 ( 11.578881)
         | 
| 82 | 
            +
              9.776381   0.847439  10.663001 ( 11.648257)
         | 
| 83 | 
            +
              9.839221   0.835333  10.714699 ( 11.670378)
         | 
| 84 | 
            +
              9.697873   0.836432  10.570815 ( 11.541265)
         | 
| 85 | 
            +
              9.867105   0.836122  10.741859 ( 11.681261)
         | 
| 86 | 
            +
              9.675377   0.826509  10.539536 ( 11.465271)
         | 
| 87 | 
            +
              9.703541   0.830895  10.578611 ( 11.502074)
         | 
| 88 | 
            +
              9.717583   0.832110  10.586737 ( 11.531415)
         | 
| 89 | 
            +
              9.784151   0.842351  10.662311 ( 11.647167)
         | 
| 90 | 
            +
              9.741646   0.832834  10.612608 ( 11.580701)
         | 
| 91 | 
            +
              9.687384   0.798745  10.525026 ( 11.493736)
         | 
| 92 | 
            +
              9.698579   0.851183  10.586010 ( 11.588731)
         | 
| 93 | 
            +
              9.712651   0.823867  10.573837 ( 11.540969)
         | 
| 94 | 
            +
              9.657543   0.829349  10.524768 ( 11.443846)
         | 
| 95 | 
            +
              9.675987   0.807980  10.521943 ( 11.451106)
         | 
| 96 | 
            +
              9.744757   0.817850  10.600094 ( 11.535379)
         | 
| 97 | 
            +
              9.683474   0.836913  10.557015 ( 11.525771)
         | 
| 98 | 
            +
              9.922540   0.843157  10.805096 ( 11.808377)
         | 
| 99 | 
            +
              9.696813   0.821768  10.554695 ( 11.464342)
         | 
| 100 | 
            +
              9.760965   0.836511  10.636968 ( 11.594082)
         | 
| @@ -0,0 +1,100 @@ | |
| 1 | 
            +
              9.558387   0.795543  10.392696 ( 11.309311)
         | 
| 2 | 
            +
              9.524045   0.803011  10.364301 ( 11.318477)
         | 
| 3 | 
            +
              9.534609   0.804759  10.383564 ( 11.340585)
         | 
| 4 | 
            +
              9.535700   0.800444  10.373048 ( 11.289682)
         | 
| 5 | 
            +
              9.532372   0.794646  10.371722 ( 11.287656)
         | 
| 6 | 
            +
              9.556350   0.822103  10.425949 ( 11.413659)
         | 
| 7 | 
            +
              9.586525   0.824110  10.456246 ( 11.429651)
         | 
| 8 | 
            +
              9.551907   0.830509  10.428443 ( 11.411978)
         | 
| 9 | 
            +
              9.518711   0.834491  10.398652 ( 11.376422)
         | 
| 10 | 
            +
              9.569772   0.827570  10.442956 ( 11.413585)
         | 
| 11 | 
            +
              9.618950   0.829319  10.485139 ( 11.440848)
         | 
| 12 | 
            +
              9.556727   0.807981  10.401758 ( 11.328267)
         | 
| 13 | 
            +
              9.480701   0.804683  10.322360 ( 11.245781)
         | 
| 14 | 
            +
              9.563369   0.801410  10.409686 ( 11.334188)
         | 
| 15 | 
            +
              9.493082   0.805298  10.335983 ( 11.248441)
         | 
| 16 | 
            +
              9.681861   0.803602  10.524930 ( 11.456107)
         | 
| 17 | 
            +
              9.614529   0.781155  10.444055 ( 11.364476)
         | 
| 18 | 
            +
              9.597825   0.806409  10.442217 ( 11.365743)
         | 
| 19 | 
            +
              9.538346   0.813941  10.388972 ( 11.346084)
         | 
| 20 | 
            +
              9.538091   0.808328  10.391165 ( 11.346197)
         | 
| 21 | 
            +
              9.502600   0.812638  10.360783 ( 11.306602)
         | 
| 22 | 
            +
              9.571149   0.826238  10.449697 ( 11.411387)
         | 
| 23 | 
            +
              9.531260   0.821429  10.390722 ( 11.532200)
         | 
| 24 | 
            +
              9.611447   0.783734  10.431579 ( 11.351863)
         | 
| 25 | 
            +
              9.533522   0.806067  10.384192 ( 11.296454)
         | 
| 26 | 
            +
              9.586843   0.820340  10.444013 ( 11.383357)
         | 
| 27 | 
            +
              9.615441   0.804255  10.456321 ( 11.385184)
         | 
| 28 | 
            +
              9.462530   0.803438  10.302507 ( 11.223665)
         | 
| 29 | 
            +
              9.676985   0.789649  10.511461 ( 11.427901)
         | 
| 30 | 
            +
              9.574692   0.816601  10.427670 ( 11.374204)
         | 
| 31 | 
            +
              9.596892   0.803796  10.437442 ( 11.362358)
         | 
| 32 | 
            +
              9.562942   0.815001  10.415687 ( 11.383593)
         | 
| 33 | 
            +
              9.622502   0.804110  10.470848 ( 11.488275)
         | 
| 34 | 
            +
              9.766782   0.828892  10.632272 ( 11.635267)
         | 
| 35 | 
            +
              9.612909   0.804247  10.455650 ( 11.421374)
         | 
| 36 | 
            +
              9.537415   0.805782  10.390754 ( 11.294518)
         | 
| 37 | 
            +
              9.763286   0.805568  10.614687 ( 11.533764)
         | 
| 38 | 
            +
              9.507627   0.806313  10.350967 ( 11.299277)
         | 
| 39 | 
            +
              9.469710   0.803944  10.312100 ( 11.232190)
         | 
| 40 | 
            +
              9.535007   0.795200  10.371960 ( 11.292289)
         | 
| 41 | 
            +
              9.530755   0.797043  10.372644 ( 11.289316)
         | 
| 42 | 
            +
              9.588961   0.806621  10.431681 ( 11.368492)
         | 
| 43 | 
            +
              9.592512   0.808849  10.446866 ( 11.359820)
         | 
| 44 | 
            +
              9.653610   0.803463  10.501491 ( 11.419194)
         | 
| 45 | 
            +
              9.547770   0.812003  10.405405 ( 11.368690)
         | 
| 46 | 
            +
              9.682181   0.812963  10.530854 ( 11.485025)
         | 
| 47 | 
            +
              9.491677   0.807396  10.344595 ( 11.281067)
         | 
| 48 | 
            +
              9.587365   0.813596  10.442915 ( 11.394766)
         | 
| 49 | 
            +
              9.569528   0.814968  10.421925 ( 11.395829)
         | 
| 50 | 
            +
              9.499610   0.806958  10.342308 ( 11.266410)
         | 
| 51 | 
            +
              9.470981   0.802210  10.311858 ( 11.228286)
         | 
| 52 | 
            +
              9.562924   0.794929  10.395599 ( 11.322258)
         | 
| 53 | 
            +
              9.601453   0.810256  10.456259 ( 11.374217)
         | 
| 54 | 
            +
              9.505371   0.799272  10.354669 ( 11.279456)
         | 
| 55 | 
            +
              9.457992   0.795362  10.289520 ( 11.205184)
         | 
| 56 | 
            +
              9.628120   0.787671  10.453407 ( 11.377989)
         | 
| 57 | 
            +
              9.627611   0.805838  10.470388 ( 11.399739)
         | 
| 58 | 
            +
              9.675034   0.812966  10.532779 ( 11.515440)
         | 
| 59 | 
            +
              9.612906   0.807182  10.457964 ( 11.434272)
         | 
| 60 | 
            +
              9.480996   0.803877  10.325013 ( 11.265876)
         | 
| 61 | 
            +
              9.717399   0.823376  10.577638 ( 11.569749)
         | 
| 62 | 
            +
              9.665028   0.809491  10.511645 ( 11.488256)
         | 
| 63 | 
            +
              9.512832   0.805858  10.363675 ( 11.339722)
         | 
| 64 | 
            +
              9.654066   0.807307  10.506755 ( 11.426100)
         | 
| 65 | 
            +
              9.865550   0.794908  10.703626 ( 11.618194)
         | 
| 66 | 
            +
              9.652618   0.793610  10.493186 ( 11.419415)
         | 
| 67 | 
            +
              9.499487   0.796346  10.341364 ( 11.250758)
         | 
| 68 | 
            +
              9.544258   0.797515  10.385862 ( 11.284281)
         | 
| 69 | 
            +
              9.739863   0.794279  10.570723 ( 11.509588)
         | 
| 70 | 
            +
              9.487554   0.785309  10.316760 ( 11.233325)
         | 
| 71 | 
            +
              9.481721   0.803731  10.329705 ( 11.255686)
         | 
| 72 | 
            +
              9.466643   0.802025  10.313663 ( 11.234516)
         | 
| 73 | 
            +
              9.565479   0.798706  10.406513 ( 11.374955)
         | 
| 74 | 
            +
              9.546849   0.818211  10.409684 ( 11.368566)
         | 
| 75 | 
            +
              9.559145   0.813582  10.418666 ( 11.401304)
         | 
| 76 | 
            +
              9.547626   0.787676  10.380384 ( 11.305801)
         | 
| 77 | 
            +
              9.731920   0.806463  10.576084 ( 11.499545)
         | 
| 78 | 
            +
              9.634309   0.804944  10.477565 ( 11.398455)
         | 
| 79 | 
            +
              9.663389   0.797418  10.499369 ( 11.418504)
         | 
| 80 | 
            +
              9.741374   0.818880  10.597056 ( 11.575796)
         | 
| 81 | 
            +
              9.683985   0.804469  10.527844 ( 11.457434)
         | 
| 82 | 
            +
              9.739006   0.808335  10.587852 ( 11.513780)
         | 
| 83 | 
            +
              9.761998   0.818945  10.618427 ( 11.614032)
         | 
| 84 | 
            +
              9.737508   0.819736  10.593885 ( 11.588014)
         | 
| 85 | 
            +
              9.735949   0.821038  10.595284 ( 11.552597)
         | 
| 86 | 
            +
              9.750022   0.814069  10.601283 ( 11.567239)
         | 
| 87 | 
            +
              9.700983   0.801116  10.542112 ( 11.471005)
         | 
| 88 | 
            +
              9.720313   0.798207  10.555314 ( 11.473235)
         | 
| 89 | 
            +
              9.685407   0.811225  10.534452 ( 11.467112)
         | 
| 90 | 
            +
              9.677940   0.809071  10.526291 ( 11.447495)
         | 
| 91 | 
            +
              9.609120   0.813429  10.467227 ( 11.372680)
         | 
| 92 | 
            +
              9.712403   0.810281  10.560867 ( 11.485852)
         | 
| 93 | 
            +
              9.748022   0.817132  10.603028 ( 11.522460)
         | 
| 94 | 
            +
              9.737389   0.801790  10.576720 ( 11.522855)
         | 
| 95 | 
            +
              9.709541   0.795349  10.542238 ( 11.544047)
         | 
| 96 | 
            +
              9.658660   0.819237  10.515718 ( 11.520783)
         | 
| 97 | 
            +
              9.765426   0.829642  10.632481 ( 11.615062)
         | 
| 98 | 
            +
              9.731822   0.809695  10.578871 ( 11.558062)
         | 
| 99 | 
            +
              9.575340   0.800450  10.421430 ( 11.318465)
         | 
| 100 | 
            +
              9.682845   0.796365  10.515529 ( 11.435012)
         |