minitest 5.14.0 → 5.17.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0b1641b87002f1e0b64cc5e81815a6bdbd22e22fa25f54f80316fe009f5ad72
4
- data.tar.gz: d63d8373fa0888051f79d4ca405e267e97a5334ffb22aee248227e1485400af3
3
+ metadata.gz: 76379897c6c77174044638d17a95f50b1b2fddbfde053759d864d8b9b419984b
4
+ data.tar.gz: 7cdedb3e76825894a5577f2c639c541402e1955b1166221530e2937b6c605b81
5
5
  SHA512:
6
- metadata.gz: 76fa5340f5d7f9086b802c13440dad142be63e81d7874d4eb4ec42f60f4530038b74cac18830e2066c80572408f095b45c5639879a38790bacfd3c4a4e13730d
7
- data.tar.gz: 80e644aeb07febab6f16d32af2e8435045e415d86d145c37afba0a6f694cba304b934a1ff146186a34b108ae3039ff610318e585af6fd087b5b8143aa1f3808a
6
+ metadata.gz: 5bc0b4b036c2e07d3db6ace79c1d0e51d2aa5cac74a26174ec822f1f987882bffc0165650c86f168ee38b31e9f07d825730b20a1f13b704fc395a9a88a4d9060
7
+ data.tar.gz: e9bdf26bc5a327b72b7a1dbdf701f6cef70561b634a258f932c511f26e7f2886597a05cc4a964749ef16e32529ab6a0cb6d11601f2954c3830444d34c3fcb23b
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,117 @@
1
+ === 5.17.0 / 2022-12-31
2
+
3
+ * 1 minor enhancement:
4
+
5
+ * Refactor setup hooks into a SETUP_METHODS constant. (MSP-Greg)
6
+
7
+ * 3 bug fixes:
8
+
9
+ * Fix kwargs for Mock calls to delegator. (blowmage)
10
+ * Fix kwargs for expectations. (bobmazanec, blowmage)
11
+ * Remove check for .b method. (tenderlove)
12
+
13
+ === 5.16.3 / 2022-08-17
14
+
15
+ * 2 bug fixes:
16
+
17
+ * Fixed exception sanitization by removing TypeError restriction on rescue.
18
+ * Use A instead of deprecated TESTOPTS in rake test:slow. (davidstosik)
19
+
20
+ === 5.16.2 / 2022-07-03
21
+
22
+ * 4 bug fixes:
23
+
24
+ * Added MT_KWARGS_HACK kludge for stub to deal with ruby 2.7 kwargs nastiness. (tsugimoto)
25
+ * In #expect, pop Hash class from args if $MT_KWARGS_HACK. (casperisfine)
26
+ * In above scenario, set expected kwargs (as Objects) based on actual kwargs.
27
+ * Nuke ivars if exception fails to marshal twice (eg better_errors). (irphilli)
28
+
29
+ === 5.16.1 / 2022-06-20
30
+
31
+ * 2 bug fixes:
32
+
33
+ * Apparently adding real kwarg support to mocks/stubs broke some code. Fixed.
34
+ * Use `MT_KWARGS_HACK=1` to activate the kludgy kwargs support w/ caveats.
35
+ * Clarified some doco wrt the block on #stub.
36
+
37
+ === 5.16.0 / 2022-06-14
38
+
39
+ * 2 major enhancements:
40
+
41
+ * Added Minitest::TestTask.
42
+ * Dropping ruby 2.2 - 2.5. 2.6 is DTM soon too.
43
+
44
+ * 11 minor enhancements:
45
+
46
+ * Added --show-skips option to show skips at end of run but not require --verbose. (MSP-Greg)
47
+ * Added Minitest.seed, the random seed used by the run.
48
+ * Calling `srand Minitest.seed` before all shuffles to ensure determinism.
49
+ * Extended #stub to handle kwargs for both block and call args. (SampsonCrowley)
50
+ * Extended Mock#__call to display kwargs.
51
+ * Extended Mock#expect to record kwargs.
52
+ * Extended Mock#method_missing to take kwargs & compare them against expected.
53
+ * Mock#method_missing displays better errors on arity mismatch.
54
+ * Removed minor optimization removing empty suites before run.
55
+ * Simplified test randomization (test order will change even with fixed seed).
56
+ * assert_match now returns the MatchData on success. (Nakilon)
57
+
58
+ * 3 bug fixes:
59
+
60
+ * (Re)Fixed marshalling of exceptions, neutering them in 2 passes.
61
+ * Fixed more problems with rdoc.
62
+ * Had to patch up mock and stub to deal with <=2.7 kwargs oddities
63
+
64
+ === 5.15.0 / 2021-12-14
65
+
66
+ * 1 major enhancement:
67
+
68
+ * assert_throws returns the value returned, if any. (volmer)
69
+
70
+ * 3 minor enhancements:
71
+
72
+ * Added -S <CODES> option to skip reporting of certain types of output
73
+ * Enable Ruby deprecation warnings by default. (casperisfine)
74
+ * Use Etc.nprocessors by default in order to maximize cpu usage. (tonytonyjan)
75
+
76
+ * 6 bug fixes:
77
+
78
+ * Close then unlink tempfiles on Windows. (nobu)
79
+ * Fixed #skip_until for windows paths. (MSP-Greg)
80
+ * Fixed a bunch of tests for jruby and windows. (MSP-Greg)
81
+ * Fixed marshalling of specs if they error. (tenderlove, jeremyevans, et al)
82
+ * Updated deprecation message for block expectations. (blowmage)
83
+ * Use Kernel.warn directly in expectations in case CUT defines their own warn. (firien)
84
+
85
+ === 5.14.4 / 2021-02-23
86
+
87
+ * 1 bug fix:
88
+
89
+ * Fixed deprecation warning using stub with methods using keyword arguments. (Nakilon)
90
+
91
+ === 5.14.3 / 2021-01-05
92
+
93
+ * 1 bug fix:
94
+
95
+ * Bumped require_ruby_version to < 4 (trunk = 3.1).
96
+
97
+ === 5.14.2 / 2020-08-31
98
+
99
+ * 1 bug fix:
100
+
101
+ * Bumped ruby version to include 3.0 (trunk).
102
+
103
+ === 5.14.1 / 2020-05-15
104
+
105
+ * 3 minor enhancements:
106
+
107
+ * Minitest.filter_backtrace returns original backtrace if filter comes back empty.
108
+ * Minitest::BacktraceFilter now returns entire backtrace if $MT_DEBUG set in env.
109
+ * Return true on a successful refute. (jusleg)
110
+
111
+ * 1 bug fix:
112
+
113
+ * Fixed expectation doco to not use global expectations.
114
+
1
115
  === 5.14.0 / 2020-01-11
