mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-10 09:43:30 +01:00
62 lines
1.3 KiB
Nix
62 lines
1.3 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
name = "owi";
|
|
|
|
meta.maintainers = with lib.maintainers; [ ethancedwards8 ];
|
|
|
|
nodes.machine = {
|
|
environment.systemPackages = with pkgs; [ owi ];
|
|
|
|
environment.etc."owipass.rs".source = pkgs.writeText "owi.rs" ''
|
|
use owi_sym::Symbolic;
|
|
|
|
fn mean_one(x: i32, y: i32) -> i32 {
|
|
(x + y)/2
|
|
}
|
|
|
|
fn mean_two(x: i32, y: i32) -> i32 {
|
|
(y + x)/2
|
|
}
|
|
|
|
fn main() {
|
|
let x = i32::symbol();
|
|
let y = i32::symbol();
|
|
// proving the commutative property of addition!
|
|
owi_sym::assert(mean_one(x, y) == mean_two(x, y))
|
|
}
|
|
'';
|
|
|
|
environment.etc."owifail.rs".source = pkgs.writeText "owi.rs" ''
|
|
use owi_sym::Symbolic;
|
|
|
|
fn mean_wrong(x: i32, y: i32) -> i32 {
|
|
(x + y) / 2
|
|
}
|
|
|
|
fn mean_correct(x: i32, y: i32) -> i32 {
|
|
(x & y) + ((x ^ y) >> 1)
|
|
}
|
|
|
|
fn main() {
|
|
let x = i32::symbol();
|
|
let y = i32::symbol();
|
|
owi_sym::assert(mean_wrong(x, y) == mean_correct(x, y))
|
|
}
|
|
'';
|
|
};
|
|
|
|
testScript =
|
|
{ nodes, ... }:
|
|
''
|
|
start_all()
|
|
|
|
# testing
|
|
machine.succeed("owi rust --fail-on-assertion-only /etc/owipass.rs")
|
|
machine.fail("owi rust --fail-on-assertion-only /etc/owifail.rs")
|
|
'';
|
|
}
|