20 个版本 (破坏性更新)

0.95.0 2023年3月12日
0.91.0 2022年12月25日
0.90.0 2022年11月25日
0.60.0 2022年5月24日
0.30.0 2020年11月15日

#fibonacci 中排名 30

每月下载 43

MIT 许可证

105KB
339

Flow Samples

此包包含在编译器和运行时开发过程中开发的多个示例 'flows',用于驱动项目开发并展示其工作。

它们还充当回归测试的一种类型,以确保我们没有破坏这些示例所依赖的任何语义。

它们从极其简单的 "hello-world" 示例到更复杂的示例,如生成斐波那契数列或曼德尔布罗特集图像。

每个示例的结构

每个示例目录包含以下内容

  • 一个 DESCRIPTION.md 文件,该文件
    • 描述了 Flow 的功能
    • 列出了此示例使用并演示的 flow 功能
  • 一个 root.toml 文件,它是 flow 描述的根文件
  • 每个示例的自动化测试中使用的文件
    • test_arguments.txt,在运行 flow 时传递给它的参数
    • test_input.txt,在运行 flow 时提供的输入
    • expected_output.txt,flow 在使用 text_arguments.txt 和输入 test_input.txt 调用时预期产生的输出

编译示例

现在,示例集已转换为具有自定义构建脚本的 Rust crate。

在Cargo.toml中没有声明对其他crate的依赖(因为你目前只能声明对库的依赖,而不能对二进制文件进行依赖声明),但是为了构建、测试和运行此crate/文件夹,你需要安装flowcflowr,并且将它们添加到$PATH,以便构建脚本能够找到它们。

使用cargo build -p flowsamples会导致构建脚本运行,并使用flowc编译器就地编译样本。

运行样本

使用cargo run -p flowsamples会导致main.rs中的样本运行器运行。它会查找样本文件夹中的子文件夹,并在其中执行样本。

在运行时,它使用以下内容:

  • test.arguments - 在执行flow时传递给命令行的参数
  • test.input - 要发送到样本流以使用STDIN的测试输入

输出发送到标准输出。

要仅运行特定的样本,请使用cargo run -p flowsamples {sample-name}

测试样本

你可以使用cargo test -p flowsamples测试所有样本,它会依次运行每个样本,并使用预定义的参数和标准输入。

它还会收集标准输出、标准错误和生成的文件,并通过将它们与与包一起分发的先前生成的内容进行比较来检查其正确性。

  • 如果在test.err文件中发现任何标准错误,则测试将失败。
  • 如果没有标准错误,则它将比较在test.output中捕获的标准输出与expected.output,如果有差异,则失败。
  • 如果存在expected.file,则它将其与test.file中的文件输出进行比较,如果有任何与预期文件的差异,则失败。
cargo test -p flowsamples 
    Finished test [unoptimized + debuginfo] target(s) in 0.11s
     Running target/debug/deps/samples-9e024e2c420db146

running 16 tests
test test::test_all_samples ... ignored
test test::test_args ... ok
test test::test_arrays ... ok
test test::test_factorial ... ok
test test::test_fibonacci ... ok
test test::test_hello_world ... ok
test test::test_mandlebrot ... ok
test test::test_matrix_mult ... ok
test test::test_pipeline ... ok
test test::test_prime ... ok
test test::test_primitives ... ok
test test::test_sequence ... ok
test test::test_sequence_of_sequences ... ok
test test::test_reverse_echo ... ok
test test::test_router ... ok
test test::test_tokenizer ... ok

test result: ok. 15 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out

注意:直到可以同时运行多个客户端/服务器对来运行流,我们需要将测试框架限制为一次只运行一个测试,否则默认情况下它将同时运行多个测试,其中一些将失败。

注意:目前,为了使进度更明显,每个样本都手动在samples/main.rs中添加了一个测试,因此对于新的样本,作者需要添加一个测试。

要测试单个样本,请使用cargo test -p flowsamples {test-name}

cargo test -p flowsamples test_factorial
    Finished test [unoptimized + debuginfo] target(s) in 0.12s
     Running target/debug/deps/samples-9e024e2c420db146

running 1 test
test test::test_factorial ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 15 filtered out

默认工作区成员crate

samples crate是flow工作区项目的一个default-members,因此如果没有提供特定的包,就会使用它,因此样本也可以使用以下方式构建和运行:

  • cargo build:使用flowc编译样本
  • cargo run:使用flowr运行样本
  • cargo test:使用flowr运行示例并检查生成的输出是否正确

随着时间的推移,工作空间中添加了其他default-members,这些命令可能会执行其他操作,所以请注意,如果您只想运行示例,上面的-p samples选项会更安全。

flowsamples可执行文件

与库一起安装的还有一个名为flowsamples的可执行文件(二进制文件),如果没有任何参数运行,将运行所有示例。您可以提供示例名称(示例所在的samples文件夹的名称)来仅运行该示例。

开发新示例

要开发新示例,只需在'samples'下创建一个新的名为您的示例名称的文件夹。

添加root.toml以及任何其他包含的流程并描述它们。

添加一个DESCRIPTION.md文件,描述该示例的功能以及它使用的flow特性。

在指南的"示例"部分添加一个条目,该条目将包含上面的DESCRIPTION.md文件。

特性

flowsamples没有可启用特性

依赖项

~375–560KB