The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use File::Find;

if(($ENV{HARNESS_PERL_SWITCHES} || '') =~ /Devel::Cover/) {
  plan skip_all => 'HARNESS_PERL_SWITCHES =~ /Devel::Cover/';
}
if(!eval 'use Test::Pod; 1') {
  *Test::Pod::pod_file_ok = sub { SKIP: { skip "pod_file_ok(@_) (Test::Pod is required)", 1 } };
}
if(!eval 'use Test::Pod::Coverage; 1') {
  *Test::Pod::Coverage::pod_coverage_ok = sub { SKIP: { skip "pod_coverage_ok(@_) (Test::Pod::Coverage is required)", 1 } };
}

find(
  {
    wanted => sub { /\.pm$/ and push @files, $File::Find::name },
    no_chdir => 1
  },
  -e 'blib' ? 'blib' : 'lib',
);

plan tests => @files * 3;

for my $file (@files) {
  my $module = $file; $module =~ s,\.pm$,,; $module =~ s,.*/?lib/,,; $module =~ s,/,::,g;
  ok eval "use $module; 1", "use $module" or diag $@;
  Test::Pod::pod_file_ok($file);
  Test::Pod::Coverage::pod_coverage_ok($module, {
    also_private => [qw(
      append auth bgrewriteaof bgsave blpop brpop brpoplpush config_get config_set
      config_resetstat dbsize debug_object debug_segfault decr decrby del discard
      echo exec exists expire expireat flushall flushdb get getbit getrange getset
      hdel hexists hget hgetall hincrby hkeys hlen hmget hmset hset hsetnx hvals
      incr incrby info keys lastsave lindex linsert llen lpop lpush lpushx lrange
      lrem lset ltrim mget monitor move mset msetnx multi persist ping
      publish quit randomkey rename renamenx rpop rpoplpush rpush
      rpushx sadd save scard sdiff sdiffstore select set setbit setex setnx
      setrange shutdown sinter sinterstore sismember slaveof smembers smove sort
      spop srandmember srem strlen sunion sunionstore sync ttl type
      unwatch watch zadd zcard zcount zincrby zinterstore zrange
      zrangebyscore zrank zrem zremrangebyrank zremrangebyscore zrevrange
      zrevrangebyscore zrevrank zscore zunionstore
    )],
  });
}