gitlab-derailed_benchmarks 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/check_changelog.yml +10 -0
  3. data/.gitignore +8 -0
  4. data/.gitlab-ci.yml +56 -0
  5. data/.travis.yml +18 -0
  6. data/Appraisals +26 -0
  7. data/CHANGELOG.md +105 -0
  8. data/Gemfile +9 -0
  9. data/README.md +692 -0
  10. data/Rakefile +29 -0
  11. data/bin/derailed +93 -0
  12. data/derailed_benchmarks.gemspec +39 -0
  13. data/gemfiles/.bundle/config +2 -0
  14. data/gemfiles/rails_5_1.gemfile +15 -0
  15. data/gemfiles/rails_5_2.gemfile +15 -0
  16. data/gemfiles/rails_6_0.gemfile +15 -0
  17. data/gemfiles/rails_git.gemfile +19 -0
  18. data/lib/derailed_benchmarks.rb +51 -0
  19. data/lib/derailed_benchmarks/auth_helper.rb +34 -0
  20. data/lib/derailed_benchmarks/auth_helpers/devise.rb +41 -0
  21. data/lib/derailed_benchmarks/core_ext/kernel_require.rb +88 -0
  22. data/lib/derailed_benchmarks/load_tasks.rb +145 -0
  23. data/lib/derailed_benchmarks/require_tree.rb +65 -0
  24. data/lib/derailed_benchmarks/stats_from_dir.rb +128 -0
  25. data/lib/derailed_benchmarks/stats_in_file.rb +60 -0
  26. data/lib/derailed_benchmarks/tasks.rb +292 -0
  27. data/lib/derailed_benchmarks/version.rb +5 -0
  28. data/test/derailed_benchmarks/core_ext/kernel_require_test.rb +33 -0
  29. data/test/derailed_benchmarks/require_tree_test.rb +95 -0
  30. data/test/derailed_benchmarks/stats_from_dir_test.rb +125 -0
  31. data/test/derailed_test.rb +14 -0
  32. data/test/fixtures/require/child_one.rb +4 -0
  33. data/test/fixtures/require/child_two.rb +9 -0
  34. data/test/fixtures/require/parent_one.rb +8 -0
  35. data/test/fixtures/require/raise_child.rb +6 -0
  36. data/test/fixtures/require/relative_child.rb +4 -0
  37. data/test/fixtures/require/relative_child_two.rb +4 -0
  38. data/test/fixtures/stats/significant/loser.bench.txt +100 -0
  39. data/test/fixtures/stats/significant/winner.bench.txt +100 -0
  40. data/test/integration/tasks_test.rb +132 -0
  41. data/test/rails_app/Rakefile +9 -0
  42. data/test/rails_app/app/assets/config/manifest.js +0 -0
  43. data/test/rails_app/app/assets/javascripts/authenticated.js +2 -0
  44. data/test/rails_app/app/assets/stylesheets/authenticated.css +4 -0
  45. data/test/rails_app/app/controllers/application_controller.rb +17 -0
  46. data/test/rails_app/app/controllers/authenticated_controller.rb +8 -0
  47. data/test/rails_app/app/controllers/pages_controller.rb +14 -0
  48. data/test/rails_app/app/helpers/application_helper.rb +4 -0
  49. data/test/rails_app/app/helpers/authenticated_helper.rb +4 -0
  50. data/test/rails_app/app/models/user.rb +13 -0
  51. data/test/rails_app/app/views/authenticated/index.html.erb +1 -0
  52. data/test/rails_app/app/views/layouts/application.html.erb +14 -0
  53. data/test/rails_app/app/views/pages/index.html.erb +1 -0
  54. data/test/rails_app/config.ru +6 -0
  55. data/test/rails_app/config/application.rb +52 -0
  56. data/test/rails_app/config/boot.rb +12 -0
  57. data/test/rails_app/config/database.yml +22 -0
  58. data/test/rails_app/config/environment.rb +11 -0
  59. data/test/rails_app/config/environments/development.rb +27 -0
  60. data/test/rails_app/config/environments/production.rb +51 -0
  61. data/test/rails_app/config/environments/test.rb +37 -0
  62. data/test/rails_app/config/initializers/backtrace_silencers.rb +9 -0
  63. data/test/rails_app/config/initializers/devise.rb +258 -0
  64. data/test/rails_app/config/initializers/inflections.rb +12 -0
  65. data/test/rails_app/config/initializers/mime_types.rb +7 -0
  66. data/test/rails_app/config/initializers/secret_token.rb +13 -0
  67. data/test/rails_app/config/initializers/session_store.rb +10 -0
  68. data/test/rails_app/config/locales/devise.en.yml +59 -0
  69. data/test/rails_app/config/locales/en.yml +9 -0
  70. data/test/rails_app/config/locales/es.yml +10 -0
  71. data/test/rails_app/config/routes.rb +67 -0
  72. data/test/rails_app/db/migrate/20141210070547_devise_create_users.rb +45 -0
  73. data/test/rails_app/db/schema.rb +35 -0
  74. data/test/rails_app/perf.rake +10 -0
  75. data/test/rails_app/public/404.html +26 -0
  76. data/test/rails_app/public/422.html +26 -0
  77. data/test/rails_app/public/500.html +26 -0
  78. data/test/rails_app/public/favicon.ico +0 -0
  79. data/test/rails_app/public/javascripts/application.js +2 -0
  80. data/test/rails_app/public/javascripts/controls.js +965 -0
  81. data/test/rails_app/public/javascripts/dragdrop.js +974 -0
  82. data/test/rails_app/public/javascripts/effects.js +1123 -0
  83. data/test/rails_app/public/javascripts/prototype.js +6001 -0
  84. data/test/rails_app/public/javascripts/rails.js +202 -0
  85. data/test/rails_app/public/stylesheets/.gitkeep +0 -0
  86. data/test/rails_app/script/rails +8 -0
  87. data/test/support/integration_case.rb +7 -0
  88. data/test/test_helper.rb +65 -0
  89. metadata +398 -0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DerailedBenchmarks
4
+ VERSION = "1.6.1"
5
+ end
@@ -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,4 @@
1
+ class ChildOne
2
+ @retained = +""
3
+ 50_000.times.map { @retained << "A" }
4
+ end
@@ -0,0 +1,9 @@
1
+ class ChildTwo
2
+ @retained = +""
3
+ 200_000.times.map { @retained << "A" }
4
+ end
5
+
6
+ begin
7
+ require File.expand_path('../raise_child.rb', __FILE__)
8
+ rescue
9
+ 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,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RaiseChild
4
+ end
5
+
6
+ raise "Ohno"
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RelativeChild
4
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RelativeChildTwo
4
+ end
@@ -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)