#!perl use strict; use warnings FATAL => 'all'; use Test::More tests => 69; BEGIN{ use_ok('Ruby') } ok !ref(0), "befor use Ruby -literal"; ok !ref(1); ok !ref(0x0f); ok !ref(0.1); ok !ref(""); use Ruby -all; isa_ok(0, 'Ruby::Object', 'constant overload: zero'); isa_ok(1, 'Ruby::Object', 'int'); isa_ok(01, 'Ruby::Object', 'oct'); isa_ok(0x1, 'Ruby::Object', 'hex'); isa_ok(0b1, 'Ruby::Object', 'bin'); isa_ok(0.1, 'Ruby::Object', 'float'); isa_ok("1", 'Ruby::Object', 'str'); ok(0->kind_of('Integer'), 'Integer'); ok(1->kind_of('Integer')); ok(0xff->kind_of('Integer'), 'Binary'); ok(0xFF->kind_of('Integer')); is(0xff, 0xFF, 'compare integers'); is(0xfe, 0xff - 1); ok(01->kind_of('Integer')); ok(0b1->kind_of('Integer')); is(3, 0x3); is(3, 003); is(3, 0b11); ok(0.0->kind_of('Float'), 'Float'); ok(0.1->kind_of('Float')); ok(1.0->kind_of('Float')); ok("foo"->kind_of('String'), 'String'); ok('foo'->kind_of('String'), 'String'); ok(1000_000_000_000_000_000_000_000_000_000_000->kind_of('Integer')); ok(1000.0->kind_of('Float')); #ok(0xFFFFFFFFFFFFFFFFFFFFFF->kind_of('Integer')); #ok(0xFFFFFFFFFFFFFFFFFFFFFF->to_s(16), '0xFFFFFFFFFFFFFFFFFFFFFF'); rb_eval<<'EOS', __PACKAGE__; def add(x,y) x+y; end EOS is(add(4, 3), 7); 2->times(sub{ pass "in block" }); is("foo"->upcase, "FOO"); my $foo = "foo"; is($foo + "bar", "foobar"); is($foo, "foo"); ok($foo == "foo"); is($foo <=> "foo", 0); ok(!("1" == 1), 'R::S("1") == R::I(1)'); ok( "1" != 1, 'R::S("1") != R::I(1)'); ok("1" eq 1, 'R::S("1") eq R::I(1) (compare by string)'); cmp_ok(3/2, "eq", 1, "R::I / R::I"); cmp_ok(3.0/2.0, "eq", 1.5, "R::F / R::F"); use Ruby -no_literal; ok !ref(""), "after no ruby"; ok !ref(1); ok !ref(01); ok !ref(0.1); { use Ruby -literal => 'string'; ok ref(''), "overload string only"; ok !ref(01); ok !ref(1); ok !ref(0.1); } { use Ruby -literal => 'integer'; ok !ref(''), "overload integer only"; ok ref(01); ok ref(1); ok !ref(0.1); } { use Ruby -literal => 'float'; ok !ref(''), "overload float only"; ok !ref(01); ok !ref(1); ok ref(0.1); } { use Ruby -literal => 'numeric'; ok !ref(''), "overload all numerics"; ok ref(01); ok ref(1); ok ref(0.1); } ok !eval "use Ruby -literal => 'foo'; 1", "unexpected literal type"; sub foo{ use Ruby -literal; "foo"; } is foo(), "foo"; my $s = foo(); $s += "bar"; is $s, "foobar"; is foo(), "foo"; END{ pass "test end"; }