stdlib/marshal_round_trip_parens.rb

tests/_examples/stdlib/marshal_round_trip_parens.rb in the metorex repository.

# `Marshal.dump` writes an object as the bytes Ruby's marshal format spells
# it in, and `Marshal.load` puts it back together.
p(Marshal.dump(0.5).bytes)
p(Marshal.dump(42).bytes)
p(Marshal.load(Marshal.dump([1, "two", :three, { four: 4 }])))
p(Marshal.load(Marshal.dump(nil)))
p(Marshal.load(Marshal.dump(2**70)) == 2**70)

class Waypoint
  attr_reader :name, :miles

  def initialize(name, miles)
    @name = name
    @miles = miles
  end
end

back = Marshal.load(Marshal.dump(Waypoint.new("summit", 12)))
p(back.class)
p(back.name)
p(back.miles)

held = Marshal.load(Marshal.dump("keeps its encoding"))
p(held.encoding)

Output:

[4, 8, 102, 8, 48, 46, 53]
[4, 8, 105, 47]
[1, "two", :three, {four: 4}]
nil
true
Waypoint
"summit"
12
#<Encoding:UTF-8>