blob: ad57449da12157b3202001dc5408b5d159ed4e0d [file] [log] [blame] [edit]
#!/usr/bin/perl -T
use Test::More tests => 39;
use Slurm qw(:constant);
my ($bm, $bm2, $rc, $cnt, $pos, $sum, $size, $ia, $str);
# 1
$bm = Slurm::Bitstr::alloc(16);
ok(ref($bm) eq "Slurm::Bitstr", "bit alloc");
# 2
$bm->realloc(32);
ok($bm->size() == 32, "bit realloc");
# 3
$bm2 = $bm->copy();
ok(ref($bm2) eq "Slurm::Bitstr", "bit copy");
# 4
$rc = $bm->test(13);
ok (!$rc, "bit test");
# 5
$bm->set(13);
$rc = $bm->test(13);
ok ($rc, "bit set");
# 6
$bm->clear(13);
$rc = $bm->test(13);
ok (!$rc, "bit clear");
# 7
$bm->nset(13, 28);
$rc = $bm->test(16);
ok($rc, "bit nset");
#8
$bm->nclear(22, 30);
$rc = $bm->test(26);
ok(!$rc, "bit nset");
# $bm fmt: "13-21"
# $bm2 fmt: ""
# 9
$pos = $bm->ffc();
ok($pos == 0, "bit ffc") or diag("ffc: $pos");
# 10
$pos = $bm->ffs();
ok($pos == 13, "bit ffs") or diag("ffs: $pos");
# 11
$pos = $bm->fls();
ok($pos == 21, "bit fls") or diag("fls: $pos");
# 12
$pos = $bm->nffc(3);
ok($pos == 0, "bit nffc") or diag("nffc: $pos");
# 13
$pos = $bm->nffs(20);
ok($pos == -1, "bit nffs") or diag("nffs: $pos");
# 14
$pos = $bm->noc(5, 16);
ok($pos == 22, "bit noc") or diag("noc: $pos");
# 15
$size = $bm->size();
ok($size == 32, "bit size") or diag("size: $size");
# 16
$bm->and($bm2);
$cnt = $bm->set_count();
ok($cnt == 0, "bit and") or diag("and: $cnt");
# 17
$bm->not();
$cnt = $bm->set_count();
ok($cnt == 32, "bit not") or diag("not: $cnt");
# 18
$bm->nclear(16, 31);
$bm2->nset(16, 23);
$bm->or($bm2);
$cnt = $bm->set_count();
ok($cnt == 24, "bit or") or diag("or: $cnt");
# $bm2 fmt: "16-23"
# 19
$bm->copybits($bm2);
$cnt = $bm->set_count();
ok($cnt == 8, "bit copybits") or diag("copybits: $cnt");
# 20
$cnt = $bm->set_count();
ok($cnt == 8, "bit set count") or diag("set_count: $cnt");
# 21
$cnt = $bm->clear_count();
ok($cnt == 24, "bit clear count") or diag("clear_count: $cnt");
# 22
$cnt = $bm->nset_max_count();
ok($cnt == 8, "bit nset max count") or diag("nset_max_count: $cnt");
# 23
$ia = [];
$ia->[$_] = $_ for (16 .. 23);
$sum = $bm->int_and_set_count($ia);
ok($sum == 156, "bit int and set count") or diag("nset_and_count: $sum");
# $bm fmt: "16-23"
# 24
$bm2 = $bm->rotate_copy(16, 40);
$size = $bm2->size();
$pos = $bm2->ffs();
ok($size == 40 && $pos == 32, "bit rotate copy") or diag("rotate_copy: $size, $pos");
# 25
$bm->rotate(-8);
$pos = $bm->ffs();
ok($pos == 8, "bit rotate") or diag("rotate: $pos");
# $bm fmt: "8-15"
# 26
$str = $bm->fmt();
ok ($str eq "8-15", "bit fmt") or diag("fmt: $str");
# 27
$bm->unfmt("16-23");
$rc = $bm->test(13);
ok (!$rc, "bit unfmt");
# $bm fmt: "16-23"
# 28
$ia = Slurm::Bitstr::fmt2int($str);
$size = @$ia;
ok($size == 2 && $ia->[0] == 8 && $ia->[1] == 15, "bit fmt2int") or diag("fmt2int: $size, $ia->[0], $ia->[1]");
# 29
$str = $bm->fmt_hexmask();
ok($str eq "0x00FF0000", "bit fmt hexmask") or diag("fmt_hexmask: $str");
# 30
$rc = $bm->unfmt_hexmask("0x000000F0");
$cnt = $bm->set_count();
ok($rc == 0 && $cnt == 4, "bit unfmt hexmask") or diag("unfmt_hexmask: $rc, $cnt");
# $bm fmt: "4-7"
# 31
$str = $bm->fmt_binmask();
ok($str eq "00000000000000000000000011110000", "bit fmt binmask") or diag("fmt_binmask: $str");
# 32
$rc = $bm->unfmt_binmask("0000000111111110000000011110001");
$cnt = $bm->set_count();
ok($rc == 0 && $cnt == 13, "bit unfmt binmask") or diag("unfmt_binmask: $rc, $cnt");
# $bm fmt: "0-0,4-7,16-23"
# 33
$bm->fill_gaps();
$cnt = $bm->set_count();
ok($cnt == 24, "bit fill gaps"), or diag("fill_gaps: $cnt");
# $bm fmt: "0-23"
# 34
$bm2 = $bm->rotate_copy(16, 32);
$rc = $bm->super_set($bm2);
ok (!$rc, "bit super set") or diag("super_set: $rc");
# $bm fmt: "0-23"
# $bm2 fmt: "0-7,16-31"
# 35
$cnt = $bm->overlap($bm2);
ok($cnt == 16, "bit overlap") or diag("overlap: $cnt");
# 36
$rc = $bm->equal($bm2);
ok(!$rc, "bit equal") or diag("equal: $rc");
# 37
$bm2 = $bm->pick_cnt(8);
ok($bm2 && $bm2->set_count() == 8, "pick cnt") or diag("pick_cnt: $cnt");
# 38
$bm->unfmt("3-5,12-23");
$pos = $bm->get_bit_num(8);
ok($pos = 17, "bit get bit num") or diag("get_bit_num: $pos");
# 39
$bm->unfmt("3-5,12-23");
$cnt = $bm->get_pos_num(12);
ok($cnt == 3, "bit get pos num") or diag("get_pos_num: $cnt");