use bigfixed::{digit::*, Index, BigFixed};
#[test]
fn index_position() {
let x = BigFixed::construct(ALLONES, vec![5], Index::Position(-5)).unwrap();
assert_eq!(x[Index::Position(-700)], 0, "tail far");
assert_eq!(x[Index::Position(-6)], 0, "tail");
assert_eq!(x[Index::Position(-5)], 5, "body");
assert_eq!(x[Index::Position(-4)], ALLONES, "head");
assert_eq!(x[Index::Position(6)], ALLONES, "head far");
}
#[test]
fn index_bit() {
let x = BigFixed::construct(ALLONES, vec![5], Index::Position(0)).unwrap();
assert_eq!(x[Index::Bit(-700)], 0, "tail far");
assert_eq!(x[Index::Bit(-1)], 0, "tail");
assert_eq!(x[Index::Bit(0)], 1, "body 0");
assert_eq!(x[Index::Bit(1)], 0, "body 1");
assert_eq!(x[Index::Bit(2)], 1, "body 2");
assert_eq!(x[Index::Bit(3)], 0, "body 3");
assert_eq!(x[Index::Bit(DIGITBITS as isize)], 1, "head");
assert_eq!(x[Index::Bit(DIGITBITS as isize * 700)], 1, "head far");
}
#[test]
fn index_mut_position() {
let mut x = BigFixed::ZERO.clone();
x[Index::Position(0)] = 1;
assert_eq!(x, BigFixed::from(1), "zero to one");
x[Index::Position(0)] = 0;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![0],
position: Index::Position(0)
}).unwrap(), "one to zero");
x[Index::Position(3)] = 1;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![0, 0, 0, 1],
position: Index::Position(0)
}).unwrap(), "into head");
x[Index::Position(-2)] = ALLONES;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![ALLONES, 0, 0, 0, 0, 1],
position: Index::Position(-2)
}).unwrap(), "into tail");
}
#[test]
fn index_mut_bit() {
let mut x = BigFixed::from(0);
x[Index::Bit(0)] = 1;
assert_eq!(x, BigFixed::from(1), "zero to one");
x[Index::Bit(0)] = 0;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![0],
position: Index::Position(0)
}).unwrap(), "one to zero");
x[Index::Bit(3 * DIGITBITS as isize + 3)] = 1;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![0, 0, 0, 1],
position: Index::Position(0)
}).unwrap(), "into head");
x[Index::Bit(-2 * DIGITBITS as isize)] = ALLONES;
assert!(x.full_eq(&BigFixed {
head: 0,
body: vec![ALLONES, 0, 0, 0, 0, 1],
position: Index::Position(-2)
}).unwrap(), "into tail");
}
#[test]
fn set_bit() {
let mut x = BigFixed::from(-1);
x.set_bit(4, 0);
assert!(x.full_eq(&BigFixed {
head: ALLONES,
body: vec![!16],
position: Index::Position(0)
}).unwrap(), "one bit");
x.set_bit(4, 1);
assert!(x.full_eq(&BigFixed {
head: ALLONES,
body: vec![ALLONES],
position: Index::Position(0)
}).unwrap(), "one bit");
x.set_bit(-1, 0);
assert!(x.full_eq(&BigFixed {
head: ALLONES,
body: vec![0, ALLONES],
position: Index::Position(-1)
}).unwrap(), "one bit");
}