10進数を2進数と16進数に自分で変換する

10進数を16進数にするコードだけ作っていたつもりだったんだけど、
テストコードを走らせたら、2進数の変換もそのまま行けたので追記。

コード

class Radix

def conv(num,radix)
	res = []
	overmeasure = nil #剰余
	count = 1
	aliquot = nil #約数
	numbers = {10 => "A", 11=>"B", 12=>"C",13=>"D",14=>"E",15=>"F"}
	until aliquot == 0
		count.times do |i|
			if i == 0
				aliquot = num / radix
				overmeasure = num % radix
			else
				overmeasure = aliquot % radix
				aliquot = aliquot / radix
			end
		end
		if numbers.has_key?(overmeasure)
			res << numbers[overmeasure]
		else
			res << overmeasure
		end
		count += 1
	end
	res.reverse.join
end

end

require "test/unit"
require_relative "radix"

class TestRadix < Test::Unit::TestCase
  def setup
    @radix = Radix.new
  end
  def test_conv
    assert_equal("1", @radix.conv(1,16))
    assert_equal("A", @radix.conv(10,16))
    assert_equal("64", @radix.conv(100,16))
    assert_equal("3E8", @radix.conv(1000,16))
    assert_equal("2710", @radix.conv(10000,16))
    assert_equal("186A0", @radix.conv(100000,16))
    assert_equal("10", @radix.conv(2,2))
    assert_equal("1010", @radix.conv(10,2))
    assert_equal("1111101000", @radix.conv(1000,2))
  end
end

Started
.
Finished in 0.000909 seconds.
-------------------------------------------------------------------------------
1 tests, 9 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------
1100.11 tests/s, 9900.99 assertions/s

3時間ぐらいかかった。デバッグしまっくてたせいで、動くけど、理解できてる感覚があまりない。プログラミングあるある。