2
116
 
3
117
  * 2 minor enhancements:
@@ -193,7 +307,7 @@
193
307
  * 2 bug fixes:
194
308
 
195
309
  * Re-release to refresh gem certificate signing. ugh.
196
- * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
310
+ * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
197
311
 
198
312
  === 5.9.0 / 2016-05-16
199
313
 
@@ -217,7 +331,7 @@
217
331
  * 2 bug fixes:
218
332
 
219
333
  * Re-release to refresh gem certificate signing. ugh.
220
- * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
334
+ * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
221
335
 
222
336
  === 5.8.4 / 2016-01-21
223
337
 
@@ -531,7 +645,7 @@ Minitest 5:
531
645
  * Added Minitest::Benchmark.
532
646
  * Your benchmarks need to move to their own subclass.
533
647
  * Benchmarks using the spec DSL have to have "Bench" somewhere in their describe.
534
- * MiniTest::Unit.after_tests moved to Minitest.after_tests
648
+ * MiniTest::Unit.after_tests moved to Minitest.after_run
535
649
  * MiniTest::Unit.autorun is now Minitest.autorun. Just require minitest/autorun pls.
536
650
  * Removed ParallelEach#grep since it isn't used anywhere.
537
651
  * Renamed Runnable#__name__ to Runnable#name (but uses @NAME internally).
