BadVPN – Rev 1

Subversion Repositories:
Rev:
template test_one {
    var(@struct_encode({{_arg0, _arg1}})) encoded;
    assert(@val_equal(encoded, _arg2));
    
    var(@struct_decode({_arg0}, encoded)) decoded;
    assert(@val_equal(decoded, {_arg1}));
}

process main {
    call(@test_one, {@u8, "0", "\x00"});
    call(@test_one, {@u8, "254", "\xFE"});
    call(@test_one, {@u8, "255", "\xFF"});
    
    call(@test_one, {@u16b, "0", "\x00\x00"});
    call(@test_one, {@u16l, "0", "\x00\x00"});
    call(@test_one, {@u16b, "65534", "\xFF\xFE"});
    call(@test_one, {@u16l, "65534", "\xFE\xFF"});
    call(@test_one, {@u16b, "65535", "\xFF\xFF"});
    call(@test_one, {@u16l, "65535", "\xFF\xFF"});
    
    call(@test_one, {@u32b, "0", "\x00\x00\x00\x00"});
    call(@test_one, {@u32l, "0", "\x00\x00\x00\x00"});
    call(@test_one, {@u32b, "4294967294", "\xFF\xFF\xFF\xFE"});
    call(@test_one, {@u32l, "4294967294", "\xFE\xFF\xFF\xFF"});
    call(@test_one, {@u32b, "4294967295", "\xFF\xFF\xFF\xFF"});
    call(@test_one, {@u32l, "4294967295", "\xFF\xFF\xFF\xFF"});
    
    call(@test_one, {@u64b, "0", "\x00\x00\x00\x00\x00\x00\x00\x00"});
    call(@test_one, {@u64l, "0", "\x00\x00\x00\x00\x00\x00\x00\x00"});
    call(@test_one, {@u64b, "18446744073709551614", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE"});
    call(@test_one, {@u64l, "18446744073709551614", "\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF"});
    call(@test_one, {@u64b, "18446744073709551615", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"});
    call(@test_one, {@u64l, "18446744073709551615", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"});
    
    var(@struct_encode({{@u8, "4"}, {@u16l, "1000"}})) encoded;
    assert(@val_equal(encoded, "\x04\xE8\x03"));
    
    var(@struct_decode({@u8, @u16l}, "\x05\xE9\x03")) decoded;
    assert(@val_equal(decoded, {"5", "1001"}));
    
    exit("0");
}