Single byte negative int unpacks wrong
This commit is contained in:
parent
0479e7f07e
commit
01d8f8d8e6
|
@ -130,3 +130,7 @@ class Unpacker
|
||||||
bits.join.to_i(2) * sign
|
bits.join.to_i(2) * sign
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
u = Unpacker.new(['01000000'.to_i(2)])
|
||||||
|
# expect -1
|
||||||
|
p u.get_int
|
||||||
|
|
|
@ -28,6 +28,17 @@ describe 'Packer', :packer do
|
||||||
expect(Packer.pack_int(-3).first.to_s(2)).to eq('1000010')
|
expect(Packer.pack_int(-3).first.to_s(2)).to eq('1000010')
|
||||||
expect(Packer.pack_int(-4).first.to_s(2)).to eq('1000011')
|
expect(Packer.pack_int(-4).first.to_s(2)).to eq('1000011')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# https://github.com/ddnet/ddnet/pull/6015
|
||||||
|
it 'Should pack the same as ddnet C++ tests -3..3' do
|
||||||
|
expect(Packer.pack_int(1).first.to_s(2).rjust(8, '0')).to eq('00000001')
|
||||||
|
expect(Packer.pack_int(2).first.to_s(2).rjust(8, '0')).to eq('00000010')
|
||||||
|
expect(Packer.pack_int(3).first.to_s(2).rjust(8, '0')).to eq('00000011')
|
||||||
|
|
||||||
|
expect(Packer.pack_int(-1).first.to_s(2).rjust(8, '0')).to eq('01000000')
|
||||||
|
expect(Packer.pack_int(-2).first.to_s(2).rjust(8, '0')).to eq('01000001')
|
||||||
|
expect(Packer.pack_int(-3).first.to_s(2).rjust(8, '0')).to eq('01000010')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Pack multi byte integers' do
|
context 'Pack multi byte integers' do
|
||||||
|
|
|
@ -40,6 +40,27 @@ describe 'Unpacker', :unpacker do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# https://github.com/ddnet/ddnet/pull/6015
|
||||||
|
it 'Should unpack the same as ddnet C++ tests -3..3' do
|
||||||
|
expect(Packer.pack_int(1).first.to_s(2).rjust(8, '0')).to eq('00000001')
|
||||||
|
expect(Packer.pack_int(2).first.to_s(2).rjust(8, '0')).to eq('00000010')
|
||||||
|
expect(Packer.pack_int(3).first.to_s(2).rjust(8, '0')).to eq('00000011')
|
||||||
|
|
||||||
|
expect(Packer.pack_int(-1).first.to_s(2).rjust(8, '0')).to eq('01000000')
|
||||||
|
expect(Packer.pack_int(-2).first.to_s(2).rjust(8, '0')).to eq('01000001')
|
||||||
|
expect(Packer.pack_int(-3).first.to_s(2).rjust(8, '0')).to eq('01000010')
|
||||||
|
|
||||||
|
u = Unpacker.new(['00000001'.to_i(2)])
|
||||||
|
expect(u.get_int).to eq(1)
|
||||||
|
u = Unpacker.new(['00000010'.to_i(2)])
|
||||||
|
expect(u.get_int).to eq(2)
|
||||||
|
u = Unpacker.new(['00000011'.to_i(2)])
|
||||||
|
expect(u.get_int).to eq(3)
|
||||||
|
|
||||||
|
# u = Unpacker.new(['01000000'.to_i(2)])
|
||||||
|
# expect(u.get_int).to eq(-1)
|
||||||
|
end
|
||||||
|
|
||||||
# it 'Should pack and unpack and match from -3 to 3' do
|
# it 'Should pack and unpack and match from -3 to 3' do
|
||||||
# (-3..3).each do |i|
|
# (-3..3).each do |i|
|
||||||
# u = Unpacker.new(Packer.pack_int(i))
|
# u = Unpacker.new(Packer.pack_int(i))
|
||||||
|
|
Loading…
Reference in a new issue