@@ -1377,4 +1491,3 @@ back.
1377
1491
  * 1 major enhancement
1378
1492
 
1379
1493
  * Birthday!
1380
-
data/Manifest.txt CHANGED
@@ -17,6 +17,7 @@ lib/minitest/pride.rb
17
17
  lib/minitest/pride_plugin.rb
18
18
  lib/minitest/spec.rb
19
19
  lib/minitest/test.rb
20
+ lib/minitest/test_task.rb
20
21
  lib/minitest/unit.rb
21
22
  test/minitest/metametameta.rb
22
23
  test/minitest/test_minitest_assertions.rb
@@ -25,3 +26,4 @@ test/minitest/test_minitest_mock.rb
25
26
  test/minitest/test_minitest_reporter.rb
26
27
  test/minitest/test_minitest_spec.rb
27
28
  test/minitest/test_minitest_test.rb
29
+ test/minitest/test_minitest_test_task.rb
data/README.rdoc CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  home :: https://github.com/seattlerb/minitest
4
4
  bugs :: https://github.com/seattlerb/minitest/issues
5
- rdoc :: http://docs.seattlerb.org/minitest
5
+ rdoc :: https://docs.seattlerb.org/minitest
6
6
  vim :: https://github.com/sunaku/vim-ruby-minitest
7
7
  emacs:: https://github.com/arthurnn/minitest-emacs
8
8
 
@@ -70,6 +70,7 @@ extract-method refactorings still apply.
70
70
  * minitest/mock - a simple and clean mock/stub system.
71
71
  * minitest/benchmark - an awesome way to assert your algorithm's performance.
72
72
  * minitest/pride - show your pride in testing!
73
+ * minitest/test_task - a full-featured and clean rake task generator.
73
74
  * Incredibly small and fast runner, but no bells and whistles.
74
75
  * Written by squishy human beings. Software can never be perfect. We will all eventually die.
75
76
 
@@ -186,7 +187,7 @@ Output is tab-delimited to make it easy to paste into a spreadsheet.
186
187
  === Mocks
187
188
 
188
189
  Mocks and stubs defined using terminology by Fowler & Meszaros at
189
- http://www.martinfowler.com/bliki/TestDouble.html:
190
+ https://www.martinfowler.com/bliki/TestDouble.html:
190
191
 
191
192
  "Mocks are pre-programmed with expectations which form a specification
192
193
  of the calls they are expected to receive. They can throw an exception
@@ -237,7 +238,7 @@ an example of asserting that code inside a thread is run:
237
238
  === Stubs
238
239
 
239
240
  Mocks and stubs are defined using terminology by Fowler & Meszaros at
240
- http://www.martinfowler.com/bliki/TestDouble.html:
241
+ https://www.martinfowler.com/bliki/TestDouble.html:
241
242
 
242
243
  "Stubs provide canned answers to calls made during the test".
243
244
 
@@ -264,9 +265,8 @@ new non-existing method:
264
265
 
265
266
  === Running Your Tests
266
267
 
267
- Ideally, you'll use a rake task to run your tests, either piecemeal or
268
- all at once. Both rake and rails ship with rake tasks for running your
269
- tests. BUT! You don't have to:
268
+ Ideally, you'll use a rake task to run your tests (see below), either
269
+ piecemeal or all at once. BUT! You don't have to:
270
270
 
271
271
  % ruby -Ilib:test test/minitest/test_minitest_test.rb
272
272
  Run options: --seed 37685
@@ -294,18 +294,45 @@ provided via plugins. To see them, simply run with +--help+:
294
294
  -p, --pride Pride. Show your testing pride!
295
295
  -a, --autotest Connect to autotest server.
296
296
 
297
+ === Rake Tasks
298
+
297
299
  You can set up a rake task to run all your tests by adding this to your Rakefile:
298
300
 
299
- require "rake/testtask"
301
+ require "minitest/test_task"
302
+
303
+ Minitest::TestTask.create # named test, sensible defaults
304
+
305
+ # or more explicitly:
300
306
 
