use crate::harness::{expect_error, expect_int, expect_stack, run};
use cagire::forth::Value;

#[test]
fn map_add() {
    expect_stack(
        "1 2 3 4 5 ( 2 + ) map",
        &[
            Value::Int(3, None),
            Value::Int(4, None),
            Value::Int(5, None),
            Value::Int(6, None),
            Value::Int(7, None),
        ],
    );
}

#[test]
fn map_multiply() {
    expect_stack(
        "1 2 3 ( 10 * ) map",
        &[
            Value::Int(10, None),
            Value::Int(20, None),
            Value::Int(30, None),
        ],
    );
}

#[test]
fn map_single_element() {
    expect_int("42 ( 1 + ) map", 43);
}

#[test]
fn map_empty_stack() {
    run("( 1 + ) map");
}

#[test]
fn map_identity() {
    expect_stack(
        "1 2 3 ( ) map",
        &[
            Value::Int(1, None),
            Value::Int(2, None),
            Value::Int(3, None),
        ],
    );
}

#[test]
fn map_missing_quotation() {
    expect_error("1 2 3 map", "expected quotation");
}
