Я хотел написать тест, чтобы проверить двоичные строковые представления целых чисел с различной длиной. Я не знаю, как вычислить ожидаемые значения для случайных положительных и отрицательных целых чисел, представленных в виде двоичных строк, с разными двоичными длинами (8,16,32, 64). Пока у меня есть тест, который просто распечатывает значения для проверки.Как объединить тестовые двоичные строковые представления целых чисел со знаком с разной длиной в рубине?
Ниже приведены тест (который просто выводит результат, без каких-либо утверждений) и функция:
# test
def test_binary_string_with_length
10.times do
n = -rand(128)
puts "n: #{n} -> bin8: #{binary_string_with_length(n, 8)}"
n = rand(256)
puts "n: #{n} -> bin8: #{binary_string_with_length(n, 8)}"
n = -rand(2 ** 15)
puts "n: #{n} -> bin16: #{binary_string_with_length(n, 16)}"
n = rand(2 ** 16)
puts "n: #{n} -> bin16: #{binary_string_with_length(n, 16)}"
n = -rand(2 ** 31)
puts "n: #{n} -> bin32: #{binary_string_with_length(n, 32)}"
n = rand(2 ** 32)
puts "n: #{n} -> bin32: #{binary_string_with_length(n, 32)}"
n = -rand(2 ** 63)
puts "n: #{n} -> bin64: #{binary_string_with_length(n, 64)}"
n = rand(2 ** 64)
puts "n: #{n} -> bin64: #{binary_string_with_length(n, 64)}"
end
end
# function
def binary_string_with_length(n, int_length_in_bits)
pack = 'Q' # default is 64 bit
case int_length_in_bits
when 8
pack = 'C'
when 16
pack = 'S'
when 32
pack = 'L'
when 64
pack = 'Q'
end
sprintf('%b', [n].pack(pack).unpack(pack)[0])
end
Как написать утверждения, чтобы подтвердить, что каждая строка представление является правильным?
Ну, я бы начал с изучения того, как вычислять двоичные представления положительных и отрицательных чисел. Затем выполните преобразование. И протестируйте против рубиновой логики. Просто как тот. –
@SergioTulentsev - я уточню свой вопрос - я знаю, как вычислить двоичные представления положительных и отрицательных чисел - проблема специфична для ruby, будучи динамически типизированной, что она не имеет внутреннего размера (в байтах) для целого числа , Сам размер, по-видимому, растет с целым числом (целые числа могут быть сколь угодно большими, а рубин растет, чтобы поддерживать их ограниченным только памятью). Способ вычисления двоичного представления для разных размеров ** - это то, что я делаю в вышеприведенной функции. Как я теперь * проверяю * его точность? – Anand
Поместите разъяснение в свой вопрос, вставив его там, где у вас было бы, если бы вы ввели его на начальном этапе. _Не используйте «обновленные» или «отредактированные» теги_. Мы можем сказать, что было добавлено в случае необходимости. Таким образом, каждый будет видеть информацию без необходимости читать каждый комментарий. –