Import Mbed OS hard-float snapshot

This commit is contained in:
Beslan
2026-06-01 20:15:04 +03:00
commit d3738e2f89
16278 changed files with 10628036 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
all: test_dirs test_files test_seek test_parallel
test_%: ../../littlefs/tests/test_%.sh
cp $< $(notdir $<)
sed -i -e 's/tests\//.\//' -e 's/echo/.\/echo.py/' $(notdir $<)
./clean.sh
ln -f -s replacements_mbed.yml replacements.yml
./$(notdir $<)
mkdir -p ../filesystem/$(patsubst test_%,%,$@)
cp main.cpp ../filesystem/$(patsubst test_%,%,$@)/main.cpp
./clean.sh
ln -f -s replacements_retarget.yml replacements.yml
./$(notdir $<)
mkdir -p ../filesystem_retarget/$(patsubst test_%,%,$@)
cp main.cpp ../filesystem_retarget/$(patsubst test_%,%,$@)/main.cpp
clean:
./clean.sh

View File

@@ -0,0 +1,4 @@
#!/bin/bash
rm -f main.cpp
rm -f template_all_names.txt

View File

@@ -0,0 +1,34 @@
#!/usr/bin/env python
import re
import sys
import subprocess
import os
def main(*args):
desc = ' '.join(args).strip('-= ')
name = 'test_' + desc.lower().replace(' ', '_').replace('-', '_')
exists = os.path.isfile('template_all_names.txt')
with open('template_all_names.txt', 'a') as file:
file.write(name + '\n')
file.write(desc + '\n')
with open('template_unit.fmt') as file:
template = file.read()
template_header, template_footer = template.split('{test}')
if exists:
with open('main.cpp', 'a') as file:
file.write(template_footer.format(
test_name=name))
if name != 'test_results':
with open('main.cpp', 'a') as file:
file.write(template_header.format(
test_name=name))
if __name__ == "__main__":
main(*sys.argv[1:])

View File

@@ -0,0 +1,33 @@
- ['lfs2_format\(&lfs2, &cfg\)', 'MBED_TEST_FILESYSTEM::format(&bd)']
- ['lfs2_mount\(&lfs2, &cfg\)', 'fs.mount(&bd)']
- ['lfs2_unmount\(&lfs2\)', 'fs.unmount()']
- ['lfs2_mkdir\(&lfs2, (.*)\)', 'fs.mkdir(\1, 0777)']
- ['lfs2_remove\(&lfs2, (.*)\)', 'fs.remove(\1)']
- ['lfs2_rename\(&lfs2, (.*), ?(.*)\)', 'fs.rename(\1, \2)']
- ['lfs2_dir_open\(&lfs2, &dir\[(.*)\], ?(.*)\)', 'dir[\1].open(&fs, \2)']
- ['lfs2_dir_close\(&lfs2, &dir\[(.*)\]\)', 'dir[\1].close()']
- ['lfs2_dir_read\(&lfs2, &dir\[(.*)\], &info\)', 'dir[\1].read(&ent)']
- ['lfs2_dir_seek\(&lfs2, &dir\[(.*)\], ?(.*)\).*;', 'dir[\1].seek(\2);'] # no dir errors
- ['lfs2_dir_rewind\(&lfs2, &dir\[(.*)\]\).*;', 'dir[\1].rewind();'] # no dir errors
- ['lfs2_dir_tell\(&lfs2, &dir\[(.*)\]\)', 'dir[\1].tell()']
- ['lfs2_file_open\(&lfs2, &file\[(.*)\], ?(.*)\)', 'file[\1].open(&fs, \2)']
- ['lfs2_file_close\(&lfs2, &file\[(.*)\]\)', 'file[\1].close()']
- ['lfs2_file_sync\(&lfs2, &file\[(.*)\]\)', 'file[\1].sync()']
- ['lfs2_file_write\(&lfs2, &file\[(.*)\], ?(.*), (.*)\)', 'file[\1].write(\2, \3)']
- ['lfs2_file_read\(&lfs2, &file\[(.*)\], ?(.*), (.*)\)', 'file[\1].read(\2, \3)']
- ['lfs2_file_seek\(&lfs2, &file\[(.*)\], ?(.*)\)', 'file[\1].seek(\2)']
- ['lfs2_file_tell\(&lfs2, &file\[(.*)\]\)', 'file[\1].tell()']
- ['lfs2_file_rewind\(&lfs2, &file\[(.*)\]\).*;', 'file[\1].rewind();'] # no errors
- ['lfs2_file_size\(&lfs2, &file\[(.*)\]\)', 'file[\1].size()']
- ['LFS2_TYPE_([A-Z]+)', 'DT_\1']
- ['LFS2_O_([A-Z]+)', 'O_\1']
- ['LFS2_SEEK_([A-Z]+)', 'SEEK_\1']
- ['LFS2_ERR_([A-Z]+)', '-E\1']
- ['lfs2_(s?)size_t', '\1size_t']
- ['lfs2_soff_t', 'off_t']
- ['info\.name', 'ent.d_name']
- ['info\.type', 'ent.d_type']
- ['^.*info\.size.*$', ''] # dirent sizes not supported

