{
out << "usage: ceph-dencoder [commands ...]" << std::endl;
out << "\n";
- out << " version print version string (to stdout)\n";
+ out << " version print version string (to stdout)\n";
out << "\n";
- out << " import <encfile> read encoded data from encfile\n";
- out << " export <outfile> write encoded data to outfile\n";
+ out << " import <encfile> read encoded data from encfile\n";
+ out << " export <outfile> write encoded data to outfile\n";
out << "\n";
- out << " features <num> set feature bits used for encoding\n";
- out << " get_features print feature bits (int) to stdout\n";
+ out << " set_features <num> set feature bits used for encoding\n";
+ out << " get_features print feature bits (int) to stdout\n";
out << "\n";
- out << " list_types list supported types\n";
- out << " type <classname> select type\n";
- out << " decode decode into in-core object\n";
- out << " encode encode in-core object\n";
- out << " dump_json dump in-core object as json (to stdout)\n";
+ out << " list_types list supported types\n";
+ out << " type <classname> select in-memory type\n";
+ out << " decode decode into in-memory object\n";
+ out << " encode encode in-memory object\n";
+ out << " dump_json dump in-memory object as json (to stdout)\n";
out << "\n";
- out << " count print number of generated test objects (to stdout)\n";
- out << " select <n> select generated test object as in-core object\n";
+ out << " count_tests print number of generated test objects (to stdout)\n";
+ out << " select_test <n> select generated test object as in-memory object\n";
}
struct Dencoder {
return m_list.size();
}
string select_generated(unsigned i) {
- if (i >= m_list.size())
+ // allow 0- or 1-based (by wrapping)
+ if (i == 0)
+ i = m_list.size();
+ if (i > m_list.size())
return "invalid id for generated object";
- typename list<T>::iterator p;
- p = m_list.begin();
- for ( ; i > 0 && p != m_list.end(); ++p, --i) ;
+ typename list<T>::iterator p = m_list.begin();
+ for (i--; i > 0 && p != m_list.end(); ++p, --i) ;
m_object = *p;
return string();
}
}
den = dencoders[cname];
den->generate();
- } else if (*i == string("get-features")) {
+ } else if (*i == string("get_features")) {
cout << CEPH_FEATURES_SUPPORTED_DEFAULT << std::endl;
exit(0);
- } else if (*i == string("features")) {
+ } else if (*i == string("set_features")) {
i++;
if (i == args.end()) {
usage(cerr);
}
::close(fd);
- } else if (*i == string("count")) {
+ } else if (*i == string("count_tests")) {
if (!den) {
cerr << "must first select type with 'type <name>'" << std::endl;
usage(cerr);
exit(1);
}
cout << den->num_generated() << std::endl;
- } else if (*i == string("select")) {
+ } else if (*i == string("select_test")) {
if (!den) {
cerr << "must first select type with 'type <name>'" << std::endl;
usage(cerr);
echo "numgen\ttype"
for type in `./ceph-dencoder list_types`; do
- num=`./ceph-dencoder type $type count`
+ num=`./ceph-dencoder type $type count_tests`
echo "$num\t$type"
- max=$(($num - 1))
- for n in `seq 0 $max`; do
- ./ceph-dencoder type $type select $n dump_json > $tmp1
- ./ceph-dencoder type $type select $n encode decode dump_json > $tmp2
+ for n in `seq 1 $num`; do
+ ./ceph-dencoder type $type select_test $n dump_json > $tmp1
+ ./ceph-dencoder type $type select_test $n encode decode dump_json > $tmp2
cmp $tmp1 $tmp2 || exit 1
- ./ceph-dencoder type $type select $n encode export $tmp1
- ./ceph-dencoder type $type select $n encode decode encode export $tmp2
+ ./ceph-dencoder type $type select_test $n encode export $tmp1
+ ./ceph-dencoder type $type select_test $n encode decode encode export $tmp2
cmp $tmp1 $tmp2 || exit 1
done
done
\ No newline at end of file