diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 7269f13..1a9d248 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -13,14 +13,9 @@
-
-
-
-
-
-
+
@@ -113,7 +108,7 @@
-
+
@@ -373,7 +368,8 @@
-
+
+
diff --git a/src/interfaces.rs b/src/interfaces.rs
index 4dd8453..ba3dfce 100644
--- a/src/interfaces.rs
+++ b/src/interfaces.rs
@@ -7,7 +7,7 @@ use std::cell::RefCell;
use crate::solvers::node_matrix_solver::NodeMatrixSolver;
use crate::solvers::node_step_solver::NodeStepSolver;
use crate::solvers::solver::Solver;
-use crate::util::create_mna_container;
+use crate::util::{create_basic_container, create_basic_supermesh_container, create_basic_supernode_container, create_mna_container, create_mna_container_2};
use serde::{Deserialize, Serialize};
use std::rc::Rc;
use wasm_bindgen::prelude::*;
@@ -79,64 +79,29 @@ pub fn solve(matrix: bool, nodal: bool, container_js: JsValue) -> Result String {
+pub fn return_solved_step_example() -> Result {
let mut c: Container = create_mna_container();
c.create_nodes();
c.create_super_nodes();
let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
- let steps = solver.solve().unwrap();
- serde_json::to_string(&steps).unwrap()
-}
-
-#[wasm_bindgen_test]
-pub fn test_serialize_steps() {
- let mut c: Container = create_mna_container();
- c.create_nodes();
- c.create_super_nodes();
- let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
-
- let steps = solver.solve();
- match steps {
- Ok(x) => {
- let result = serde_json::to_string(&x).unwrap();
- assert!(result.len() > 1);
- // assert_eq!(result, "Some String".to_string());
- }
- Err(_) => {
- assert!(false);
- }
+ let steps = solver.solve()?;
+ if let Ok(x) = serde_json::to_string(&steps) {
+ return Ok(x);
}
-}
-
-#[wasm_bindgen_test]
-pub fn test_solver_select() {
- let mut c: Container = create_mna_container();
- c.create_nodes();
- c.create_super_nodes();
- let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
-
- let steps = solver.solve();
- match steps {
- Ok(x) => {
- let result = serde_json::to_string(&x).unwrap();
- assert!(result.len() > 1);
- // assert_eq!(result, "Some String".to_string());
- }
- Err(_) => {
- assert!(false);
- }
- }
-}
+ Err(JsValue::from_str("Steps Errored out."))}
#[wasm_bindgen]
-pub fn return_solved_matrix_example() -> String {
+pub fn return_solved_matrix_example() -> Result {
let mut c: Container = create_mna_container();
c.create_nodes();
c.create_super_nodes();
let mut solver: NodeMatrixSolver = Solver::new(Rc::new(RefCell::new(c)));
- let steps = solver.solve().unwrap();
- serde_json::to_string(&steps).unwrap()
+ let steps = solver.solve()?;
+ if let Ok(x) = serde_json::to_string(&steps) {
+ return Ok(x);
+ }
+ Err(JsValue::from_str("Steps Errored out."))
}
#[wasm_bindgen]
@@ -145,11 +110,40 @@ pub fn test_wasm() -> String {
}
#[wasm_bindgen]
-pub fn solve_mna_container() -> Vec {
+pub fn solve_mna_container() -> Result, JsValue> {
let c: Container = create_mna_container();
let mut solver: NodeMatrixSolver = Solver::new(Rc::new(RefCell::new(c)));
- let x = solver.solve().unwrap();
- x.into_iter().map(JsValue::from).collect()
+ let x = solver.solve()?;
+ let js_steps: Vec = x.into_iter().map(JsValue::from).collect();
+ Ok(js_steps)
+}
+
+#[wasm_bindgen]
+pub fn solve_test_container(container_id: i32) -> Result {
+ let c: Container = match container_id {
+ 0 => create_basic_container(),
+ 1 => create_basic_supernode_container(),
+ 2 => create_basic_supermesh_container(),
+ 3 => create_mna_container(),
+ 4 => create_mna_container_2(),
+ _ => create_basic_container(),
+ };
+ let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
+ let steps = solver.solve()?;
+ serde_json::to_string(&steps).unwrap();
+ if let Ok(x) = serde_json::to_string(&steps) {
+ return Ok(x);
+ }
+ Err(JsValue::from_str("Steps Errored out."))
+}
+
+#[wasm_bindgen]
+pub fn return_result(x: bool) -> Result {
+ if x {
+ Ok("Success".to_string())
+ } else {
+ Err(JsValue::from("Failure AHAHAHAHHA 🦞🦞🦞🦞".to_string()))
+ }
}
impl From> for Container {
@@ -171,61 +165,3 @@ impl From for Container {
container
}
}
-
-pub fn simplify() {}
-
-#[wasm_bindgen_test]
-fn test_container_wasm() {
- let c: Vec = vec![];
- let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
- let y: Vec = serde_wasm_bindgen::from_value(x).unwrap();
- assert_eq!(c, y);
-}
-
-#[wasm_bindgen_test]
-fn test_load() {
- let c = ContainerSetup { elements: vec![] };
- let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
- assert_eq!(
- load_wasm_container(x),
- Err(Multiple(vec![
- Known("No Sources".parse().unwrap()),
- Known("Multiple Grounds".parse().unwrap())
- ]))
- );
-
- let c = ContainerSetup {
- elements: vec![Element::new(Ground, 0., vec![], vec![])],
- };
- let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
- assert!(load_wasm_container(x).is_err());
-
- let c = ContainerSetup {
- elements: vec![
- Element::new(Ground, 0., vec![1], vec![]),
- Element::new(Ground, 0., vec![0], vec![]),
- ],
- };
- let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
- assert_eq!(
- load_wasm_container(x),
- Err(Multiple(vec![
- Known("No Sources".to_string()),
- Known("Multiple Grounds".to_string())
- ]))
- );
-
- let c = ContainerSetup {
- elements: vec![
- Element::new(Ground, 0., vec![1, 3], vec![]),
- Element::new(VoltageSrc, 1.0, vec![3, 0], vec![2]),
- Element::new(Resistor, 1.0, vec![1], vec![3]),
- Element::new(Resistor, 1.0, vec![2], vec![1, 0]),
- ],
- };
- let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
- assert_eq!(
- load_wasm_container(x),
- Ok("Loaded Successfully".to_string())
- );
-}
diff --git a/src/lib.rs b/src/lib.rs
index ff632ae..1323799 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,8 +1,8 @@
pub mod component;
pub mod container;
-mod elements;
+pub mod elements;
pub mod interfaces;
pub mod solvers;
pub mod tools;
-mod util;
+pub mod util;
pub mod validation;
diff --git a/tests/tests.rs b/tests/tests.rs
index 16433e3..58b0850 100644
--- a/tests/tests.rs
+++ b/tests/tests.rs
@@ -1,12 +1,19 @@
+use std::cell::RefCell;
+use std::rc::Rc;
+
+use wasm_bindgen::JsValue;
+use wasm_bindgen_test::wasm_bindgen_test;
+
+use circuit_solver_algorithms::component::Component::{Ground, Resistor, VoltageSrc};
use circuit_solver_algorithms::container::Container;
-use circuit_solver_algorithms::interfaces::{get_tools, ContainerSetup};
+use circuit_solver_algorithms::elements::Element;
+use circuit_solver_algorithms::interfaces::{ContainerSetup, get_tools, load_wasm_container, solve_test_container};
use circuit_solver_algorithms::solvers::node_step_solver::NodeStepSolver;
use circuit_solver_algorithms::solvers::solver::{Solver, Step};
-use circuit_solver_algorithms::validation::Status::Valid;
+use circuit_solver_algorithms::util::create_mna_container;
use circuit_solver_algorithms::validation::{StatusError, Validation};
-use std::cell::RefCell;
-use std::rc::Rc;
-use wasm_bindgen_test::wasm_bindgen_test;
+use circuit_solver_algorithms::validation::Status::Valid;
+use circuit_solver_algorithms::validation::StatusError::{Known, Multiple};
#[wasm_bindgen_test]
fn test_validateable_containers() {
@@ -29,6 +36,46 @@ fn test_validateable_containers() {
)
}
+
+#[wasm_bindgen_test]
+pub fn test_every_container() {
+ for i in 0..5 {
+ let steps = solve_test_container(i);
+
+ }
+
+
+}
+
+#[wasm_bindgen_test]
+pub fn test_result_wasm() {
+ let a: Result = Ok("Some String".to_string());
+ let x: JsValue = serde_wasm_bindgen::to_value(&a).unwrap();
+
+}
+
+
+
+#[wasm_bindgen_test]
+pub fn test_solver_select() {
+ let mut c: Container = create_mna_container();
+ c.create_nodes();
+ c.create_super_nodes();
+ let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
+
+ let steps = solver.solve();
+ match steps {
+ Ok(x) => {
+ let result = serde_json::to_string(&x).unwrap();
+ assert!(result.len() > 1);
+ // assert_eq!(result, "Some String".to_string());
+ }
+ Err(_) => {
+ assert!(false);
+ }
+ }
+}
+
#[wasm_bindgen_test]
pub fn test_get_tools() {
let raw_json: &str = include_str!("./data/mna_container/input.json");
@@ -44,6 +91,83 @@ pub fn test_get_tools() {
assert_eq!(nodes.unwrap(), "[[5,2],[2,4,3],[1,4]]")
}
+
+#[wasm_bindgen_test]
+pub fn test_serialize_steps() {
+ let mut c: Container = create_mna_container();
+ c.create_nodes();
+ c.create_super_nodes();
+ let mut solver: NodeStepSolver = Solver::new(Rc::new(RefCell::new(c)));
+
+ let steps = solver.solve();
+ match steps {
+ Ok(x) => {
+ let result = serde_json::to_string(&x).unwrap();
+ assert!(result.len() > 1);
+ }
+ Err(_) => {
+ assert!(false);
+ }
+ }
+}
+
+
+#[wasm_bindgen_test]
+fn test_container_wasm() {
+ let c: Vec = vec![];
+ let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
+ let y: Vec = serde_wasm_bindgen::from_value(x).unwrap();
+ assert_eq!(c, y);
+}
+
+#[wasm_bindgen_test]
+fn test_load() {
+ let c = ContainerSetup { elements: vec![] };
+ let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
+ assert_eq!(
+ load_wasm_container(x),
+ Err(Multiple(vec![
+ Known("No Sources".parse().unwrap()),
+ Known("Multiple Grounds".parse().unwrap()),
+ ]))
+ );
+
+ let c = ContainerSetup {
+ elements: vec![Element::new(Ground, 0., vec![], vec![])],
+ };
+ let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
+ assert!(load_wasm_container(x).is_err());
+
+ let c = ContainerSetup {
+ elements: vec![
+ Element::new(Ground, 0., vec![1], vec![]),
+ Element::new(Ground, 0., vec![0], vec![]),
+ ],
+ };
+ let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
+ assert_eq!(
+ load_wasm_container(x),
+ Err(Multiple(vec![
+ Known("No Sources".to_string()),
+ Known("Multiple Grounds".to_string()),
+ ]))
+ );
+
+ let c = ContainerSetup {
+ elements: vec![
+ Element::new(Ground, 0., vec![1, 3], vec![]),
+ Element::new(VoltageSrc, 1.0, vec![3, 0], vec![2]),
+ Element::new(Resistor, 1.0, vec![1], vec![3]),
+ Element::new(Resistor, 1.0, vec![2], vec![1, 0]),
+ ],
+ };
+ let x: JsValue = serde_wasm_bindgen::to_value(&c).unwrap();
+ assert_eq!(
+ load_wasm_container(x),
+ Ok("Loaded Successfully".to_string())
+ );
+}
+
fn cleanup_include_str(input: String) -> String {
let mut output: String = input.replace("\n", "");
output = output.replace(" ", "");