date-performance 0.4.6 → 0.4.7
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.
- data/Rakefile +3 -3
- data/ext/date_performance.c +39 -0
- data/lib/date/performance.rb +1 -1
- data/test/extension_test.rb +25 -0
- metadata +2 -4
- data/doc/changes.html +0 -32
- data/doc/license.html +0 -42
data/Rakefile
CHANGED
@@ -11,9 +11,9 @@ Project.new "Date::Performance" do |p|
|
|
11
11
|
p.author = 'Ryan Tomayko <r@tomayko.com>'
|
12
12
|
p.rubyforge_project = 'wink'
|
13
13
|
|
14
|
-
p.remote_dist_location = "tomayko.com:/dist/#{p.package_name}"
|
15
|
-
p.remote_branch_location = "tomayko.com:/src/#{p.package_name}.git"
|
16
|
-
p.remote_doc_location = "tomayko.com:/src/#{p.package_name}"
|
14
|
+
p.remote_dist_location = "gus@tomayko.com:/dist/#{p.package_name}"
|
15
|
+
p.remote_branch_location = "gus@tomayko.com:/src/#{p.package_name}.git"
|
16
|
+
p.remote_doc_location = "gus@tomayko.com:/src/#{p.package_name}"
|
17
17
|
end
|
18
18
|
|
19
19
|
task :default => [ :compile, :test ]
|
data/ext/date_performance.c
CHANGED
@@ -22,6 +22,7 @@ static ID id_new; /* :new */
|
|
22
22
|
static ID id_new_bang; /* :new! */
|
23
23
|
static ID id_ivar_civil; /* :@__civil__ */
|
24
24
|
static ID id_jd; /* :jd */
|
25
|
+
static ID id_ivar_ajd; /* :@ajd */
|
25
26
|
static ID id_jd_to_civil; /* :jd_to_civil */
|
26
27
|
static ID id_ivar_sg; /* :@sg */
|
27
28
|
static ID id_numerator; /* :numerator */
|
@@ -338,6 +339,42 @@ rb_date_strptime(int argc, VALUE * argv, VALUE self)
|
|
338
339
|
return rb_funcall2(self, id_strptime_without_performance, argc, argv);
|
339
340
|
}
|
340
341
|
|
342
|
+
/*
|
343
|
+
* Date::<=>(other)
|
344
|
+
*/
|
345
|
+
static VALUE
|
346
|
+
rb_date_compare(int argc, VALUE * argv, VALUE self)
|
347
|
+
{
|
348
|
+
if (NIL_P(argv[0]))
|
349
|
+
return Qnil;
|
350
|
+
long other_den = -1;
|
351
|
+
long other_num = -1;
|
352
|
+
if (FIXNUM_P(argv[0])) {
|
353
|
+
//compare with argument as with astronomical julian day number
|
354
|
+
other_den = 1;
|
355
|
+
other_num = FIX2LONG(argv[0]);
|
356
|
+
} else if (rb_obj_is_kind_of(argv[0], rb_cDate)) {
|
357
|
+
VALUE other_date = argv[0];
|
358
|
+
VALUE other_ajd = rb_ivar_get(other_date, id_ivar_ajd);
|
359
|
+
other_den = FIX2LONG(rb_funcall(other_ajd, id_denominator, 0));
|
360
|
+
other_num = FIX2LONG(rb_funcall(other_ajd, id_numerator, 0));
|
361
|
+
} else {
|
362
|
+
return Qnil;
|
363
|
+
}
|
364
|
+
|
365
|
+
VALUE ajd = rb_ivar_get(self, id_ivar_ajd);
|
366
|
+
long den = FIX2LONG(rb_funcall(ajd, id_denominator, 0));
|
367
|
+
long num = FIX2LONG(rb_funcall(ajd, id_numerator, 0));
|
368
|
+
|
369
|
+
long v = (num * other_den) - (other_num * den);
|
370
|
+
if (v > 0)
|
371
|
+
return INT2FIX(1);
|
372
|
+
else if (v < 0)
|
373
|
+
return INT2FIX(-1);
|
374
|
+
else
|
375
|
+
return INT2FIX(0);
|
376
|
+
}
|
377
|
+
|
341
378
|
|
342
379
|
VALUE
|
343
380
|
Init_date_performance() {
|
@@ -358,6 +395,7 @@ Init_date_performance() {
|
|
358
395
|
rb_define_method(rb_cDate, "civil", rb_date_civil, 0);
|
359
396
|
rb_define_method(rb_cDate, "sys_strftime", rb_date_strftime, -1);
|
360
397
|
rb_define_method(rb_cDate, "strftime", rb_date_strftime, -1);
|
398
|
+
rb_define_method(rb_cDate, "<=>", rb_date_compare, -1);
|
361
399
|
|
362
400
|
/* Date Singleton Methods */
|
363
401
|
rb_define_singleton_method(rb_cDate, "civil_to_jd", rb_date_civil_to_jd, -1);
|
@@ -383,6 +421,7 @@ Init_date_performance() {
|
|
383
421
|
id_divmod = rb_intern("divmod");
|
384
422
|
id_new = rb_intern("new");
|
385
423
|
id_jd = rb_intern("jd");
|
424
|
+
id_ivar_ajd = rb_intern("@ajd");
|
386
425
|
id_jd_to_civil = rb_intern("jd_to_civil");
|
387
426
|
id_ivar_civil = rb_intern("@__civil__");
|
388
427
|
id_ivar_sg = rb_intern("@sg");
|
data/lib/date/performance.rb
CHANGED
@@ -9,7 +9,7 @@ class Date
|
|
9
9
|
# The Date::Performance module is present when the performance enhacing extension
|
10
10
|
# has been loaded. It serves no other purpose.
|
11
11
|
module Performance
|
12
|
-
VERSION = "0.4.
|
12
|
+
VERSION = "0.4.7"
|
13
13
|
end
|
14
14
|
|
15
15
|
# The extension replaces Date#strftime but falls back on the stock version when
|
data/test/extension_test.rb
CHANGED
@@ -117,4 +117,29 @@ class ExtensionTest < Test::Unit::TestCase
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
+
def test_date_comparisons
|
121
|
+
#regular Date class comparison
|
122
|
+
d = Date.new(2008, 1, 1)
|
123
|
+
366.times do |i|
|
124
|
+
assert_equal( 0, d+i <=> d+i )
|
125
|
+
assert_equal(-1, d+i <=> d+i+1 )
|
126
|
+
assert_equal( 1, d+i+1 <=> d+i )
|
127
|
+
end
|
128
|
+
|
129
|
+
#DateTime comparison
|
130
|
+
dt1 = DateTime.new(2006,1,1,12,15,30)
|
131
|
+
dt2 = DateTime.new(2006,1,1,12,15,31)
|
132
|
+
dt3 = DateTime.new(2006,1,1,12,15,29)
|
133
|
+
|
134
|
+
assert_equal( 0, DateTime.new(2006,1,1,12,15,30) <=> dt1 )
|
135
|
+
assert_equal( 1, dt1 <=> dt3 )
|
136
|
+
assert_equal( -1, dt1 <=> dt2 )
|
137
|
+
|
138
|
+
#comparison with some random type
|
139
|
+
assert_equal nil, dt1 <=> "foo"
|
140
|
+
|
141
|
+
#comparison with Fixnum that represents ajd
|
142
|
+
assert_equal(-1, d <=> d.ajd.numerator )
|
143
|
+
end
|
144
|
+
|
120
145
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: date-performance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Tomayko
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir:
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-07-
|
12
|
+
date: 2008-07-17 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,7 +30,6 @@ files:
|
|
30
30
|
- test/date_memoize_test.rb
|
31
31
|
- test/extension_test.rb
|
32
32
|
- doc/asciidoc.conf
|
33
|
-
- doc/changes.html
|
34
33
|
- doc/changes.txt
|
35
34
|
- doc/images
|
36
35
|
- doc/images/icons
|
@@ -60,7 +59,6 @@ files:
|
|
60
59
|
- doc/images/icons/tip.png
|
61
60
|
- doc/images/icons/up.png
|
62
61
|
- doc/images/icons/warning.png
|
63
|
-
- doc/license.html
|
64
62
|
- doc/license.txt
|
65
63
|
- doc/stylesheets
|
66
64
|
- doc/stylesheets/handbookish-manpage.css
|
data/doc/changes.html
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4
|
-
<head>
|
5
|
-
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
6
|
-
<meta name="generator" content="AsciiDoc 8.2.5" />
|
7
|
-
<link rel="stylesheet" href="stylesheets/handbookish.css" type="text/css" />
|
8
|
-
<title>Date::Performance ChangeLog</title>
|
9
|
-
</head>
|
10
|
-
<body>
|
11
|
-
<div id="header">
|
12
|
-
<h1>Date::Performance ChangeLog</h1>
|
13
|
-
<span id="author">Ryan Tomayko</span><br />
|
14
|
-
<span id="email"><tt><<a href="mailto:r@tomayko.com">r@tomayko.com</a>></tt></span><br />
|
15
|
-
</div>
|
16
|
-
<div id="preamble">
|
17
|
-
<div class="sectionbody">
|
18
|
-
<div class="listingblock">
|
19
|
-
<div class="content"><!-- Generator: GNU source-highlight 2.9
|
20
|
-
by Lorenzo Bettini
|
21
|
-
http://www.lorenzobettini.it
|
22
|
-
http://www.gnu.org/software/src-highlite -->
|
23
|
-
<pre><tt></tt></pre></div></div>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
<div id="footer">
|
27
|
-
<div id="footer-text">
|
28
|
-
Last updated 2008-07-12 08:15:20 PDT
|
29
|
-
</div>
|
30
|
-
</div>
|
31
|
-
</body>
|
32
|
-
</html>
|
data/doc/license.html
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4
|
-
<head>
|
5
|
-
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
6
|
-
<meta name="generator" content="AsciiDoc 8.2.5" />
|
7
|
-
<link rel="stylesheet" href="stylesheets/handbookish.css" type="text/css" />
|
8
|
-
<title>The MIT License</title>
|
9
|
-
</head>
|
10
|
-
<body>
|
11
|
-
<div id="header">
|
12
|
-
<h1>The MIT License</h1>
|
13
|
-
<span id="author">Ryan Tomayko</span><br />
|
14
|
-
<span id="email"><tt><<a href="mailto:r@tomayko.com">r@tomayko.com</a>></tt></span><br />
|
15
|
-
</div>
|
16
|
-
<div id="preamble">
|
17
|
-
<div class="sectionbody">
|
18
|
-
<div class="para"><p>Date::Performance is Copyright (c) 2007-08, Ryan Tomayko</p></div>
|
19
|
-
<div class="para"><p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
20
|
-
of this software and associated documentation files (the "Software"), to deal
|
21
|
-
in the Software without restriction, including without limitation the rights
|
22
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
23
|
-
copies of the Software, and to permit persons to whom the Software is
|
24
|
-
furnished to do so, subject to the following conditions:</p></div>
|
25
|
-
<div class="para"><p>The above copyright notice and this permission notice shall be included in all
|
26
|
-
copies or substantial portions of the Software.</p></div>
|
27
|
-
<div class="para"><p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
28
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
29
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
30
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
31
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
32
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
33
|
-
SOFTWARE.</p></div>
|
34
|
-
</div>
|
35
|
-
</div>
|
36
|
-
<div id="footer">
|
37
|
-
<div id="footer-text">
|
38
|
-
Last updated 2008-07-12 08:15:21 PDT
|
39
|
-
</div>
|
40
|
-
</div>
|
41
|
-
</body>
|
42
|
-
</html>
|