use qubit_budget::json::JsonEncodeLimits;
use qubit_budget::json::JsonResource;
use qubit_json::encode::JsonEncoder;
#[test]
fn test_json_encoder_owned_uses_explicit_limits() {
let limits = JsonEncodeLimits::<JsonResource, usize>::builder()
.max_output_bytes(8)
.max_nodes(2)
.build();
let encoder = JsonEncoder::with_limits(limits);
assert_eq!(encoder.session().max_output_bytes(), Some(8));
assert_eq!(encoder.session().value_budget().limits().max_nodes(), Some(2));
}
#[test]
fn test_json_encoder_unlimited_has_no_limits() {
let encoder = JsonEncoder::unlimited();
assert_eq!(encoder.session().max_output_bytes(), None);
assert_eq!(encoder.session().value_budget().limits().max_nodes(), None);
}
#[test]
fn test_json_encoder_session_mut_and_into_session_preserve_usage() {
let limits = JsonEncodeLimits::<JsonResource, usize>::builder()
.max_output_bytes(4)
.build();
let mut encoder = JsonEncoder::with_limits(limits);
let mut attempt = encoder.session_mut().begin_value();
attempt
.try_consume_output_bytes(1)
.expect("the direct output charge should fit");
attempt.commit().expect("the empty value transaction should commit");
let session = encoder.into_session();
assert_eq!(session.output_budget().expect("configured output budget").used(), 1);
}