24 #include "dccl/codec.h"
25 #include "dccl/field_codec.h"
29 using dccl::operator<<;
41 {
return encode(MINI_ID_OFFSET); }
44 {
return bits->
to_ulong() + MINI_ID_OFFSET; }
47 {
return MINI_ID_SIZE; }
55 enum { MINI_ID_OFFSET = 1000000 };
56 enum { MINI_ID_SIZE = 6 };
62 bool double_cmp(
double a,
double b,
int precision)
67 int a_part = (a-a_whole)*pow(10.0, precision);
68 int b_part = (b-b_whole)*pow(10.0, precision);
70 return (a_whole == b_whole) && (a_part == b_part);
77 return dccl::Bitset(MINI_ID_SIZE, wire_value - MINI_ID_OFFSET);
81 int main(
int argc,
char* argv[])
83 dccl::dlog.
connect(dccl::logger::ALL, &std::cerr);
86 dccl::FieldCodecManager::add<dccl::test::MicroModemMiniPacketDCCLIDCodec>(
"mini_id_codec");
88 codec.set_crypto_passphrase(
"309ldskjfla39");
90 codec.load<MiniUser>();
91 codec.info<MiniUser>(&dccl::dlog);
93 MiniUser mini_user_msg_in, mini_user_msg_out;
94 mini_user_msg_in.set_user(876);
96 codec.encode(&encoded, mini_user_msg_in);
97 codec.decode(encoded, &mini_user_msg_out);
98 assert(mini_user_msg_out.SerializeAsString() == mini_user_msg_in.SerializeAsString());
100 codec.load<MiniOWTT>();
101 codec.info<MiniOWTT>(&dccl::dlog);
103 MiniOWTT mini_owtt_in, mini_owtt_out;
104 mini_owtt_in.set_clock_mode(3);
105 mini_owtt_in.set_tod(12);
106 mini_owtt_in.set_user(13);
109 codec.encode(&encoded, mini_owtt_in);
112 codec.decode(encoded, &mini_owtt_out);
113 assert(mini_owtt_out.SerializeAsString() == mini_owtt_in.SerializeAsString());
115 codec.load<MiniAbort>();
116 codec.info<MiniAbort>(&dccl::dlog);
118 MiniAbort mini_abort_in, mini_abort_out;
119 mini_abort_in.set_user(130);
121 codec.encode(&encoded, mini_abort_in);
122 codec.decode(encoded, &mini_abort_out);
123 assert(mini_abort_out.SerializeAsString() == mini_abort_in.SerializeAsString());
126 std::cout <<
"all tests passed" << std::endl;