Documentation
#[cfg(test)]
mod interpreter_utility_tests {
    use bsv::Interpreter;
    use bsv::Script;

    #[test]
    fn simple_op_num2bin_test() {
        let script = Script::from_asm_string(
            r#"
            ABCDEF4243 OP_5
            OP_NUM2BIN ABCDEF4243 OP_EQUAL"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        interpreter.run().unwrap();

        assert_eq!(interpreter.state().stack().last().unwrap(), &vec![1_u8]);
    }

    #[test]
    fn num2bin_output_test() {
        let script = Script::from_asm_string(
            r#"
            ABCDEF4243 OP_5
            OP_NUM2BIN"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        interpreter.run().unwrap();

        assert_eq!(hex::encode(interpreter.state().stack().last().unwrap()), "abcdef4243");
    }

    #[test]
    fn num2bin_zero_length_test() {
        let script = Script::from_asm_string(
            r#"
            ABCDEF4243 OP_0
            OP_NUM2BIN"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        assert!(interpreter.run().is_err());
    }

    #[test]
    fn num2bin_oversized_length_test() {
        let script = Script::from_asm_string(
            r#"
            ABCDEF4243 OP_16
            OP_NUM2BIN"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        interpreter.run().unwrap();

        assert_eq!(hex::encode(interpreter.state().stack().last().unwrap()), "abcdef42430000000000000000000000");
    }

    #[test]
    fn num2bin_negative_number_test() {
        let script = Script::from_asm_string(
            r#"
            21e8 OP_NEGATE OP_2 OP_NUM2BIN"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        interpreter.run().unwrap();

        assert_eq!(hex::encode(interpreter.state().stack().last().unwrap()), "2168");
    }

    #[test]
    fn num2bin_oversized_negative_number_test() {
        let script = Script::from_asm_string(
            r#"
            21e8 OP_NEGATE OP_16 OP_NUM2BIN"#,
        )
        .unwrap();

        let mut interpreter = Interpreter::from_script(&script);
        interpreter.run().unwrap();

        assert_eq!(hex::encode(interpreter.state().stack().last().unwrap()), "21680000000000000000000000000000");
    }
}