301
- Rake::TestTask.new(:test) do |t|
307
+ Minitest::TestTask.create(:test) do |t|
302
308
  t.libs << "test"
303
309
  t.libs << "lib"
304
- t.test_files = FileList["test/**/test_*.rb"]
310
+ t.warning = false
311
+ t.test_globs = ["test/**/*_test.rb"]
305
312
  end
306
313
 
307
314
  task :default => :test
308
315
 
316
+ Each of these will generate 4 tasks:
317
+
318
+ rake test :: Run the test suite.
319
+ rake test:cmd :: Print out the test command.
320
+ rake test:isolated :: Show which test files fail when run separately.
321
+ rake test:slow :: Show bottom 25 tests sorted by time.
322
+
323
+ === Rake Task Variables
324
+
325
+ There are a bunch of variables you can supply to rake to modify the run.
326
+
327
+ MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs.
328
+ N :: -n: Tests to run (string or /regexp/).
329
+ X :: -x: Tests to exclude (string or /regexp/).
330
+ A :: Any extra arguments. Honors shell quoting.
331
+ MT_CPU :: How many threads to use for parallel test runs
332
+ SEED :: -s --seed Sets random seed.
333
+ TESTOPTS :: Deprecated, same as A
334
+ FILTER :: Deprecated, same as A
335
+
309
336
  == Writing Extensions
310
337
 
311
338
  To define a plugin, add a file named minitest/XXX_plugin.rb to your
@@ -376,6 +403,39 @@ Using our example above, here is how we might implement MyCI:
376
403
 
377
404
  == FAQ
378
405
 
