Files
littlefs/tests/test_rbyd.toml
T
Christopher Haster 024aaeba56 Some small tweaks
- Moved alt encoding 0x1 => 0x4, which can lead to slightly better
  lookup tables, the perturb bit takes the same place as the color bit,
  which means both can be ignored in readonly operations.

- Dropped lfs_rbyd_fetchmatch, asking each lfs_rbyd_fetch to include NULL
  isn't that bad.

New encoding:

  tags:
  iiii iiiiiii iiiiiTT TTTTTTt ttt0tpv
                   ^--------^------^^^- 16-bit id
                            '------|||- 8-bit type2
                                   '||- 5-bit type1
                                    '|- perturb bit
                                     '- valid bit
  llll lllllll lllllll lllllll lllllll
                                     ^- n-bit length

  alts:
  wwww wwwwwww wwwwwww wwwwwww www1dcv
                                 ^^^-^- 28-bit weight
                                  '|-|- color bit
                                   '-|- direction bit
                                     '- valid bit
  jjjj jjjjjjj jjjjjjj jjjjjjj jjjjjjj
                                     ^- n-bit jump
2023-02-12 12:40:19 -06:00

118 lines
3.5 KiB
TOML

# Test this inner rbyd data-structure
[cases.rbyd_commit_fetch]
in = 'lfs.c'
defines.ERASE_VALUE = [0xff, 0x00, 0x1b, -1]
code = '''
lfs_t lfs;
lfs_init(&lfs, cfg) => 0;
lfs_rbyd_t rbyd = {
.block = 0,
.trunk = 0,
.noff = 0,
.rev = 1,
.crc = 0,
.count = 0,
.erased = true,
};
// try an empty commit
lfs_rbyd_t rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with one attribute
rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with two attributes
rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4,
LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4,
NULL))) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// // commit with three attributes
// rbyd_ = rbyd;
// lfs_bd_erase(&lfs, rbyd_.block) => 0;
// lfs_rbyd_commit(&lfs, &rbyd_,
// LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4,
// LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4,
// LFS_MKRATTR(UATTR, 3, 0, &(uint32_t){0xcccccccc}, 4,
// NULL)))) => 0;
// lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
// TODO more?
'''
[cases.rbyd_multi_commit_fetch]
in = 'lfs.c'
defines.ERASE_VALUE = [0xff, 0x00, 0x1b, -1]
code = '''
lfs_t lfs;
lfs_init(&lfs, cfg) => 0;
lfs_rbyd_t rbyd = {
.block = 0,
.trunk = 0,
.noff = 0,
.rev = 1,
.crc = 0,
.count = 0,
.erased = true,
};
// try an empty commit
lfs_rbyd_t rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with one attribute
rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_, NULL) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// commit with two attributes
rbyd_ = rbyd;
lfs_bd_erase(&lfs, rbyd_.block) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
lfs_rbyd_commit(&lfs, &rbyd_,
LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4, NULL)) => 0;
lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block, NULL) => 0;
// // commit with three attributes
// rbyd_ = rbyd;
// lfs_bd_erase(&lfs, rbyd_.block) => 0;
// lfs_rbyd_commit(&lfs, &rbyd_,
// LFS_MKRATTR(UATTR, 1, 0, &(uint32_t){0xaaaaaaaa}, 4, NULL)) => 0;
// lfs_rbyd_commit(&lfs, &rbyd_,
// LFS_MKRATTR(UATTR, 2, 0, &(uint32_t){0xbbbbbbbb}, 4, NULL)) => 0;
// lfs_rbyd_commit(&lfs, &rbyd_,
// LFS_MKRATTR(UATTR, 3, 0, &(uint32_t){0xcccccccc}, 4, NULL)) => 0;
// lfs_rbyd_fetch(&lfs, &rbyd_, rbyd.block) => 0;
// TODO more?
'''
# [cases.rbyd_commit_lookup]
# [cases.rbyd_multi_commit_lookup]
# [cases.rbyd_commit_fetchmatch]
# [cases.rbyd_multi_commit_fetchmatch]
# [cases.rbyd_commit_traverse]
# [cases.rbyd_multi_commit_traverse]