1
0

138 lines
3.7 KiB
Rust
Raw Normal View History

2024-12-03 17:20:29 -05:00
use dust_lang::*;
#[test]
fn true_and_true() {
let source = "true && true";
assert_eq!(
compile(source),
Ok(Chunk {
name: None,
r#type: FunctionType {
return_type: Type::Boolean,
..FunctionType::default()
2024-12-03 17:20:29 -05:00
},
instructions: vec![
Instruction::load_boolean(0, true, false),
Instruction::test(0, true),
Instruction::jump(1, true),
Instruction::load_boolean(1, true, false),
Instruction::r#return(true, TypeCode::BOOLEAN, 1),
2024-12-03 17:20:29 -05:00
],
positions: vec![
Span(0, 4),
Span(5, 7),
Span(5, 7),
Span(8, 12),
Span(12, 12),
],
constants: ConstantTable::new(),
..Chunk::default()
})
2024-12-03 17:20:29 -05:00
);
assert_eq!(run(source), Ok(Some(Value::Boolean(true))));
2024-12-03 17:20:29 -05:00
}
#[test]
fn false_and_false() {
let source = "false && false";
assert_eq!(
compile(source),
Ok(Chunk {
name: None,
r#type: FunctionType {
return_type: Type::Boolean,
..FunctionType::default()
2024-12-03 17:20:29 -05:00
},
instructions: vec![
Instruction::load_boolean(0, false, false),
Instruction::test(0, true),
Instruction::jump(1, true),
Instruction::load_boolean(1, false, false),
Instruction::r#return(true, TypeCode::BOOLEAN, 1),
],
positions: vec![
Span(0, 5),
Span(6, 8),
Span(6, 8),
Span(9, 14),
Span(14, 14),
2024-12-03 17:20:29 -05:00
],
constants: ConstantTable::new(),
..Chunk::default()
})
2024-12-03 17:20:29 -05:00
);
assert_eq!(run(source), Ok(Some(Value::Boolean(false))));
2024-12-03 17:20:29 -05:00
}
#[test]
fn false_and_true() {
let source = "false && true";
assert_eq!(
compile(source),
Ok(Chunk {
name: None,
r#type: FunctionType {
return_type: Type::Boolean,
..FunctionType::default()
2024-12-03 17:20:29 -05:00
},
instructions: vec![
Instruction::load_boolean(0, false, false),
Instruction::test(0, true),
Instruction::jump(1, true),
Instruction::load_boolean(1, true, false),
Instruction::r#return(true, TypeCode::BOOLEAN, 1),
2024-12-03 17:20:29 -05:00
],
positions: vec![
Span(0, 5),
Span(6, 8),
Span(6, 8),
Span(9, 13),
Span(13, 13),
],
constants: ConstantTable::new(),
..Chunk::default()
})
2024-12-03 17:20:29 -05:00
);
assert_eq!(run(source), Ok(Some(Value::Boolean(false))));
2024-12-03 17:20:29 -05:00
}
#[test]
fn true_and_false() {
let source = "true && false";
assert_eq!(
compile(source),
Ok(Chunk {
name: None,
r#type: FunctionType {
return_type: Type::Boolean,
..FunctionType::default()
2024-12-03 17:20:29 -05:00
},
instructions: vec![
Instruction::load_boolean(0, true, false),
Instruction::test(0, true),
Instruction::jump(1, true),
Instruction::load_boolean(1, false, false),
Instruction::r#return(true, TypeCode::BOOLEAN, 1),
],
positions: vec![
Span(0, 4),
Span(5, 8),
Span(5, 8),
Span(9, 14),
Span(14, 14),
2024-12-03 17:20:29 -05:00
],
constants: ConstantTable::new(),
..Chunk::default()
})
2024-12-03 17:20:29 -05:00
);
assert_eq!(run(source), Ok(Some(Value::Boolean(false))));
2024-12-03 17:20:29 -05:00
}