406
+ === What versions are compatible with what? Or what versions are supported?
407
+
408
+ Minitest is a dependency of rails, which until fairly recently had an
409
+ overzealous backwards compatibility policy. As such, I'm stuck
410
+ supporting versions of ruby that are long past EOL. Hopefully I'll be
411
+ able to support only current versions of ruby sometime in the near
412
+ future.
413
+
414
+ (As of 2022-11-29)
415
+
416
+ Current versions of rails: (https://endoflife.date/rails)
417
+
418
+ | rails | min ruby | rec ruby | minitest | status | EOL Date |
419
+ |-------+----------+----------+----------+----------+------------|
420
+ | 7.0 | >= 2.7 | 3.1 | >= 5.1 | Current | 2025-06-01?|
421
+ | 6.1 | >= 2.5 | 3.0 | >= 5.1 | Maint | 2024-06-01?|
422
+ | 6.0 | >= 2.5 | 2.6 | >= 5.1 | Security | 2023-06-01 |
423
+ | 5.2 | >= 2.2.2 | 2.5 | ~> 5.1 | EOL | 2022-06-01 |
424
+
425
+ Current versions of ruby: (https://endoflife.date/ruby)
426
+
427
+ | ruby | Status | EOL Date |
428
+ |------+---------+------------|
429
+ | 3.1 | Current | 2025-12-25 |
430
+ | 3.0 | Maint | 2024-03-31 |
431
+ | 2.7 | Maint* | 2023-03-31 |
432
+ | 2.6 | EOL | 2022-03-31 |
433
+ | 2.5 | EOL | 2021-03-31 |
434
+
435
+ See also:
436
+
437
+ * https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
438
+
379
439
  === How to test SimpleDelegates?
380
440
 
381
441
  The following implementation and test:
@@ -578,6 +638,7 @@ minitest-capistrano :: Assertions and expectations for testing
578
638
  Capistrano recipes.
579
639
  minitest-capybara :: Capybara matchers support for minitest unit and
580
640
  spec.
641
+ minitest-cc :: It provides minimal information about code coverage.
581
642
  minitest-chef-handler :: Run Minitest suites as Chef report handlers
582
643
  minitest-ci :: CI reporter plugin for Minitest.
583
644
  minitest-context :: Defines contexts for code reuse in Minitest
@@ -611,6 +672,7 @@ minitest-growl :: Test notifier for minitest via growl.
611
672
  minitest-happy :: GLOBALLY ACTIVATE MINITEST PRIDE! RAWR!
612
673
  minitest-have_tag :: Adds Minitest assertions to test for the existence of
613
674
  HTML tags, including contents, within a provided string.
675
+ minitest-heat :: Reporting that builds a heat map of failure locations
614
676
  minitest-hooks :: Around and before_all/after_all/around_all hooks
615
677
  minitest-hyper :: Pretty, single-page HTML reports for your Minitest runs
616
678
  minitest-implicit-subject :: Implicit declaration of the test subject.
@@ -675,7 +737,7 @@ minitest-stub-const :: Stub constants for the duration of a block.
675
737
  minitest-tags :: Add tags for minitest.
676
738
  minitest-unordered :: Adds a new assertion to minitest for checking the
677
739
  contents of a collection, ignoring element order.
678
- minitest-vcr :: Automatic cassette managment with Minitest::Spec
740
+ minitest-vcr :: Automatic cassette management with Minitest::Spec
679
741
  and VCR.
680
742
  minitest_log :: Adds structured logging, data explication, and verdicts.
681
743
  minitest_owrapper :: Get tests results as a TestResult object.
@@ -685,8 +747,13 @@ mongoid-minitest :: Minitest matchers for Mongoid.
685
747
  mutant-minitest :: Minitest integration for mutant.
686
748
  pry-rescue :: A pry plugin w/ minitest support. See
687
749
  pry-rescue/minitest.rb.
750
+ rematch :: Declutter your test files from large hardcoded data
751
+ and update them automatically when your code changes.
688
752
  rspec2minitest :: Easily translate any RSpec matchers to Minitest
689
753
  assertions and expectations.
754
+ stubberry :: Multiple stubbing 'berries', sweet and useful
755
+ stub helpers and assertions. ( stub_must,
756
+ assert_method_called, stubbing ORM objects by id )
690
757
 
691
758
  == Unknown Extensions:
692
759
 
@@ -712,7 +779,7 @@ Authors... Please send me a pull request with a description of your minitest ext
712
779
 
713
780
  == Minitest related goods
714
781
 
715
- * minitest/pride fabric: http://www.spoonflower.com/fabric/3928730-again-by-katie_allen
782
+ * minitest/pride fabric: https://www.spoonflower.com/fabric/3928730-again-by-katie_allen
716
783
 
717
784
  == REQUIREMENTS:
718
785
 
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ Hoe.spec "minitest" do
11
11
 
12
12
  license "MIT"
13
13
 
14
- require_ruby_version "~> 2.2"
14
+ require_ruby_version [">= 2.6", "< 4.0"]
15
15
  end
16
16
 
17
17
  desc "Find missing expectations"
@@ -21,7 +21,7 @@ task :specs do
21
21
  require "minitest/spec"
22
22
 
23
23
  pos_prefix, neg_prefix = "must", "wont"
24
- skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|raise$)/x
24
+ skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|send|raise$)/x
25
25
  dont_flip_re = /(must|wont)_(include|respond_to)/
26
26
 
