This commit is contained in:
Alwin Berger 2023-10-06 14:34:16 +02:00
parent a76276451c
commit 8d5dce262b
4 changed files with 433 additions and 311 deletions

36
flake.lock generated
View File

@ -16,12 +16,15 @@
} }
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": {
"systems": "systems"
},
"locked": { "locked": {
"lastModified": 1659877975, "lastModified": 1681202837,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", "rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -48,11 +51,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1665296151, "lastModified": 1681358109,
"narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "14ccaaedd95a488dd7ae142757884d8e125b3363", "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -75,11 +78,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1670207212, "lastModified": 1693879802,
"narHash": "sha256-uuKbbv0L+QoXiqO7METP9BihY0F7hJqGdKn7xDVfyFw=", "narHash": "sha256-f+ceOsPpyiuExQIubKkLkyTZZiza1qJQGou4FZu9q1A=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "18823e511bc85ed27bfabe33cccecb389f9aa92d", "rev": "8a1d1bbe4c13eeb518e6159dd122c4f721f7543e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -87,6 +90,21 @@
"repo": "rust-overlay", "repo": "rust-overlay",
"type": "github" "type": "github"
} }
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@ -2,7 +2,7 @@
description = "A devShell example"; description = "A devShell example";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
rust-overlay.url = "github:oxalica/rust-overlay"; rust-overlay.url = "github:oxalica/rust-overlay";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
}; };
@ -55,7 +55,7 @@
]; ];
shellHook = '' shellHook = ''
export CUSTOM_QEMU_DIR=/home/alwin/code/FRET/qemu-libafl-bridge export CUSTOM_QEMU_DIR=~/code/FRET/qemu-libafl-bridge
export CUSTOM_QEMU_NO_BUILD=1 export CUSTOM_QEMU_NO_BUILD=1
# export EMULATION_MODE=systemmode # export EMULATION_MODE=systemmode
# export CPU_TARGET=arm # export CPU_TARGET=arm

View File

@ -1,6 +1,7 @@
use std::path::PathBuf; use std::path::PathBuf;
use std::{env,fs}; use std::{env,fs};
use fret::systemstate::graph::SysGraphFeedbackState; use fret::systemstate::graph::SysGraphFeedbackState;
use petgraph::Direction::{Outgoing, Incoming};
use petgraph::dot::{Dot, Config}; use petgraph::dot::{Dot, Config};
fn main() { fn main() {
@ -12,12 +13,59 @@ fn main() {
let feedbackstate : SysGraphFeedbackState = ron::from_str(&String::from_utf8_lossy(&raw_a)).expect("Can not parse HashMap"); let feedbackstate : SysGraphFeedbackState = ron::from_str(&String::from_utf8_lossy(&raw_a)).expect("Can not parse HashMap");
let newgraph = feedbackstate.graph.map( let mut splits = 0;
|_, n| n.get_taskname(), let mut unites = 0;
let mut g = feedbackstate.graph;
dbg!(g.node_count());
let mut straight = 0;
let mut stub = 0;
let mut done = false;
while !done {
done = true;
for i in g.node_indices() {
let li = g.neighbors_directed(i, Incoming).count();
let lo = g.neighbors_directed(i, Outgoing).count();
if li == 1 && lo == 1 {
let prev = g.neighbors_directed(i, Incoming).into_iter().next().unwrap();
let next = g.neighbors_directed(i, Outgoing).into_iter().next().unwrap();
if prev != next {
g.update_edge(prev, next, ());
g.remove_node(i);
straight+=1;
done = false;
break;
}
}
}
}
for i in g.node_indices() {
let li = g.neighbors_directed(i, Incoming).count();
if li>1 {
unites += 1;
}
let lo = g.neighbors_directed(i, Outgoing).count();
if lo>1 {
splits += 1;
}
if li == 0 || lo == 0 {
// g.remove_node(i);
stub += 1;
}
}
dbg!(splits);
dbg!(unites);
dbg!(straight);
dbg!(stub);
let newgraph = g.map(
|_, n| n.pretty_print(),
// |_, n| format!("{} {:?}",n.get_taskname(),n.get_input_counts().iter().min().unwrap_or(&0)), // |_, n| format!("{} {:?}",n.get_taskname(),n.get_input_counts().iter().min().unwrap_or(&0)),
|_, e| e, |_, e| e,
); );
// let tempg = format!("{:?}",Dot::with_config(&newgraph, &[Config::EdgeNoLabel])); // let tempg = format!("{:?}",Dot::with_config(&newgraph, &[Config::EdgeNoLabel]));
println!("{:?}",Dot::with_config(&newgraph, &[Config::EdgeNoLabel])); let f = format!("{:?}",Dot::with_config(&newgraph, &[Config::EdgeNoLabel]));
let f = f.replace("\\\\n", "\n");
let f = f.replace("\\\"", "");
println!("{}",f);
} }

650
state2gantt/Cargo.lock generated

File diff suppressed because it is too large Load Diff