From 3bdb3ddc3783504087ebb236b95b1257dafeb9e0 Mon Sep 17 00:00:00 2001 From: OMGeeky Date: Wed, 16 Apr 2025 00:01:09 +0200 Subject: [PATCH] a bunch of tests for the connection values --- .idea/logisim.iml | 2 +- src/logic_sim/tests.rs | 3 + .../tests/connection_values_tests.rs | 5 + .../connection_values_tests/get_by_index.rs | 262 ++++++++++++++++++ .../tests/connection_values_tests/len.rs | 26 ++ 5 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 src/logic_sim/tests.rs create mode 100644 src/logic_sim/tests/connection_values_tests.rs create mode 100644 src/logic_sim/tests/connection_values_tests/get_by_index.rs create mode 100644 src/logic_sim/tests/connection_values_tests/len.rs diff --git a/.idea/logisim.iml b/.idea/logisim.iml index cf84ae4..255ee58 100644 --- a/.idea/logisim.iml +++ b/.idea/logisim.iml @@ -2,7 +2,7 @@ - + diff --git a/src/logic_sim/tests.rs b/src/logic_sim/tests.rs new file mode 100644 index 0000000..e31f592 --- /dev/null +++ b/src/logic_sim/tests.rs @@ -0,0 +1,3 @@ +use super::*; + +mod connection_values_tests; diff --git a/src/logic_sim/tests/connection_values_tests.rs b/src/logic_sim/tests/connection_values_tests.rs new file mode 100644 index 0000000..811c6f4 --- /dev/null +++ b/src/logic_sim/tests/connection_values_tests.rs @@ -0,0 +1,5 @@ +use super::*; +const INPUT: u128 = 0b1010_0110_1110_0010_1001_0110_1000_0101_1010_0110_1110_0010_1001_0110_1000_0101_1010_0110_1110_0010_1001_0110_1000_0101_1010_0110_1110_0010_1001_0110_1000_0101; + +mod get_by_index; +mod len; diff --git a/src/logic_sim/tests/connection_values_tests/get_by_index.rs b/src/logic_sim/tests/connection_values_tests/get_by_index.rs new file mode 100644 index 0000000..47ee773 --- /dev/null +++ b/src/logic_sim/tests/connection_values_tests/get_by_index.rs @@ -0,0 +1,262 @@ +use super::*; +fn check_get_by_index(val: ConnectionValues) { + assert_eq!(val.get_by_index(val.len()), false); // Out of bounds + assert_eq!(val.get_by_index(usize::MAX), false); // Out of bounds + + for i in 0..val.len() { + if i >= 128 { + assert_eq!(val.get_by_index(i), (INPUT & (1 << (i - 128))) != 0); + } else { + assert_eq!(val.get_by_index(i), (INPUT & (1 << i)) != 0); + } + } +} +#[test] +fn test_single() { + let val_true = ConnectionValues::Single(true); + let val_false = ConnectionValues::Single(false); + + assert_eq!(val_true.get_by_index(0), true); + assert_eq!(val_false.get_by_index(0), false); + + assert_eq!(val_true.get_by_index(1), false); // Out of bounds + assert_eq!(val_false.get_by_index(1), false); +} + +#[test] +fn test_half_byte() { + let val = ConnectionValues::HalfByte(true, false, true, false); + check_get_by_index(val); + + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); // Out of bounds +} + +#[test] +fn test_byte() { + let val = ConnectionValues::Byte(INPUT as u8); // 1000_0101 + check_get_by_index(val); + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); // Out of bounds +} + +#[test] +fn test_x16() { + let val = ConnectionValues::X16(INPUT as u16); // 1001_0110_1000_0101 + check_get_by_index(val); + + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); + assert_eq!(val.get_by_index(9), true); + assert_eq!(val.get_by_index(10), true); + assert_eq!(val.get_by_index(11), false); + + assert_eq!(val.get_by_index(12), true); + assert_eq!(val.get_by_index(13), false); + assert_eq!(val.get_by_index(14), false); + assert_eq!(val.get_by_index(15), true); + + assert_eq!(val.get_by_index(16), false); // Out of bounds +} + +#[test] +fn test_x32() { + let val = ConnectionValues::X32(INPUT as u32); + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); + assert_eq!(val.get_by_index(9), true); + assert_eq!(val.get_by_index(10), true); + assert_eq!(val.get_by_index(11), false); + + assert_eq!(val.get_by_index(12), true); + assert_eq!(val.get_by_index(13), false); + assert_eq!(val.get_by_index(14), false); + assert_eq!(val.get_by_index(15), true); + + assert_eq!(val.get_by_index(16), false); + assert_eq!(val.get_by_index(31), true); + assert_eq!(val.get_by_index(32), false); // Out of bounds + check_get_by_index(val); +} + +#[test] +fn test_x64() { + let val = ConnectionValues::X64(INPUT as u64); + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); + assert_eq!(val.get_by_index(9), true); + assert_eq!(val.get_by_index(10), true); + assert_eq!(val.get_by_index(11), false); + + assert_eq!(val.get_by_index(12), true); + assert_eq!(val.get_by_index(13), false); + assert_eq!(val.get_by_index(14), false); + assert_eq!(val.get_by_index(15), true); + + assert_eq!(val.get_by_index(16), false); + + assert_eq!(val.get_by_index(31), true); + + assert_eq!(val.get_by_index(63), true); + + assert_eq!(val.get_by_index(64), false); // Out of bounds + check_get_by_index(val); +} + +#[test] +fn test_x128() { + let val = ConnectionValues::X128(INPUT); + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); + assert_eq!(val.get_by_index(9), true); + assert_eq!(val.get_by_index(10), true); + assert_eq!(val.get_by_index(11), false); + + assert_eq!(val.get_by_index(12), true); + assert_eq!(val.get_by_index(13), false); + assert_eq!(val.get_by_index(14), false); + assert_eq!(val.get_by_index(15), true); + + assert_eq!(val.get_by_index(16), false); + + assert_eq!(val.get_by_index(31), true); + + assert_eq!(val.get_by_index(63), true); + + assert_eq!(val.get_by_index(64), true); + assert_eq!(val.get_by_index(68), false); + assert_eq!(val.get_by_index(72), false); + assert_eq!(val.get_by_index(76), true); + assert_eq!(val.get_by_index(80), false); + assert_eq!(val.get_by_index(84), false); + assert_eq!(val.get_by_index(88), false); + assert_eq!(val.get_by_index(92), false); + assert_eq!(val.get_by_index(96), true); + assert_eq!(val.get_by_index(127), true); + assert_eq!(val.get_by_index(128), false); // Out of bounds + check_get_by_index(val); +} + +#[test] +fn test_x256() { + let val = ConnectionValues::X256(INPUT, INPUT); + assert_eq!(val.get_by_index(0), true); + assert_eq!(val.get_by_index(1), false); + assert_eq!(val.get_by_index(2), true); + assert_eq!(val.get_by_index(3), false); + + assert_eq!(val.get_by_index(4), false); + assert_eq!(val.get_by_index(5), false); + assert_eq!(val.get_by_index(6), false); + assert_eq!(val.get_by_index(7), true); + + assert_eq!(val.get_by_index(8), false); + assert_eq!(val.get_by_index(9), true); + assert_eq!(val.get_by_index(10), true); + assert_eq!(val.get_by_index(11), false); + + assert_eq!(val.get_by_index(12), true); + assert_eq!(val.get_by_index(13), false); + assert_eq!(val.get_by_index(14), false); + assert_eq!(val.get_by_index(15), true); + + assert_eq!(val.get_by_index(16), false); + + assert_eq!(val.get_by_index(31), true); + + assert_eq!(val.get_by_index(63), true); + + assert_eq!(val.get_by_index(64), true); + assert_eq!(val.get_by_index(68), false); + assert_eq!(val.get_by_index(72), false); + assert_eq!(val.get_by_index(76), true); + assert_eq!(val.get_by_index(80), false); + assert_eq!(val.get_by_index(84), false); + assert_eq!(val.get_by_index(88), false); + assert_eq!(val.get_by_index(92), false); + assert_eq!(val.get_by_index(96), true); + assert_eq!(val.get_by_index(127), true); + + assert_eq!(val.get_by_index(128 + 0), true); + assert_eq!(val.get_by_index(128 + 1), false); + assert_eq!(val.get_by_index(128 + 2), true); + assert_eq!(val.get_by_index(128 + 3), false); + assert_eq!(val.get_by_index(128 + 4), false); + assert_eq!(val.get_by_index(128 + 5), false); + assert_eq!(val.get_by_index(128 + 6), false); + assert_eq!(val.get_by_index(128 + 7), true); + assert_eq!(val.get_by_index(128 + 8), false); + assert_eq!(val.get_by_index(128 + 9), true); + assert_eq!(val.get_by_index(128 + 10), true); + assert_eq!(val.get_by_index(128 + 11), false); + assert_eq!(val.get_by_index(128 + 12), true); + assert_eq!(val.get_by_index(128 + 13), false); + assert_eq!(val.get_by_index(128 + 14), false); + assert_eq!(val.get_by_index(128 + 15), true); + assert_eq!(val.get_by_index(128 + 16), false); + assert_eq!(val.get_by_index(128 + 31), true); + assert_eq!(val.get_by_index(128 + 63), true); + assert_eq!(val.get_by_index(128 + 64), true); + assert_eq!(val.get_by_index(128 + 68), false); + assert_eq!(val.get_by_index(128 + 72), false); + assert_eq!(val.get_by_index(128 + 76), true); + assert_eq!(val.get_by_index(128 + 80), false); + assert_eq!(val.get_by_index(128 + 84), false); + assert_eq!(val.get_by_index(128 + 88), false); + assert_eq!(val.get_by_index(128 + 92), false); + assert_eq!(val.get_by_index(128 + 96), true); + assert_eq!(val.get_by_index(128 + 127), true); + + assert_eq!(val.get_by_index(255), true); + assert_eq!(val.get_by_index(256), false); // Out of bounds + check_get_by_index(val); +} diff --git a/src/logic_sim/tests/connection_values_tests/len.rs b/src/logic_sim/tests/connection_values_tests/len.rs new file mode 100644 index 0000000..272ce53 --- /dev/null +++ b/src/logic_sim/tests/connection_values_tests/len.rs @@ -0,0 +1,26 @@ +use super::*; +#[test] +fn test_single() { + assert_eq!(ConnectionValues::Single(true).len(), 1); + assert_eq!(ConnectionValues::Single(false).len(), 1); +} +#[test] +fn test_half_byte() { + assert_eq!( + ConnectionValues::HalfByte(true, false, true, false).len(), + 4 + ); +} +#[test] +fn test_byte() { + assert_eq!(ConnectionValues::Byte(INPUT as u8).len(), 8); +} + +#[test] +fn test_xx() { + assert_eq!(ConnectionValues::X16(INPUT as u16).len(), 16); + assert_eq!(ConnectionValues::X32(INPUT as u32).len(), 32); + assert_eq!(ConnectionValues::X64(INPUT as u64).len(), 64); + assert_eq!(ConnectionValues::X128(INPUT).len(), 128); + assert_eq!(ConnectionValues::X256(INPUT, INPUT).len(), 256); +}