X-Git-Url: https://git.cryptolib.org/?p=avr-crypto-lib.git;a=blobdiff_plain;f=host%2Fbigint2_test.rb;fp=host%2Fbigint2_test.rb;h=be374274e953eda14ebd264cdf21af45e87c7038;hp=df3ca3f0dff68922978afc14a51b60a3b72fc0b7;hb=226bfa4c5fa7435f253221d76506f8d977bfb91b;hpb=cda2e9d578a68a57f3bd95c3ddbc5db78c7e3b36 diff --git a/host/bigint2_test.rb b/host/bigint2_test.rb index df3ca3f..be37427 100644 --- a/host/bigint2_test.rb +++ b/host/bigint2_test.rb @@ -473,6 +473,62 @@ def reduce_test(a,b) return false end +################################################################################ +# div_test # +################################################################################ + +def div_test(a, b) + begin + line = $sp.gets() + line = "" if line==nil + puts("DBG got: "+line) if $debug + if /^Error:.*/.match(line) + puts line + return false + end + end while ! /[\s]*enter a:[\s]*/.match(line) + $sp.print(a.to_s(16) + " ") + begin + line = $sp.gets() + line = "" if line == nil + puts("DBG got: " + line) if $debug + if /^Error:.*/.match(line) + puts line + return false + end + end while ! /[\s]*enter b:[\s]*/.match(line) + $sp.print(b.to_s(16) + " ") + line = '' + begin + line_tmp = $sp.gets() + line_tmp = '' if line_tmp == nil + line += line_tmp + puts("DBG got: " + line) if $debug + if /^Error:.*/.match(line) + puts line + return false + end + end while ! m=/[\s]*([+-]?[0-9a-fA-F]*)[\s]+\/[\s]+([+-]?[0-9a-fA-F]*)[\s]*=[\s]*([+-]?[0-9a-fA-F]+);[\s]*R[\s]*=[\s]*([+-]?[0-9a-fA-F]+)/.match(line) + a_ = m[1].to_i(16) + b_ = m[2].to_i(16) + c_ = m[3].to_i(16) + d_ = m[4].to_i(16) + line.strip! + if (a_== a && b_ == b && c_ == (a / b) && d_ == (a % b)) + $logfile.printf("[pass (%d)]: %s\n", $testno, line) + return true + else + $logfile.printf("[fail (%s%s%s%s) (%d)]: %s", + (a == a_) ? "" : "a", + (b == b_) ? "" : "b", + (c_ == a / b) ? "" : "c", + (d_ == a % b) ? "" : "d", $testno, line) + $logfile.printf(" ; should %s %% %s = %s; R = %s\n", a.to_s(16), b.to_s(16), (a / b).to_s(16), (a % b).to_s(16)) + return false + end + return false +end + ################################################################################ # mulmod_test # ################################################################################ @@ -892,7 +948,34 @@ def run_test_reduce(skip=0) end length_a_B += 1 length_b_B += 1 - end while length_a_B<4096/8 + end while length_a_B < 4096 / 8 +end + +################################################################################ +# run_test_div # +################################################################################ + +def run_test_div(skip=0) + length_a_B = skip + 1 + length_b_B = skip + 1 + begin + $size = length_a_B + (0..16).each do |i| + a = rand(256 ** length_a_B) + b = rand(256 ** length_a_B) + 1 + v = div_test(a, b) + screen_progress(v) + end + (0..16).each do |i| + b_size = rand(length_b_B + 1) + a = rand(256 ** length_a_B) + b = rand(256 ** b_size) + 1 + v = div_test(a, b) + screen_progress(v) + end + length_a_B += 1 + length_b_B += 1 + end while length_a_B < 4096 / 8 end ################################################################################ @@ -1106,6 +1189,7 @@ $logfile.printf("seed = 0x%X\n", random_seed) tests = Hash.new tests['a'] = proc {|x| run_test_add(x) } tests['b'] = proc {|x| run_test_sub(x) } +tests['d'] = proc {|x| run_test_div(x) } tests['m'] = proc {|x| run_test_mul(x) } tests['M'] = proc {|x| run_test_mulmod(x) } tests['n'] = proc {|x| run_test_mul_word(x) } @@ -1118,6 +1202,7 @@ tests['g'] = proc {|x| run_test_gcdext(x) } init_str = Hash.new init_str['a'] = 'add-test' init_str['b'] = 'sub-test' +init_str['d'] = 'div-test' init_str['x'] = 'add-scale-test' init_str['m'] = 'mul-test' init_str['M'] = 'mul-mont-test' @@ -1153,4 +1238,4 @@ else end 1 -$logile.close() +$logfile.close()