27
27
  map = {
@@ -32,6 +32,8 @@ task :specs do
32
32
  /_includes/ => "_include",
33
33
  /(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2',
34
34
  /must_raises/ => "must_raise",
35
+ /(must|wont)_predicate/ => '\1_be',
36
+ /(must|wont)_path_exists/ => 'path_\1_exist',
35
37
  }
36
38
 
37
39
  expectations = Minitest::Expectations.public_instance_methods.map(&:to_s)
data/lib/hoe/minitest.rb CHANGED
@@ -24,9 +24,5 @@ module Hoe::Minitest
24
24
 
25
25
  def define_minitest_tasks
26
26
  self.testlib = :minitest
27
-
28
- # make sure we use the gemmed minitest on 1.9
29
- self.test_prelude = 'gem "minitest"' unless
30
- minitest? or ENV["MT_NO_ISOLATE"]
31
27
  end
32
28
  end
@@ -293,6 +293,8 @@ module Minitest
293
293
  assert_respond_to matcher, :"=~"
294
294
  matcher = Regexp.new Regexp.escape matcher if String === matcher
295
295
  assert matcher =~ obj, msg
296
+
297
+ Regexp.last_match
296
298
  end
297
299
 
298
300
  ##
@@ -473,7 +475,7 @@ module Minitest
473
475
  def assert_throws sym, msg = nil
474
476
  default = "Expected #{mu_pp(sym)} to have been thrown"
475
477
  caught = true
476
- catch(sym) do
478
+ value = catch(sym) do
477
479
  begin
478
480
  yield
479
481
  rescue ThreadError => e # wtf?!? 1.8 + threads == suck
@@ -489,6 +491,7 @@ module Minitest
489
491
  end
490
492
 
491
493
  assert caught, message(msg) { default }
494
+ value
492
495
  rescue Assertion
493
496
  raise
494
497
  rescue => e
@@ -561,15 +564,13 @@ module Minitest
561
564
 
562
565
  return captured_stdout.read, captured_stderr.read
563
566
  ensure
564
- captured_stdout.unlink
565
- captured_stderr.unlink
566
567
  $stdout.reopen orig_stdout
567
568
  $stderr.reopen orig_stderr
568
569
 
569
570
  orig_stdout.close
570
571
  orig_stderr.close
571
- captured_stdout.close
572
- captured_stderr.close
572
+ captured_stdout.close!
573
+ captured_stderr.close!
573
574
  end
574
575
  end
575
576
  end
@@ -628,7 +629,7 @@ module Minitest
628
629
 
629
630
  def refute test, msg = nil
630
631
  msg ||= message { "Expected #{mu_pp(test)} to not be truthy" }
631
- not assert !test, msg
632
+ assert !test, msg
632
633
  end
633
634
 
634
635
  ##
@@ -793,7 +794,7 @@ module Minitest
793
794
 
794
795
  def skip_until y,m,d,msg
795
796
  skip msg if Time.now < Time.local(y, m, d)
796
- where = caller.first.split(/:/, 3).first(2).join ":"
797
+ where = caller.first.rpartition(':in').reject(&:empty?).first
797
798
  warn "Stale skip_until %p at %s" % [msg, where]
798
799
  end
799
800
 
@@ -217,7 +217,7 @@ module Minitest
217
217
  ##
218
218
  # Takes an array of x/y pairs and calculates the general R^2 value.
219
219
  #
220
- # See: http://en.wikipedia.org/wiki/Coefficient_of_determination
220
+ # See: https://en.wikipedia.org/wiki/Coefficient_of_determination
221
221
 
222
222
  def fit_error xys
223
223
  y_bar = sigma(xys) { |_, y| y } / xys.size.to_f
@@ -232,7 +232,7 @@ module Minitest
232
232
  #
233
233
  # Takes x and y values and returns [a, b, r^2].
234
234
  #
235
- # See: http://mathworld.wolfram.com/LeastSquaresFittingExponential.html
235
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingExponential.html
236
236
 
237
237
  def fit_exponential xs, ys
238
238
  n = xs.size
@@ -254,7 +254,7 @@ module Minitest
254
254
  #
255
255
  # Takes x and y values and returns [a, b, r^2].
256
256
  #
257
- # See: http://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
257
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
258
258
 
259
259
  def fit_logarithmic xs, ys
260
260
  n = xs.size
@@ -276,7 +276,7 @@ module Minitest
276
276
  #
277
277
  # Takes x and y values and returns [a, b, r^2].
278
278
  #
279
- # See: http://mathworld.wolfram.com/LeastSquaresFitting.html
279
+ # See: https://mathworld.wolfram.com/LeastSquaresFitting.html
280
280
 
281
281
  def fit_linear xs, ys
282
282
  n = xs.size
@@ -298,7 +298,7 @@ module Minitest
298
298
  #
299
299
  # Takes x and y values and returns [a, b, r^2].
300
300
  #
301
- # See: http://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html
301
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html
302
302
 
303
303
  def fit_power xs, ys
304
304
  n = xs.size