Re: Fuzzy Time (#99) - Results

From: Gavin K.

Following are the results I obtained from running my test
script against everyone’s submissions.

Oops. I found a small bug in my test script’s counting of offsets.
(Large update intervals would cause it to think that the class was
transitioning outside of a +/- 5 minute range.)

Here are updated results and test script. Sorry for the bandwidth. :slight_smile:

C:\Ruby\Quiz\FuzzyTime>testall.bat

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb BenGiddings_1.rb
Loaded suite BenGiddings_1
Started
F
Finished in 0.016 seconds.

  1. Failure:
    test_running(FuzzyTimeTester)
    [./test_fuzzytime.rb:33:in test_running' ./test_fuzzytime.rb:27:intimes’
    ./test_fuzzytime.rb:27:in test_running' ./test_fuzzytime.rb:23:ineach’
    ./test_fuzzytime.rb:23:in `test_running’]:
    <Mon Nov 06 23:04:15 -0700 2006> expected but was
    <Mon Nov 06 23:04:13 -0700 2006>.

1 tests, 3 assertions, 1 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb CameronPope_1.rb
Loaded suite CameronPope_1
Started
2 second advance: 0.0% behind, 38.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 0% 0% 0.7% 0% 12% 41% 46%

6 second advance: 0.0% behind, 31.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 0% 0.7% 4.8% 9.6% 25% 38% 22%

17 second advance: 1.8% behind, 19.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0.7% 0.7% 2.7% 6.2% 11% 14% 19% 21% 18% 6.2%

30 second advance: 3.2% behind, 16.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
1.4% 2.1% 1.4% 3.4% 6.2% 19% 14% 18% 23% 9.0% 3.4%

47 second advance: 6.8% behind, 14.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
5.6% 3.5% 5.6% 5.6% 11% 13% 16% 15% 16% 5.6% 3.5%

60 second advance: 11.5% behind, 9.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
10% 7.6% 6.3% 11% 13% 15% 15% 12% 6.3% 4.2% 0.7%

65 second advance: 9.8% behind, 10.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
11% 4.8% 8.3% 10% 9.0% 18% 14% 14% 6.2% 3.4% 0%

120 second advance: 22.5% behind, 9.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
26% 20% 0% 17% 0% 17% 0% 15% 0% 4.9% 0%

290 second advance: 27.2% behind, 9.4% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
64% 10% 2.9% 5.0% 2.9% 6.5% 3.6% 2.2% 1.4% 1.4% 0%

.
Finished in 16.937 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb DamienPetrelli_1.rb
Loaded suite DamienPetrelli_1
Started
F
Finished in 0.016 seconds.

  1. Failure:
    test_running(FuzzyTimeTester)
    [./test_fuzzytime.rb:33:in test_running' ./test_fuzzytime.rb:27:intimes’
    ./test_fuzzytime.rb:27:in test_running' ./test_fuzzytime.rb:23:ineach’
    ./test_fuzzytime.rb:23:in `test_running’]:
    <Mon Nov 13 12:19:40 -0700 2006> expected but was
    <Sun Oct 22 09:22:42 -0600 2006>.

1 tests, 1 assertions, 1 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb DanielLucraft_1.rb
Loaded suite DanielLucraft_1
Started
2 second advance: 7.8% behind, 17.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 9.0% 7.6% 10% 11% 10% 12% 7.6% 4.2% 16% 12%

6 second advance: 7.3% behind, 16.0% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 11% 5.5% 15% 9.0% 12% 12% 9.7% 5.5% 13% 6.2%

17 second advance: 9.9% behind, 17.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 13% 16% 6.9% 7.6% 8.3% 6.2% 9.0% 14% 9.0% 9.7%

30 second advance: 9.9% behind, 15.0% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 12% 6.9% 15% 13% 8.3% 7.6% 10% 7.6% 10% 9.0%

47 second advance: 10.3% behind, 13.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 11% 14% 10% 12% 12% 10% 10% 5.5% 5.5% 8.3%

60 second advance: 8.1% behind, 15.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 12% 9.0% 10% 13% 12% 11% 8.3% 9.7% 6.2% 8.3%

65 second advance: 8.8% behind, 16.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 10% 14% 9.0% 10% 9.0% 10% 9.0% 9.0% 8.3% 10%

120 second advance: 6.1% behind, 20.4% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
8.4% 0% 17% 0% 22% 0% 19% 0% 20% 0% 13%

290 second advance: 7.4% behind, 18.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
14% 12% 6.5% 12% 11% 11% 7.9% 12% 6.5% 3.6% 4.3%

.
Finished in 28.344 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb GavinKistner_1.rb
Loaded suite GavinKistner_1
Started
2 second advance: 0.3% behind, 20.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0% 10% 20% 27% 19% 8.3% 15%

6 second advance: 0.9% behind, 24.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 5.5% 6.8% 11% 25% 18% 12% 21%

17 second advance: 13.1% behind, 12.0% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
3.4% 12% 14% 7.6% 12% 12% 9.0% 9.0% 5.5% 9.0% 6.2%

30 second advance: 9.2% behind, 14.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
2.8% 6.3% 7.6% 15% 6.3% 9.0% 12% 15% 11% 8.3% 6.3%

47 second advance: 6.1% behind, 22.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
4.1% 6.9% 2.8% 5.5% 5.5% 9.0% 6.9% 9.7% 18% 19% 12%

60 second advance: 7.0% behind, 18.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
3.4% 9.0% 6.2% 4.8% 12% 9.7% 14% 9.7% 8.3% 12% 12%

65 second advance: 12.2% behind, 15.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
7.6% 11% 13% 6.9% 9.0% 8.3% 5.5% 12% 9.0% 11% 6.2%

120 second advance: 6.8% behind, 23.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
12% 0% 17% 0% 19% 0% 12% 0% 21% 0% 19%

290 second advance: 14.1% behind, 18.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
34% 5.5% 8.3% 5.5% 5.5% 9.0% 8.3% 6.2% 6.2% 4.8% 6.2%

.
Finished in 17.828 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb JeremyHinegardner_1.rb
Loaded suite JeremyHinegardner_1
Started
2 second advance: 0.0% behind, 43.0% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0.7% 0% 0% 0% 0% 0% 1.4% 22% 76%

6 second advance: 0.0% behind, 38.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0.7% 0% 0% 0% 0% 9.6% 46% 43%

17 second advance: 0.0% behind, 31.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0.7% 0% 0% 0% 0.7% 2.1% 12% 36% 34% 15%

30 second advance: 0.4% behind, 25.0% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 2.1% 6.2% 9.7% 22% 29% 23% 7.6%

47 second advance: 0.8% behind, 23.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 2.1% 4.1% 8.2% 15% 21% 21% 18% 8.9%

60 second advance: 0.5% behind, 21.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 1.4% 2.8% 17% 18% 15% 20% 19% 6.9%

65 second advance: 1.2% behind, 18.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0.7% 4.1% 8.3% 15% 18% 21% 19% 12% 2.1%

120 second advance: 6.1% behind, 11.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 5.6% 0% 20% 0% 30% 0% 33% 0% 11% 0%

290 second advance: 11.1% behind, 14.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
23% 11% 12% 11% 11% 5.0% 9.9% 7.1% 4.3% 3.5% 1.4%

.
Finished in 19.016 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb MarcelWard_1.rb
Loaded suite MarcelWard_1
Started
2 second advance: 5.9% behind, 15.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 2.8% 4.1% 9.7% 11% 12% 15% 12% 11% 10% 10%

6 second advance: 6.7% behind, 15.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 3.4% 4.1% 10% 12% 8.2% 13% 17% 12% 10% 8.9%

17 second advance: 7.1% behind, 15.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 2.8% 6.9% 13% 13% 12% 7.6% 11% 13% 13% 7.6%

30 second advance: 8.1% behind, 15.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 7.6% 6.2% 13% 4.1% 14% 10% 12% 12% 9.0% 11%

47 second advance: 6.8% behind, 17.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
2.7% 4.1% 4.8% 12% 12% 11% 6.2% 14% 10% 14% 8.9%

60 second advance: 9.7% behind, 13.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
3.4% 9.7% 9.7% 9.7% 6.9% 12% 13% 12% 12% 7.6% 2.8%

65 second advance: 6.4% behind, 16.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
1.4% 5.5% 6.9% 9.7% 8.3% 15% 12% 10% 12% 12% 6.9%

120 second advance: 6.0% behind, 17.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
9.0% 0% 17% 0% 24% 0% 22% 0% 24% 0% 4.2%

290 second advance: 8.4% behind, 14.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
19% 12% 9.3% 14% 10% 11% 9.3% 7.1% 4.3% 3.6% 1.4%

.
Finished in 22.282 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb PaoloNegri_1.rb
Loaded suite PaoloNegri_1
Started
2 second advance: 8.3% behind, 10.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 2.7% 9.6% 14% 10% 14% 16% 14% 12% 4.8% 2.1%

6 second advance: 8.0% behind, 11.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 2.1% 8.3% 9.0% 16% 16% 12% 12% 12% 8.3% 4.9%

17 second advance: 7.4% behind, 11.4% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 5.5% 4.8% 9.0% 17% 10% 21% 9.0% 12% 9.7% 1.4%

30 second advance: 7.5% behind, 11.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 4.8% 8.3% 9.0% 19% 16% 14% 9.0% 5.5% 11% 2.1%

47 second advance: 8.3% behind, 10.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 6.9% 8.3% 12% 18% 11% 15% 12% 9.0% 4.1% 2.1%

60 second advance: 7.2% behind, 11.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 3.4% 12% 9.7% 17% 14% 14% 13% 10% 4.8% 1.4%

65 second advance: 6.8% behind, 13.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
2.1% 5.6% 7.6% 12% 15% 12% 16% 13% 10% 5.6% 2.1%

120 second advance: 9.4% behind, 11.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
13% 0% 28% 0% 22% 0% 25% 0% 12% 0% 0%

290 second advance: 9.1% behind, 12.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
22% 12% 11% 12% 9.7% 12% 7.6% 6.2% 2.8% 3.4% 1.4%

.
Finished in 18.89 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb RobertConn_1.rb
Loaded suite RobertConn_1
Started
2 second advance: 0.0% behind, 49.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 0% 0% 0% 0% 0% 0% 0% 0% 99%

6 second advance: 0.0% behind, 48.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0.7% 0% 0% 0% 0% 0% 0% 0% 99%

17 second advance: 0.0% behind, 46.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0% 0% 0.7% 0% 1.4% 9.0% 89%

30 second advance: 0.0% behind, 44.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0% 0% 0.7% 0% 5.6% 19% 74%

47 second advance: 0.0% behind, 41.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 0% 0.7% 2.1% 2.1% 13% 31% 50%

60 second advance: 0.2% behind, 38.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0.7% 0.7% 4.1% 2.8% 10% 13% 20% 48%

65 second advance: 0.3% behind, 40.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 1.4% 1.4% 1.4% 2.1% 5.6% 14% 28% 47%

120 second advance: 1.9% behind, 25.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
2.1% 2.8% 0% 2.8% 0% 16% 0% 30% 0% 46% 0%

290 second advance: 10.1% behind, 27.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
13% 5.5% 2.4% 3.1% 8.7% 7.9% 13% 15% 10% 11% 10%

.
Finished in 17.453 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb ThomasMueller_1.rb
Loaded suite ThomasMueller_1
Started
2 second advance: 0.0% behind, 43.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0% 0% 0% 0% 0% 15% 85%

6 second advance: 0.0% behind, 37.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 0% 0% 0% 0% 0% 0.7% 14% 48% 36%

17 second advance: 0.0% behind, 32.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0% 0.7% 2.1% 14% 26% 41% 17%

30 second advance: 0.4% behind, 26.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 1.4% 2.1% 2.8% 12% 18% 28% 22% 13%

47 second advance: 0.8% behind, 23.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0.7% 1.4% 3.5% 9.0% 17% 21% 17% 21% 9.7%

60 second advance: 2.1% behind, 17.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 1.4% 4.8% 10% 15% 16% 13% 27% 9.0% 2.8%

65 second advance: 1.2% behind, 19.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 0% 2.1% 11% 12% 21% 17% 19% 16% 2.1%

120 second advance: 3.9% behind, 14.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 3.4% 0% 16% 0% 30% 0% 34% 0% 17% 0%

290 second advance: 5.7% behind, 14.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
11% 11% 11% 14% 13% 12% 9.2% 8.5% 3.5% 2.1% 3.5%

.
Finished in 17.234 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb TomPollard_1.rb
Loaded suite TomPollard_1
Started
2 second advance: 0.0% behind, 46.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 0% 0% 0% 0% 0.7% 4.8% 94%

6 second advance: 0.0% behind, 42.8% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 0% 0% 0% 0% 0% 0% 5.5% 32% 62%

17 second advance: 0.0% behind, 33.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0.7% 0.7% 3.4% 8.3% 26% 33% 28%

30 second advance: 0.1% behind, 31.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0% 0% 0% 0.7% 0% 5.5% 16% 29% 28% 21%

47 second advance: 0.8% behind, 23.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 2.1% 2.1% 9.7% 14% 21% 25% 14% 12%

60 second advance: 1.3% behind, 23.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0.7% 0.7% 3.4% 4.8% 7.6% 19% 17% 14% 23% 8.3%

65 second advance: 1.1% behind, 22.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0.7% 2.1% 9.0% 9.0% 17% 20% 17% 18% 7.6%

120 second advance: 5.7% behind, 13.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 8.3% 0% 18% 0% 28% 0% 30% 0% 15% 0%

290 second advance: 8.7% behind, 15.1% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
17% 12% 13% 9.5% 10% 9.5% 8.0% 8.0% 6.6% 5.8% 0.7%

.
Finished in 17.859 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

C:\Ruby\Quiz\FuzzyTime>ruby -rtest_fuzzytime.rb TomPollard_2.rb
Loaded suite TomPollard_2
Started
2 second advance: 0.0% behind, 49.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0.7% 0% 0% 0% 0% 0% 0% 99%

6 second advance: 0.0% behind, 48.9% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0% 0% 0% 0.7% 0% 0% 0% 0% 2.1% 97%

17 second advance: 0.0% behind, 45.5% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0% 0.7% 0% 0% 0% 0% 0% 0.7% 5.5% 17% 77%

30 second advance: 0.8% behind, 38.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
0.7% 0.7% 2.1% 0% 0.7% 1.4% 3.4% 3.4% 16% 26% 46%

47 second advance: 5.9% behind, 23.2% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
2.8% 3.4% 6.9% 4.8% 9.7% 12% 5.5% 7.6% 12% 15% 21%

60 second advance: 12.9% behind, 13.3% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
10% 11% 11% 9.0% 9.0% 9.0% 10% 9.0% 9.7% 7.6% 4.1%

65 second advance: 16.8% behind, 14.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
23% 10% 7.5% 9.6% 9.6% 4.8% 4.8% 8.2% 7.5% 8.2% 6.8%

120 second advance: 9.2% behind, 18.6% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
4.9% 13% 0% 13% 0% 10% 0% 32% 0% 27% 0%

290 second advance: 29.9% behind, 8.7% ahead
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
72% 9.0% 3.5% 4.9% 3.5% 2.1% 4.2% 1.4% 0% 0% 0%

.
Finished in 19.25 seconds.

1 tests, 142380 assertions, 0 failures, 0 errors

====
Updated test script

require ‘test/unit’

$DEBUG = false

class Time
def to_fuzzy
s = strftime("%H:%M")
s[4] = “~”
s
end
def short
strftime("%H:%M")
end
def round_to( seconds )
seconds = seconds.round
Time.at( self.to_i / seconds * seconds )
end
end

RUNS_PER_SET = 1
class FuzzyTimeTester < Test::Unit::TestCase
def test_running
[ 2, 6, 17, 30, 47, 60, 65, 120, 290 ].each{ |advance_seconds|
runs, num_ahead, num_behind = 0, 0, 0
offsets = Hash.new(0)

  RUNS_PER_SET.times{
    t = Time.at( Time.new + rand( 3600 * 300 ) )
    end_time = t + 60 * 60 * 24 # Run for 24 hours
    ft = FuzzyTime.new( t )
    last_value = nil
    while( t < end_time )
      assert_equal t, ft.actual
      t0 = Time.at( t - 60 * 5 )
      t2 = Time.at( t + 60 * 5 )
      legal_values = [ t0, t, t2 ].map{ |x| x.to_fuzzy }.uniq

      fuzzy_fuzz = ft.to_s

      if last_value
        y,mon,day = t.year, t.mon, t.day
        h,m = last_value.scan(/\d+/).map{ |s| s.to_i }
        m *= 10
        if (m -= 10) < 0
          m %= 60
          if (h -= 1) < 0
            h %= 24
          end
        end
        illegal_old_value = Time.local( y,mon,day,h,m ).to_fuzzy
        legal_values -= [ illegal_old_value ]
        if $DEBUG
          puts "Now: %s=>%s; legal: %s (was %s, can't be %s)" % [
            t.short, fuzzy_fuzz,
            legal_values.inspect, last_value,
            illegal_old_value
          ]
        end
      end

      assert_block( ( "It is %s, the clock displayed %s,\n" +
                    "but it should only display one of %s.\n" +
                    "(Last time I asked, it said it was %s.)" ) % [
        t.short, fuzzy_fuzz.inspect,
        legal_values.inspect,
        last_value
      ] ){
        legal_values.include?( fuzzy_fuzz )
      }

      actual_fuzz = t.to_fuzzy
      ahour, amin = actual_fuzz.scan( /\d+/ ).map{ |x| x.to_i }
      fhour, fmin = fuzzy_fuzz.scan( /\d+/ ).map{ |x| x.to_i }
      if fuzzy_fuzz != actual_fuzz
        if fmin>amin || fhour>ahour || ( fhour==0 && ahour==23 )
          num_ahead += 1
        else
          num_behind +=1
        end
      end

      if fuzzy_fuzz != last_value
        ahour2, amin2 = t.short.scan( /\d+/ ).map{ |x| x.to_i }
        if fmin>amin || fhour>ahour || ( fhour==0 && ahour==23 )
          offset = ( fmin*10 - amin2 ) % 60
        else
          offset = ( fmin*10 - amin2 )
        end
        offset = [-5, [ 5, offset ].min ].max
        offsets[ offset ] += 1
        if $DEBUG
          puts ( "It is %s, I just switched from %s to %s, " +
                 "and I think that's an offset of %+d" ) % [
            t.short, last_value, fuzzy_fuzz, offset
          ]
        end
      end
      runs += 1
      last_value = fuzzy_fuzz
      ft.advance( advance_seconds )
      t += advance_seconds
    end
  }

  puts "%d second advance: %.1f%% behind, %.1f%% ahead" % [
    advance_seconds,
    100.0 * num_behind / runs,
    100.0 * num_ahead / runs
  ]
  total_offsets = offsets.inject(0){ |sum,kv| sum+kv[1] }
  -5.upto(5){ |o|
    print "#{o>0?'+':''}#{o}".center( 5 )
  }; print "\n"
  -5.upto(5){ |o|
    pct = 100.0 * offsets[o] / total_offsets
    print( ( "%.#{(pct<10&&pct>0)?1:0}f%" % pct ).center( 5 ) )
  }; puts "\n "
}

end
end