View File

@@ -0,0 +1,37 @@
- ['lfs2_format\(&lfs2, &cfg\)', 'MBED_TEST_FILESYSTEM::format(&bd)']
- ['lfs2_mount\(&lfs2, &cfg\)', 'fs.mount(&bd)']
- ['lfs2_unmount\(&lfs2\)', 'fs.unmount()']
- ['lfs2_mkdir\(&lfs2, (.*)\)', 'mkdir("/fs/" \1, 0777)']
- ['lfs2_remove\(&lfs2, (.*)\)', 'remove("/fs/" \1)']
- ['lfs2_rename\(&lfs2, (.*), ?(.*)\)', 'rename("/fs/" \1, "/fs/" \2)']
- ['lfs2_dir_open\(&lfs2, &dir\[(.*)\], ?(.*)\)', '!((dd[\1] = opendir("/fs/" \2)) != NULL)']
- ['lfs2_dir_close\(&lfs2, &dir\[(.*)\]\)', 'closedir(dd[\1])']
- ['lfs2_dir_read\(&lfs2, &dir\[(.*)\], &info\)', '((ed = readdir(dd[\1])) != NULL)']
- ['lfs2_dir_seek\(&lfs2, &dir\[(.*)\], ?(.*)\).*;', 'seekdir(dd[\1], \2);'] # no dir errors
- ['lfs2_dir_rewind\(&lfs2, &dir\[(.*)\]\).*;', 'rewinddir(dd[\1]);'] # no dir errors
- ['lfs2_dir_tell\(&lfs2, &dir\[(.*)\]\)', 'telldir(dd[\1])']
- ['lfs2_file_open\(&lfs2, &file\[(.*)\], ?(.*)\)', '!((fd[\1] = fopen("/fs/" \2)) != NULL)']
- ['lfs2_file_close\(&lfs2, &file\[(.*)\]\)', 'fclose(fd[\1])']
- ['lfs2_file_sync\(&lfs2, &file\[(.*)\]\)', 'fflush(fd[\1])']
- ['lfs2_file_write\(&lfs2, &file\[(.*)\], ?(.*), (.*)\)', 'fwrite(\2, 1, \3, fd[\1])']
- ['lfs2_file_read\(&lfs2, &file\[(.*)\], ?(.*), (.*)\)', 'fread(\2, 1, \3, fd[\1])']
- ['lfs2_file_tell\(&lfs2, &file\[(.*)\]\)', 'ftell(fd[\1])']
- ['lfs2_file_rewind\(&lfs2, &file\[(.*)\]\).*;', 'rewind(fd[\1]);'] # no errors
- ['LFS2_TYPE_([A-Z]+)', 'DT_\1']
- ['LFS2_SEEK_([A-Z]+)', 'SEEK_\1']
- ['LFS2_ERR_([A-Z]+)', '-E\1']
- ['lfs2_(s?)size_t', '\1size_t']
- ['lfs2_soff_t', 'off_t']
- ['info\.name', 'ed->d_name']
- ['info\.type', 'ed->d_type']
- ['^.*info\.size.*$', ''] # dirent sizes not supported
- ['LFS2_O_WRONLY \| LFS2_O_CREAT \| LFS2_O_APPEND', '"ab"']
- ['LFS2_O_WRONLY \| LFS2_O_TRUNC', '"wb"']
- ['LFS2_O_CREAT \| LFS2_O_WRONLY', '"wb"']
- ['LFS2_O_WRONLY \| LFS2_O_CREAT', '"wb"']
- ['LFS2_O_RDONLY', '"rb"']
- ['LFS2_O_RDWR', '"r+b"']

View File

@@ -0,0 +1,33 @@
#!/usr/bin/env python
import re
import sys
import subprocess
import os
def main(*args):
with open('main.cpp') as file:
tests = file.read()
cases = []
with open('template_all_names.txt') as file:
while True:
name = file.readline().strip('\n')
desc = file.readline().strip('\n')
if name == 'test_results':
break
cases.append((name, desc))
with open('template_wrapper.fmt') as file:
template = file.read()
with open('main.cpp', 'w') as file:
file.write(template.format(
tests=tests,
test_cases='\n'.join(
4*' '+'Case("{desc}", {name}),'.format(
name=name, desc=desc) for name, desc in cases)))
if __name__ == "__main__":
main(*sys.argv[1:])

