Files
IronCalc/base/src/test/engineering/test_number_basis.rs
2023-11-20 10:46:19 +01:00

346 lines
9.5 KiB
Rust

use crate::test::util::new_empty_model;
#[test]
fn fn_bin2dec() {
let mut model = new_empty_model();
model._set("A1", "=BIN2DEC(1100100)");
model._set("A2", "=BIN2DEC(1111111111)");
model._set("B1", "=BIN2DEC()");
model._set("B2", "=BIN2DEC(1,2)");
model.evaluate();
assert_eq!(model._get_text("A1"), "100");
assert_eq!(model._get_text("A2"), "-1");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_bin2hex() {
let mut model = new_empty_model();
model._set("A1", "=BIN2HEX(11111011, 4)");
model._set("A2", "=BIN2HEX(1110)");
model._set("A3", "=BIN2HEX(1111111111)");
model._set("A4", "=BIN2HEX(1100011011)");
model._set("B1", "=BIN2HEX()");
model._set("B2", "=BIN2HEX(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "00FB");
assert_eq!(model._get_text("A2"), "E");
assert_eq!(model._get_text("A3"), "FFFFFFFFFF");
assert_eq!(model._get_text("A4"), "FFFFFFFF1B");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_bin2oct() {
let mut model = new_empty_model();
model._set("A1", "=BIN2OCT(11111011, 4)");
model._set("A2", "=BIN2OCT(1110)");
model._set("A3", "=BIN2OCT(1111111111)");
model._set("A4", "=BIN2OCT(1100011011)");
model._set("B1", "=BIN2OCT()");
model._set("B2", "=BIN2OCT(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "0373");
assert_eq!(model._get_text("A2"), "16");
assert_eq!(model._get_text("A3"), "7777777777");
assert_eq!(model._get_text("A4"), "7777777433");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_dec2bin() {
let mut model = new_empty_model();
model._set("A1", "=DEC2BIN(9, 4)");
model._set("A2", "=DEC2BIN(-100)");
model._set("A3", "=DEC2BIN(-1)");
model._set("A4", "=DEC2BIN(0, 3)");
model._set("B1", "=DEC2BIN()");
model._set("B2", "=DEC2BIN(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "1001");
assert_eq!(model._get_text("A2"), "1110011100");
assert_eq!(model._get_text("A3"), "1111111111");
assert_eq!(model._get_text("A4"), "000");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_dec2hex() {
let mut model = new_empty_model();
model._set("A1", "=DEC2HEX(100, 4)");
model._set("A2", "=DEC2HEX(-54)");
model._set("A3", "=DEC2HEX(28)");
model._set("A4", "=DEC2HEX(64, 1)");
model._set("B1", "=DEC2HEX()");
model._set("B2", "=DEC2HEX(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "0064");
assert_eq!(model._get_text("A2"), "FFFFFFFFCA");
assert_eq!(model._get_text("A3"), "1C");
assert_eq!(model._get_text("A4"), "#NUM!");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_dec2oct() {
let mut model = new_empty_model();
model._set("A1", "=DEC2OCT(58, 3)");
model._set("A2", "=DEC2OCT(-100)");
model._set("B1", "=DEC2OCT()");
model._set("B2", "=DEC2OCT(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "072");
assert_eq!(model._get_text("A2"), "7777777634");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_hex2bin() {
let mut model = new_empty_model();
model._set("A1", r#"=HEX2BIN("F", 8)"#);
model._set("A2", r#"=HEX2BIN("B7")"#);
model._set("A3", r#"=HEX2BIN("FFFFFFFFFF")"#);
model._set("B1", "=HEX2BIN()");
model._set("B2", "=HEX2BIN(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "00001111");
assert_eq!(model._get_text("A2"), "10110111");
assert_eq!(model._get_text("A3"), "1111111111");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_hex2dec() {
let mut model = new_empty_model();
model._set("A1", r#"=HEX2DEC("A5")"#);
model._set("A2", r#"=HEX2DEC("FFFFFFFF5B")"#);
model._set("A3", r#"=HEX2DEC("3DA408B9")"#);
model._set("A4", r#"=HEX2DEC("FE")"#);
model._set("B1", "=HEX2DEC()");
model._set("B2", "=HHEX2DEC(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "165");
assert_eq!(model._get_text("A2"), "-165");
assert_eq!(model._get_text("A3"), "1034160313");
assert_eq!(model._get_text("A4"), "254");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_hex2oct() {
let mut model = new_empty_model();
model._set("A1", r#"=HEX2OCT("F", 3)"#);
model._set("A2", r#"=HEX2OCT("3B4E")"#);
model._set("A3", r#"=HEX2OCT("FFFFFFFF00")"#);
model._set("B1", "=HEX2OCT()");
model._set("B2", "=HEX2OCT(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "017");
assert_eq!(model._get_text("A2"), "35516");
assert_eq!(model._get_text("A3"), "7777777400");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_oct2bin() {
let mut model = new_empty_model();
model._set("A1", r#"=OCT2BIN(3, 3)"#);
model._set("A2", r#"=OCT2BIN(7777777000)"#);
// bounds
model._set("G1", r#"=OCT2BIN(777)"#);
model._set("G2", r#"=OCT2BIN(778)"#);
model._set("B1", "=OCT2BIN()");
model._set("B2", "=OCT2BIN(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "011");
assert_eq!(model._get_text("A2"), "1000000000");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
assert_eq!(model._get_text("G1"), "111111111");
assert_eq!(model._get_text("G2"), "#NUM!");
}
#[test]
fn fn_oct2dec() {
let mut model = new_empty_model();
model._set("A1", r#"=OCT2DEC(54)"#);
model._set("A2", r#"=OCT2DEC(7777777533)"#);
model._set("B1", "=OCT2DEC()");
model._set("B2", "=OCT2DEC(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "44");
assert_eq!(model._get_text("A2"), "-165");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_oct2hex() {
let mut model = new_empty_model();
model._set("A1", r#"=OCT2HEX(100, 4)"#);
model._set("A2", r#"=OCT2HEX(7777777533)"#);
model._set("B1", "=OCT2HEX()");
model._set("B2", "=OCT2HEX(1,2,3)");
model.evaluate();
assert_eq!(model._get_text("A1"), "0040");
assert_eq!(model._get_text("A2"), "FFFFFFFF5B");
assert_eq!(model._get_text("B1"), *"#ERROR!");
assert_eq!(model._get_text("B2"), *"#ERROR!");
}
#[test]
fn fn_bin2hex_misc() {
let mut model = new_empty_model();
model._set("A1", "=BIN2HEX(1100011011, -2)");
model._set("A2", "=BIN2HEX(1100011011, 11)");
model.evaluate();
assert_eq!(model._get_text("A1"), *"#NUM!");
assert_eq!(model._get_text("A2"), *"#NUM!");
}
#[test]
fn fn_bin2oct_misc() {
let mut model = new_empty_model();
model._set("A1", "=BIN2OCT(1100011011, -2)");
model._set("A2", "=BIN2OCT(1100011011, 11)");
model.evaluate();
assert_eq!(model._get_text("A1"), *"#NUM!");
assert_eq!(model._get_text("A2"), *"#NUM!");
}
#[test]
fn fn_dec2oct_misc() {
let mut model = new_empty_model();
model._set("A1", "=DEC2OCT(-1213, 1)");
model.evaluate();
assert_eq!(model._get_text("A1"), *"7777775503");
}
#[test]
fn fn_dec2bin_misc() {
let mut model = new_empty_model();
model._set("A1", "=DEC2BIN(-511, 4)");
model._set("A2", "=DEC2BIN(TRUE, -1)");
model._set("A3", "=DEC2OCT(TRUE, -1)");
model._set("A4", "=DEC2HEX(TRUE, -1)");
model.evaluate();
assert_eq!(model._get_text("A1"), *"1000000001");
// Note Excel here return #NUM! instead
assert_eq!(model._get_text("A2"), *"#VALUE!");
assert_eq!(model._get_text("A3"), *"#VALUE!");
assert_eq!(model._get_text("A4"), *"#VALUE!");
}
#[test]
fn fn_hex2whatever_misc() {
let mut model = new_empty_model();
model._set("A1", r#"=HEX2BIN(TRUE, 4)"#);
model._set("A2", r#"=HEX2DEC(TRUE, 4)"#);
model._set("A3", r#"=HEX2OCT(TRUE, 4)"#);
model.evaluate();
// Note Excel here return #VALUE! instead
assert_eq!(model._get_text("A1"), *"#NUM!");
assert_eq!(model._get_text("A2"), *"#NUM!");
assert_eq!(model._get_text("A3"), *"#NUM!");
}
#[test]
fn fn_oct2whatever_misc() {
let mut model = new_empty_model();
model._set("A1", r#"=OCT2BIN(TRUE, 4)"#);
model._set("A2", r#"=OCT2DEC(TRUE, 4)"#);
model._set("A3", r#"=OCT2HEX(TRUE, 4)"#);
model.evaluate();
// Note Excel here return #VALUE! instead
assert_eq!(model._get_text("A1"), *"#NUM!");
assert_eq!(model._get_text("A2"), *"#NUM!");
assert_eq!(model._get_text("A3"), *"#NUM!");
}
#[test]
fn fn_oct2dec_misc() {
let mut model = new_empty_model();
model._set("A1", r#"=OCT2DEC(777)"#);
model._set("A2", r#"=OCT2DEC("777")"#);
model._set("A3", r#"=OCT2DEC("-1")"#);
model._set("A4", r#"=OCT2BIN("-1")"#);
model._set("A5", r#"=OCT2HEX("-1")"#);
model._set("A6", r#"=OCT2DEC(4000000000)"#);
model.evaluate();
assert_eq!(model._get_text("A1"), *"511");
assert_eq!(model._get_text("A1"), *"511");
assert_eq!(model._get_text("A3"), *"#NUM!");
assert_eq!(model._get_text("A4"), *"#NUM!");
assert_eq!(model._get_text("A5"), *"#NUM!");
assert_eq!(model._get_text("A6"), *"-536870912");
}