basic_usage/
basic_usage.rs

1use zigzag_rs::ZigZag;
2
3fn main() {
4    println!("ZigZag Encoding Examples:");
5    
6    // Encode different integer types (single values)
7    println!("Single Value Encoding:");
8    println!("i8: -1 encoded as: {} (u8)", i8::zigzag_encode(-1));
9    println!("i16: 10 encoded as: {} (u16)", i16::zigzag_encode(10));
10    println!("i32: -100 encoded as: {} (u32)", i32::zigzag_encode(-100));
11    println!("i64: 1000 encoded as: {} (u64)", i64::zigzag_encode(1000));
12    
13    println!("\nZigZag Decoding Examples:");
14    
15    // Decode different integer types (single values)
16    println!("Single Value Decoding:");
17    println!("u8: 1 decoded as: {} (i8)", i8::zigzag_decode(1u8));
18    println!("u16: 20 decoded as: {} (i16)", i16::zigzag_decode(20u16));
19    println!("u32: 200 decoded as: {} (i32)", i32::zigzag_decode(200u32));
20    println!("u64: 2000 decoded as: {} (i64)", i64::zigzag_decode(2000u64));
21    
22    // Demonstrate round-trip conversion (single value)
23    let original = -42i32;
24    let encoded = i32::zigzag_encode(original);
25    let decoded = i32::zigzag_decode(encoded);
26    
27    println!("\nRound-trip Conversion Example (Single Value):");
28    println!("Original value: {}", original);
29    println!("Encoded as: {}", encoded);
30    println!("Decoded back: {}", decoded);
31    println!("Conversion successful: {}", original == decoded);
32    
33    // Demonstrate batch processing
34    println!("\nBatch Processing Example:");
35    let values = [-100i32, -10, -1, 0, 1, 10, 100];
36    let mut encoded = [0u32; 7];
37    let mut decoded = [0i32; 7];
38    
39    // Encode array
40    i32::zigzag_encode_slice(&values, &mut encoded);
41    
42    println!("Original values: {:?}", values);
43    println!("Encoded values: {:?}", encoded);
44    
45    // Decode array
46    i32::zigzag_decode_slice(&encoded, &mut decoded);
47    println!("Decoded values: {:?}", decoded);
48    println!("Batch round-trip successful: {}", values == decoded);
49}