()
| 354 | |
| 355 | #[test] |
| 356 | fn encode_basic_row() { |
| 357 | let schema = crm_schema(); |
| 358 | let encoder = TupleEncoder::new(&schema); |
| 359 | |
| 360 | let values = vec![ |
| 361 | Value::Integer(42), |
| 362 | Value::String("Alice".into()), |
| 363 | Value::String("alice@example.com".into()), |
| 364 | Value::Decimal(rust_decimal::Decimal::new(5000, 2)), |
| 365 | Value::Bool(true), |
| 366 | ]; |
| 367 | |
| 368 | let tuple = encoder.encode(&values).unwrap(); |
| 369 | |
| 370 | // Header: magic(4) + format_version(1) + schema_version(4) + null_bitmap(1) = 10 bytes |
| 371 | // magic = 0x5453_444E "NDST" LE |
| 372 | assert_eq!(&tuple[0..4], &0x5453_444Eu32.to_le_bytes()); // magic |
| 373 | assert_eq!(tuple[4], 1); // format_version |
| 374 | assert_eq!(tuple[5], 1); // schema version low byte = 1 |
| 375 | assert_eq!(tuple[6], 0); // schema version byte 1 |
| 376 | assert_eq!(tuple[7], 0); // schema version byte 2 |
| 377 | assert_eq!(tuple[8], 0); // schema version byte 3 |
| 378 | assert_eq!(tuple[9], 0); // null bitmap: no nulls |
| 379 | |
| 380 | // Fixed section: Int64(8) + Decimal(16) + Bool(1) = 25 bytes |
| 381 | // Starting at offset 10 |
| 382 | let id_bytes = &tuple[10..18]; |
| 383 | assert_eq!(i64::from_le_bytes(id_bytes.try_into().unwrap()), 42); |
| 384 | } |
| 385 | |
| 386 | #[test] |
| 387 | fn encode_with_nulls() { |
nothing calls this directly
no test coverage detected