Skip to content

Commit

Permalink
Fix some web changes
Browse files Browse the repository at this point in the history
  • Loading branch information
LivInTheLookingGlass committed Aug 15, 2024
1 parent e45bdbd commit fd77edc
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 78 deletions.
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ Olivia's Project Euler Solutions
and these tests not yet automated as in Nodejs and Bun. To run these tests yourself, |test-js-link|
.. [3] While these solutions do run in most browsers, they need to be bundled with Pyodide 0.26.2+ first, and these
tests are not yet automated as in CPython and pypy. To run these tests yourself, |test-py-link|
.. [4] This feature is in progress. While these solutions will run in most browsers, they need to be bundled with wasm-pack 0.2+ first, and these
.. [4] While these solutions will run in most browsers, they need to be bundled with wasm-pack 0.2+ first, and these
tests are not yet automated as on non-web platforms. To run these tests yourself, |test-rs-link|
Coverage
Expand Down
73 changes: 37 additions & 36 deletions docs/_static/test-rs.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,49 +11,50 @@
<div id="mocha"></div>
<!-- Mocha setup and initiation code -->
<script type="module">
import initSync, { get_problems, run_problem, get_js_answer } from './dist/rust.js';
import init, { get_problems, run_problem, get_js_answer } from './dist/rust.js';
mocha.setup('bdd');
window.onload = function() {
initSync();
var runner = mocha.run();
var failedTests = [];

runner.on('end', function() {
window.mochaResults = runner.stats;
window.mochaResults.reports = failedTests;
});

runner.on('fail', function(test, err){
var flattenTitles = function(test){
var titles = [];
while (test.parent.title){
titles.push(test.parent.title);
test = test.parent;
}
return titles.reverse();
};
init().then(() => {
for (const p of get_problems(false)) {
const expected = get_js_answer(p);
describe(`run test ${p}`, function() {
this.timeout(Infinity);
it(`should return ${expected}`, async () => {
const answer = run_problem(p);
console.log(p, answer, expected);
if (answer !== expected) {
throw new Error();
}
});
});
}
const runner = mocha.run();
let failedTests = [];

failedTests.push({
name: test.title,
result: false,
message: err.message,
stack: err.stack,
titles: flattenTitles(test)
runner.on('end', function() {
window.mochaResults = runner.stats;
window.mochaResults.reports = failedTests;
});
});
for (const p of get_problems()) {
const expected = get_js_answer(p);
describe(`run test ${p}`, function() {
this.timeout(Infinity);
it(`should return ${expected}`, async () => {
const answer = run_problem(p);
console.log(p, answer, expected);
if (answer !== expected) {
throw new Error();

runner.on('fail', function(test, err){
const flattenTitles = function(test){
let titles = [];
while (test.parent.title){
titles.push(test.parent.title);
test = test.parent;
}
return titles.reverse();
};

failedTests.push({
name: test.title,
result: false,
message: err.message,
stack: err.stack,
titles: flattenTitles(test)
});
});
}
});
};
</script>
</body>
Expand Down
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Problems Solved
+-----------+------------+------------+------------+------------+------------+------------+------------+
|:prob:`74` | | | | | |:py-d:`0074`| |
+-----------+------------+------------+------------+------------+------------+------------+------------+
|:prob:`76` |:c-d:`0076` |:cp-d:`0076`|:cs-s:`0076`|:ja-d:`0076`|:js-s:`0076`|:py-d:`0076`|:rs-d:`0076`|
|:prob:`76` |:c-d:`0076` |:cp-d:`0076`|:cs-s:`0076`|:ja-d:`0076`|:js-s:`0076`|:py-d:`0076`|:rs-s:`0076`|
+-----------+------------+------------+------------+------------+------------+------------+------------+
|:prob:`77` | | | | | |:py-d:`0077`| |
+-----------+------------+------------+------------+------------+------------+------------+------------+
Expand Down
5 changes: 5 additions & 0 deletions docs/rust.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ build or test processes.
Alias for ``cargo clean``.

Live Tests
----------

To run these problems in your browser, :live-test:`rs`

Library Code
------------

Expand Down
70 changes: 36 additions & 34 deletions rust/src/include/problems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,50 +16,52 @@ use crate::p0357::p0357;
use crate::p0836::p0836;

type ProblemType = fn() -> Answer;
type ProblemRef<'a> = (&'a usize, ProblemType, bool);
type ProblemRef<'a> = (&'a ProblemType, bool);

pub fn get_problem<'b>(n: usize) -> Option<ProblemRef<'b>> {
return match n {
1 => Some(( &1, p0001, false)),
2 => Some(( &2, p0002, false)),
3 => Some(( &3, p0003, false)),
4 => Some(( &4, p0004, false)),
5 => Some(( &5, p0005, false)),
6 => Some(( &6, p0006, false)),
7 => Some(( &7, p0007, false)),
8 => Some(( &8, p0008, false)),
9 => Some(( &9, p0009, false)),
10 => Some(( &10, p0010, false)),
11 => Some(( &11, p0011, false)),
12 => Some(( &12, p0012, false)),
13 => Some(( &13, p0013, false)),
14 => Some(( &14, p0014, false)),
15 => Some(( &15, p0015, false)),
16 => Some(( &16, p0016, false)),
17 => Some(( &17, p0017, false)),
18 => Some(( &18, p0018, false)),
19 => Some(( &19, p0019, false)),
20 => Some(( &20, p0020, false)),
22 => Some(( &22, p0022, false)),
24 => Some(( &24, p0024, false)),
27 => Some(( &27, p0027, false)),
34 => Some(( &34, p0034, false)),
69 => Some(( &69, p0069, false)),
76 => Some(( &76, p0076, false)),
77 => Some(( &77, p0077, false)),
87 => Some(( &87, p0087, false)),
357 => Some((&357, p0357, true)),
836 => Some((&836, p0836, false)),
1 => Some((p0001, false)),
2 => Some((p0002, false)),
3 => Some((p0003, false)),
4 => Some((p0004, false)),
5 => Some((p0005, false)),
6 => Some((p0006, false)),
7 => Some((p0007, false)),
8 => Some((p0008, false)),
9 => Some((p0009, false)),
10 => Some((p0010, false)),
11 => Some((p0011, false)),
12 => Some((p0012, false)),
13 => Some((p0013, false)),
14 => Some((p0014, false)),
15 => Some((p0015, false)),
16 => Some((p0016, false)),
17 => Some((p0017, false)),
18 => Some((p0018, false)),
19 => Some((p0019, false)),
20 => Some((p0020, false)),
22 => Some((p0022, false)),
24 => Some((p0024, false)),
27 => Some((p0027, true)),
34 => Some((p0034, false)),
69 => Some((p0069, false)),
76 => Some((p0076, false)),
77 => Some((p0077, false)),
87 => Some((p0087, false)),
357 => Some((p0357, true)),
836 => Some((p0836, false)),
_ => None,
};
}


pub fn generate_supported_problems() -> Vec<usize> {
pub fn generate_supported_problems(include_slow: bool) -> Vec<usize> {
let mut supported_problems = Vec::new();
for n in 1..10000 {
if get_problem(n).is_some() {
supported_problems.push(n);
let Some((_, slow)) = get_problem(n) {
if !slow || include_slow {
supported_problems.push(n);
}
}
}

Expand Down
6 changes: 3 additions & 3 deletions rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ pub use crate::include::utils::{Answer,get_answer};
#[cfg(any(target_arch="wasm32", target_arch="wasm64"))]
#[wasm_bindgen]
pub fn run_problem(n: usize) -> JsValue {
let Some((_, problem_function, _)) = get_problem(n) else { panic!() };
let Some((problem_function, _)) = get_problem(n) else { panic!() };
let answer = problem_function();
return match answer {
Answer::String(e) => JsValue::from_str(&e),
Expand All @@ -37,8 +37,8 @@ pub fn run_problem(n: usize) -> JsValue {

#[cfg(any(target_arch="wasm32", target_arch="wasm64"))]
#[wasm_bindgen]
pub fn get_problems() -> JsValue {
let problems = generate_supported_problems();
pub fn get_problems(include_slow: bool) -> JsValue {
let problems = generate_supported_problems(include_slow);
let js_array = Array::new_with_length(problems.len() as u32);

for (i, &item) in problems.iter().enumerate() {
Expand Down
6 changes: 3 additions & 3 deletions rust/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ fn main() {
for i in sieve {
println!("{}", i);
}
let supported = generate_supported_problems();
let supported = generate_supported_problems(false);

for id in supported {
match get_problem(id) {
Some((_, func, _)) => {
Some((func, _)) => {
let answer = get_answer(id);
let result = func();
match (answer, result) {
Expand Down Expand Up @@ -76,7 +76,7 @@ seq!(N in 01..=20 {
// #[case::problem_357(357)]
#[case::problem_836(836)]
fn test_problem(#[case] id: usize) -> Result<(), String> {
let Some((_, func, _slow)) = get_problem(id) else { panic!() };
let Some((func, _slow)) = get_problem(id) else { panic!() };
let answer = get_answer(id);
let start = Instant::now();
let result = func();
Expand Down

0 comments on commit fd77edc

Please sign in to comment.