summaryrefslogtreecommitdiff
path: root/spec/ruby/core/string/uminus_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/string/uminus_spec.rb')
-rw-r--r--spec/ruby/core/string/uminus_spec.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/ruby/core/string/uminus_spec.rb b/spec/ruby/core/string/uminus_spec.rb
new file mode 100644
index 0000000000..43abf71d50
--- /dev/null
+++ b/spec/ruby/core/string/uminus_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: false
+require_relative '../../spec_helper'
+
+describe 'String#-@' do
+ it 'returns self if the String is frozen' do
+ input = 'foo'.freeze
+ output = -input
+
+ output.should.equal?(input)
+ output.should.frozen?
+ end
+
+ it 'returns a frozen copy if the String is not frozen' do
+ input = 'foo'
+ output = -input
+
+ output.should.frozen?
+ output.should_not.equal?(input)
+ output.should == 'foo'
+ end
+
+ it "returns the same object for equal unfrozen strings" do
+ origin = "this is a string"
+ dynamic = %w(this is a string).join(' ')
+
+ origin.should_not.equal?(dynamic)
+ (-origin).should.equal?(-dynamic)
+ end
+
+ it "returns the same object when it's called on the same String literal" do
+ (-"unfrozen string").should.equal?(-"unfrozen string")
+ (-"unfrozen string").should_not.equal?(-"another unfrozen string")
+ end
+
+ it "deduplicates frozen strings" do
+ dynamic = %w(this string is frozen).join(' ').freeze
+
+ dynamic.should_not.equal?("this string is frozen".freeze)
+
+ (-dynamic).should.equal?("this string is frozen".freeze)
+ (-dynamic).should.equal?((-"this string is frozen").freeze)
+ end
+
+ it "does not deduplicate a frozen string when it has instance variables" do
+ dynamic = %w(this string is frozen).join(' ')
+ dynamic.instance_variable_set(:@a, 1)
+ dynamic.freeze
+
+ (-dynamic).should_not.equal?("this string is frozen".freeze)
+ (-dynamic).should_not.equal?((-"this string is frozen").freeze)
+ (-dynamic).should.equal?(-dynamic)
+ end
+end
commit/ext/socket/ancdata.c?id=2ee08591190bed1f57a43a5cdd6486e3abfa664f'>* ext/socket/init.c (struct recvfrom_arg): use structakr 2009-02-10* ext/socket/ancdata.c (anc_inspect_socket_creds): refactored to avoidakr 2009-02-10* ext/socket/option.c (inspect_local_peercred): constfied.nobu 2009-02-10rdoc update.akr 2009-02-09* ext/socket/ancdata.c (ip_cmsg_type_to_sym): renamed fromakr 2009-02-09* ext/socket/mkconstants.rb: generate intern_family_noprefix.akr 2009-02-09* ext/socket/mkconstants.rb: rename level_to_int to iplevel_to_int.akr 2009-02-09* ext/socket/rubysocket.h (level_arg): add family argument.akr 2009-02-09* ext/socket/ancdata.c (ancillary_inspect): show address family.akr 2009-02-09* ext/socket/ancdata.c (ancillary_initialize): add family argument.akr 2009-02-08* ext/socket/extconf.rb: check struct cmsgcred.akr 2009-02-08* ext/socket/extconf.rb: check struct sockcred.akr 2009-02-08* ext/socket/ancdata.c (anc_inspect_passcred_credentials): newakr 2009-02-05* ext/socket: AddrInfo is renamed to Addrinfo. [ruby-dev:37876]akr 2009-02-02* ext/socket/extconf.rb (in_pktinfo, in6_pktinfo),nobu 2009-02-02* ext/socket/ancdata.c (cmsg_type_to_sym): add #ifdef for no IPv6akr 2009-02-02* ext/socket/rubysocket.h (cmsg_type_arg): declared.akr