equihash: Test vectors for expand_array and indices_from_minimal
Migrated from src/gtest/test_equihash.cpp
This commit is contained in:
parent
c89d1c8470
commit
20bb9a6c0f
|
@ -354,9 +354,122 @@ pub fn is_valid_solution(
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{is_valid_solution, is_valid_solution_iterative, is_valid_solution_recursive};
|
use super::{
|
||||||
|
expand_array, indices_from_minimal, is_valid_solution, is_valid_solution_iterative,
|
||||||
|
is_valid_solution_recursive, Params,
|
||||||
|
};
|
||||||
use crate::test_vectors::{INVALID_TEST_VECTORS, VALID_TEST_VECTORS};
|
use crate::test_vectors::{INVALID_TEST_VECTORS, VALID_TEST_VECTORS};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn array_expansion() {
|
||||||
|
let check_array = |(bit_len, byte_pad), compact, expanded| {
|
||||||
|
assert_eq!(expand_array(compact, bit_len, byte_pad), expanded);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 8 11-bit chunks, all-ones
|
||||||
|
check_array(
|
||||||
|
(11, 0),
|
||||||
|
&[
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
0x07, 0xff, 0x07, 0xff, 0x07, 0xff, 0x07, 0xff, 0x07, 0xff, 0x07, 0xff, 0x07, 0xff,
|
||||||
|
0x07, 0xff,
|
||||||
|
][..],
|
||||||
|
);
|
||||||
|
// 8 21-bit chunks, alternating 1s and 0s
|
||||||
|
check_array(
|
||||||
|
(21, 0),
|
||||||
|
&[
|
||||||
|
0xaa, 0xaa, 0xad, 0x55, 0x55, 0x6a, 0xaa, 0xab, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xd5,
|
||||||
|
0x55, 0x56, 0xaa, 0xaa, 0xb5, 0x55, 0x55,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
0x15, 0x55, 0x55, 0x15, 0x55, 0x55, 0x15, 0x55, 0x55, 0x15, 0x55, 0x55, 0x15, 0x55,
|
||||||
|
0x55, 0x15, 0x55, 0x55, 0x15, 0x55, 0x55, 0x15, 0x55, 0x55,
|
||||||
|
][..],
|
||||||
|
);
|
||||||
|
// 8 21-bit chunks, based on example in the spec
|
||||||
|
check_array(
|
||||||
|
(21, 0),
|
||||||
|
&[
|
||||||
|
0x00, 0x02, 0x20, 0x00, 0x0a, 0x7f, 0xff, 0xfe, 0x00, 0x12, 0x30, 0x22, 0xb3, 0x82,
|
||||||
|
0x26, 0xac, 0x19, 0xbd, 0xf2, 0x34, 0x56,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
0x00, 0x00, 0x44, 0x00, 0x00, 0x29, 0x1f, 0xff, 0xff, 0x00, 0x01, 0x23, 0x00, 0x45,
|
||||||
|
0x67, 0x00, 0x89, 0xab, 0x00, 0xcd, 0xef, 0x12, 0x34, 0x56,
|
||||||
|
][..],
|
||||||
|
);
|
||||||
|
// 16 14-bit chunks, alternating 11s and 00s
|
||||||
|
check_array(
|
||||||
|
(14, 0),
|
||||||
|
&[
|
||||||
|
0xcc, 0xcf, 0x33, 0x3c, 0xcc, 0xf3, 0x33, 0xcc, 0xcf, 0x33, 0x3c, 0xcc, 0xf3, 0x33,
|
||||||
|
0xcc, 0xcf, 0x33, 0x3c, 0xcc, 0xf3, 0x33, 0xcc, 0xcf, 0x33, 0x3c, 0xcc, 0xf3, 0x33,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
|
||||||
|
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
|
||||||
|
0x33, 0x33, 0x33, 0x33,
|
||||||
|
][..],
|
||||||
|
);
|
||||||
|
// 8 11-bit chunks, all-ones, 2-byte padding
|
||||||
|
check_array(
|
||||||
|
(11, 2),
|
||||||
|
&[
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00,
|
||||||
|
0x07, 0xff, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xff,
|
||||||
|
0x00, 0x00, 0x07, 0xff,
|
||||||
|
][..],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn minimal_solution_repr() {
|
||||||
|
let check_repr = |minimal, indices| {
|
||||||
|
assert_eq!(
|
||||||
|
indices_from_minimal(Params { n: 80, k: 3 }, minimal).unwrap(),
|
||||||
|
indices,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// The solutions here are not intended to be valid.
|
||||||
|
check_repr(
|
||||||
|
&[
|
||||||
|
0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x80,
|
||||||
|
0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x01,
|
||||||
|
],
|
||||||
|
&[1, 1, 1, 1, 1, 1, 1, 1],
|
||||||
|
);
|
||||||
|
check_repr(
|
||||||
|
&[
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
],
|
||||||
|
&[
|
||||||
|
2097151, 2097151, 2097151, 2097151, 2097151, 2097151, 2097151, 2097151,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
check_repr(
|
||||||
|
&[
|
||||||
|
0x0f, 0xff, 0xf8, 0x00, 0x20, 0x03, 0xff, 0xfe, 0x00, 0x08, 0x00, 0xff, 0xff, 0x80,
|
||||||
|
0x02, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x80,
|
||||||
|
],
|
||||||
|
&[131071, 128, 131071, 128, 131071, 128, 131071, 128],
|
||||||
|
);
|
||||||
|
check_repr(
|
||||||
|
&[
|
||||||
|
0x00, 0x02, 0x20, 0x00, 0x0a, 0x7f, 0xff, 0xfe, 0x00, 0x4d, 0x10, 0x01, 0x4c, 0x80,
|
||||||
|
0x0f, 0xfc, 0x00, 0x00, 0x2f, 0xff, 0xff,
|
||||||
|
],
|
||||||
|
&[68, 41, 2097151, 1233, 665, 1023, 1, 1048575],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn valid_test_vectors() {
|
fn valid_test_vectors() {
|
||||||
for tv in VALID_TEST_VECTORS {
|
for tv in VALID_TEST_VECTORS {
|
||||||
|
|
Loading…
Reference in New Issue