View File

@@ -0,0 +1,4 @@
{{
{test}
}}

View File

@@ -0,0 +1,8 @@
void {test_name}() {{
int res = bd.init();
TEST_ASSERT_EQUAL(0, res);
{test}
res = bd.deinit();
TEST_ASSERT_EQUAL(0, res);
}}

View File

@@ -0,0 +1,86 @@
#include "mbed.h"
#include "greentea-client/test_env.h"
#include "unity.h"
#include "utest.h"
#include <stdlib.h>
#include <errno.h>
using namespace utest::v1;
// test configuration
#ifndef MBED_TEST_FILESYSTEM
#define MBED_TEST_FILESYSTEM LittleFileSystem2
#endif
#ifndef MBED_TEST_FILESYSTEM_DECL
#define MBED_TEST_FILESYSTEM_DECL MBED_TEST_FILESYSTEM fs("fs")
#endif
#ifndef MBED_TEST_BLOCKDEVICE
#define MBED_TEST_BLOCKDEVICE SPIFBlockDevice
#define MBED_TEST_BLOCKDEVICE_DECL SPIFBlockDevice bd(PTE2, PTE4, PTE1, PTE5)
#endif
#ifndef MBED_TEST_BLOCKDEVICE_DECL
#define MBED_TEST_BLOCKDEVICE_DECL MBED_TEST_BLOCKDEVICE bd
#endif
#ifndef MBED_TEST_FILES
#define MBED_TEST_FILES 4
#endif
#ifndef MBED_TEST_DIRS
#define MBED_TEST_DIRS 4
#endif
#ifndef MBED_TEST_BUFFER
#define MBED_TEST_BUFFER 8192
#endif
#ifndef MBED_TEST_TIMEOUT
#define MBED_TEST_TIMEOUT 120
#endif
// declarations
#define STRINGIZE(x) STRINGIZE2(x)
#define STRINGIZE2(x) #x
#define INCLUDE(x) STRINGIZE(x.h)
#include INCLUDE(MBED_TEST_FILESYSTEM)
#include INCLUDE(MBED_TEST_BLOCKDEVICE)
MBED_TEST_FILESYSTEM_DECL;
MBED_TEST_BLOCKDEVICE_DECL;
Dir dir[MBED_TEST_DIRS];
File file[MBED_TEST_FILES];
DIR *dd[MBED_TEST_DIRS];
FILE *fd[MBED_TEST_FILES];
struct dirent ent;
struct dirent *ed;
size_t size;
uint8_t buffer[MBED_TEST_BUFFER];
uint8_t rbuffer[MBED_TEST_BUFFER];
uint8_t wbuffer[MBED_TEST_BUFFER];
// tests
{tests}
// test setup
utest::v1::status_t test_setup(const size_t number_of_cases) {{
GREENTEA_SETUP(MBED_TEST_TIMEOUT, "default_auto");
return verbose_test_setup_handler(number_of_cases);
}}
Case cases[] = {{
{test_cases}
}};
Specification specification(test_setup, cases);
int main() {{
return !Harness::run(specification);
}}

View File

@@ -0,0 +1,48 @@
#!/usr/bin/env python
import re
import sys
import subprocess
import os
import yaml
def generate(test):
with open('replacements.yml') as file:
replacements = yaml.load(file)
lines = []
for line in re.split('(?<=[;{}])\n', test.read()):
for pattern, replacement in replacements:
line = re.sub(pattern, replacement, line, 0, re.DOTALL | re.MULTILINE)
match = re.match('(?: *\n)*( *)(.*)=>(.*);', line, re.DOTALL | re.MULTILINE)
if match:
tab, test, expect = match.groups()
lines.append(tab+'res = {test};'.format(test=test.strip()))
lines.append(tab+'TEST_ASSERT_EQUAL({expect}, res);'.format(
name=re.match('\w*', test.strip()).group(),
expect=expect.strip()))
else:
lines.append(line)
lines = lines[:-1]
with open('template_subunit.fmt') as file:
template = file.read()
with open('main.cpp', 'a') as file:
file.write(template.format(
test=('\n'.join(
4*' '+line.replace('\n', '\n'+4*' ')
for line in lines))))
def main(test=None):
if test and not test.startswith('-'):
with open(test) as file:
generate(file)
else:
generate(sys.stdin)
if __name__ == "__main__":
main(*sys.argv[1:])