From c20ffa414b581a18f29474969ff2f18c92d9dcc2 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 8 Jan 2025 10:48:30 +0200
Subject: [PATCH 01/77] commit backup file with batch changes
---
tests/braille/Finnish/spec.rs | 198 +++++++++++++++++++++++++++++++---
1 file changed, 181 insertions(+), 17 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 0d5e0ca64..66f4da48c 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1,3 +1,8 @@
+// The tests are based on the Finnish specification for 6 dot math braille on the braille authority's web page (https://www.pistekirjoitus.fi/julkaisut/matematiikka-ja-tietotekniikka/) titled "Matematiikan, fysiikan ja kemain pistemerkinnät". Roughly translates to "Braille for mathematics, physics and chemistry." These tests are based on the edition published in 2022.
+//
+// Changes to the specifications in the rules and tests in MathCAT
+// Some changes have been made to the rules and these tests test against the modified rules. The changes have been made, because the specification is for printed braille and intended for people authoring mathematics braille. Some things have been changed to be consistent in all situations and to work in the braille display context.
+
// UEB tests for the basic mathml tags
// Initial tests are from BANA guidelines, mostly about initial chars for code switching
// http://www.brailleauthority.org/ueb/ueb_math_guidance/final_for_posting_ueb_math_guidance_may_2019_102419.pdf
@@ -7,16 +12,12 @@
// For example, "fraction_6_1_1" is a fraction example from section 6.1, and is the first example there.
use crate::common::*;
-#[test]
-fn calculation_marks_1() {
- let expr = "";
- test_braille("Finnish", expr, "⠼⠉⠀⠖⠼⠙⠀⠶⠼⠛");
-}
+// Original UEB tests (not translated yet)
#[test]
fn calculation_marks_7() {
let expr = "";
- test_braille("Finnish", expr, "⠨⠏⠀⠸⠶⠼⠉⠂⠁⠙");
+ test_braille("Finnish", expr, "");
}
#[test]
@@ -24,13 +25,13 @@ fn fraction_10() {
let expr = "";
- test_braille("Finnish", expr, "⠼⠉⠲⠀⠖⠼⠁⠲⠀⠶⠼⠁");
+ test_braille("Finnish", expr, "");
}
#[test]
fn fraction_13() {
let expr = "";
- test_braille("Finnish", expr, "⠼⠑⠲⠀⠶⠼⠁⠼⠁⠲");
+ test_braille("Finnish", expr, "");
}
#[test]
@@ -41,7 +42,7 @@ fn fraction_equations_3() {
6(1−x)
";
- test_braille("Finnish", expr, "⠼⠙⠀⠭⠀⠌⠦⠼⠋⠀⠦⠼⠁⠀⠤⠭⠴⠴");
+ test_braille("Finnish", expr, "");
}
#[test]
@@ -50,13 +51,13 @@ fn fraction_equations_6() {
12+13
14−15
";
- test_braille("Finnish", expr, "⠦⠼⠁⠆⠀⠖⠼⠁⠒⠠⠴⠀⠌⠦⠼⠁⠲⠀⠤⠼⠁⠢⠠⠴");
+ test_braille("Finnish", expr, "");
}
#[test]
fn powers_3() {
let expr = "";
- test_braille("Finnish", expr, "⠼⠃⠬⠼⠉⠀⠖⠼⠑");
+ test_braille("Finnish", expr, "");
}
#[test]
@@ -67,38 +68,201 @@ fn powers_6() {
1 048 576
";
- test_braille("Finnish", expr, "⠼⠃⠬⠼⠃⠚⠀⠶⠼⠁⠄⠚⠙⠓⠄⠑⠛⠋");
+ test_braille("Finnish", expr, "");
}
#[test]
fn roots_5() {
let expr = "";
- test_braille("Finnish", expr, "⠼⠃⠛⠬⠼⠁⠒⠀⠶⠩⠼⠉⠐⠼⠃⠛⠀⠶⠼⠉");
+ test_braille("Finnish", expr, "");
}
#[test]
fn roots_7() {
let expr = "";
- test_braille("Finnish", expr, "⠩⠦⠼⠃⠚⠀⠖⠼⠑⠀⠴⠀⠶⠩⠼⠃⠑⠀⠶⠼⠑");
+ test_braille("Finnish", expr, "");
}
#[test]
fn vectors_1() {
let expr = "";
- test_braille("Finnish", expr, "⠁⠱");
+ test_braille("Finnish", expr, "");
}
#[test]
fn chemistry_2_4() {
// From MathType
let expr = "";
- test_braille("Finnish", expr, "⠠⠉⠼⠆⠠⠓⠼⠢⠠⠕⠠⠓");
+ test_braille("Finnish", expr, "");
}
#[test]
fn chemistry_2_8() {
// From MathType
let expr = "";
- test_braille("Finnish", expr, "⠠⠉⠥⠬⠦⠼⠃⠀⠖⠴⠀");
+ test_braille("Finnish", expr, "");
+}
+
+// Finnish spec tests
+// Page and some other identification has been added to the function name, so you can figure out which expression the test in based on. Some tests are variations of the "official" test.
+
+// Grouping numbers
+
+// No example in the specs
+#[test]
+fn p7_no_grouping_in_four_digit_numbers() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_thousands_nbsp() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_thousands_point() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_thousands_space() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_comma() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_no_grouping() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_with_grouping_space() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_with_grouping_nbsp() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_with_grouping_nbsp_ellipses() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_no_grouping_ellipses() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
+}
+
+#[test]
+fn p7_decimal_point_endless_with_grouping_space_ellpses() {
+ let expr = "";
+ test_braille("Finnish", expr, "");
}
+
+#[test]
+fn p9_units_percent() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠊⠊⠀⠹");
+}
+
+#[test]
+fn p9_units_permille() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠁⠁⠑⠀⠒⠹");
+}
+
+#[test]
+fn p9_units_degrees() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠁⠚⠚⠀⠴");
+}
+
+#[test]
+fn p9_units_degrees_celsius() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠉⠛⠀⠴⠠⠉");
+}
+
+#[test]
+fn p9_units_degrees_fahrenheit() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠤⠼⠙⠉⠀⠴⠠⠋");
+}
+
+#[test]
+fn p10_currency_euro() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠋⠀⠈⠑⠀⠼⠁⠑⠀⠎⠝⠞");
+}
+
+#[test]
+fn p10_currency_dollar() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠠⠙⠼⠉⠑");
+}
+
+#[test]
+fn p10_currency_pound() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠇⠼⠃⠑");
+}
+
+#[test]
+fn p11_mm_squared() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠍⠍⠬");
+}
+
+#[test]
+fn p11_cm_cubed() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠉⠍⠬⠼⠉");
+}
+
+#[test]
+fn p13_plus() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠉⠀⠖⠼⠙⠀⠶⠼⠛");
+}
+
+#[test]
+fn p13_minus_not_equal() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠑⠀⠤⠼⠃⠀⠐⠶⠼⠃");
+}
+
+// Question mark is the same as in literary text.
+#[test]
+fn p13_times_with_question_mark() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠼⠃⠛⠀⠄⠼⠉⠀⠶⠢");
+}
+
+#[test]
+fn p13_parentheses_insible_times() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠦⠼⠉⠀⠭⠀⠖⠼⠃⠀⠽⠴⠀⠦⠼⠃⠀⠭⠀⠤⠼⠁⠴");
+}
\ No newline at end of file
From c9e2092b8edb2eaf971a85a329f59f009a551c2b Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 8 Jan 2025 10:48:47 +0200
Subject: [PATCH 02/77] fix typo in test name
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 66f4da48c..2e6fa38ca 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -262,7 +262,7 @@ fn p13_times_with_question_mark() {
}
#[test]
-fn p13_parentheses_insible_times() {
+fn p13_parentheses_invisible_times() {
let expr = "";
test_braille("Finnish", expr, "⠦⠼⠉⠀⠭⠀⠖⠼⠃⠀⠽⠴⠀⠦⠼⠃⠀⠭⠀⠤⠼⠁⠴");
}
\ No newline at end of file
From 7ee9dd193f59d934bdac0ed81772b4581e0b6b15 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 8 Jan 2025 11:03:07 +0200
Subject: [PATCH 03/77] add equations for tests
---
tests/braille/Finnish/spec.rs | 95 +++++++++++++++++++++++++++++++++++
1 file changed, 95 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 2e6fa38ca..bbb811bb0 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -265,4 +265,99 @@ fn p13_times_with_question_mark() {
fn p13_parentheses_invisible_times() {
let expr = "";
test_braille("Finnish", expr, "⠦⠼⠉⠀⠭⠀⠖⠼⠃⠀⠽⠴⠀⠦⠼⠃⠀⠭⠀⠤⠼⠁⠴");
+}
+
+#[test]
+fn p52_right_circular_cone_volume() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠠⠧⠀⠶⠼⠁⠒⠀⠨⠏⠀⠗⠬⠀⠓");
+}
+
+#[test]
+fn p52_circular_cone_area_equation() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠠⠁⠀⠶⠨⠏⠀⠗⠬⠀⠖⠨⠏⠀⠗⠀⠩⠦⠗⠬⠀⠖⠓⠬⠴");
+}
+
+#[test]
+fn p52_quadratic_formula() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠭⠀⠶⠷⠤⠃⠀⠖⠤⠩⠦⠃⠬⠀⠤⠼⠙⠀⠁⠉⠴⠾⠀⠌⠦⠼⠃⠀⠁⠴");
}
\ No newline at end of file
From ca2440422a65f231d9ca96634234f159ecb3c5f0 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 8 Jan 2025 12:13:10 +0200
Subject: [PATCH 04/77] add more tests
---
tests/braille/Finnish/spec.rs | 82 +++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index bbb811bb0..5040e728d 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -267,6 +267,88 @@ fn p13_parentheses_invisible_times() {
test_braille("Finnish", expr, "⠦⠼⠉⠀⠭⠀⠖⠼⠃⠀⠽⠴⠀⠦⠼⠃⠀⠭⠀⠤⠼⠁⠴");
}
+// Not sure about this MathML markup.
+#[test]
+fn p50_alternative_derivative_1() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠙⠇⠝⠭⠀⠌⠙⠭");
+}
+
+// Not sure about this MathML markup.
+#[test]
+fn p50_alternative_derivative_2() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠙⠀⠌⠙⠭⠀⠇⠝⠭");
+}
+
+#[test]
+fn p51_set_with_closure() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠈⠙⠠⠁⠀⠶⠠⠁⠱⠀⠳⠦⠦⠠⠭⠀⠳⠤⠠⠁⠴⠱");
+}
+
+#[test]
+fn p51_normal_distribution() {
+ let expr = "";
+ test_braille("Finnish", expr, "⠏⠀⠨⠶⠠⠝⠦⠼⠑⠓⠂⠀⠼⠃⠴");
+}
+
#[test]
fn p52_right_circular_cone_volume() {
let expr = "";
- test_braille("Finnish", expr, "⠼⠃⠀⠁⠉⠀⠌⠦⠼⠃⠀⠙⠴⠀⠣⠼⠃⠀⠶⠁⠉⠀⠌⠙");
+ test_braille("Finnish", expr, "⠼⠃⠀⠭⠀⠖⠼⠉⠀⠶⠤⠼⠉⠀⠭⠀⠤⠼⠛");
}
#[test]
@@ -628,7 +628,7 @@ fn p24_fraction() {
";
- test_braille("Finnish", expr, "⠼⠉⠀⠽⠀⠌⠼⠙⠀⠶⠼⠉⠲⠀⠽");
+ test_braille("Finnish", expr, "⠦⠼⠑⠀⠖⠼⠛⠴⠀⠌⠦⠼⠃⠀⠄⠼⠉⠴");
}
#[test]
@@ -651,7 +651,7 @@ fn p24_fraction_2() {
";
- test_braille("Finnish", expr, "⠼⠙⠀⠭⠀⠌⠦⠼⠋⠀⠦⠼⠁⠀⠤⠭⠴⠴");
+ test_braille("Finnish", expr, "⠼⠙⠀⠭⠀⠌⠦⠼⠃⠀⠦⠼⠁⠀⠤⠭⠴⠴");
}
#[test]
@@ -853,7 +853,7 @@ fn p27_sqrt() {
2
";
- test_braille("Finnish", expr, "⠼⠙⠬⠼⠁⠰⠀⠶⠩⠼⠙⠀⠶⠼⠃");
+ test_braille("Finnish", expr, "⠼⠙⠬⠼⠁⠆⠀⠶⠩⠼⠙⠀⠶⠼⠃");
}
#[test]
@@ -984,7 +984,7 @@ fn p34_vector_dot_product() {
";
- test_braille("Finnish", expr, "⠧⠱⠀⠠⠥⠱");
+ test_braille("Finnish", expr, "⠧⠱⠀⠄⠥⠱");
}
#[test]
@@ -1425,7 +1425,7 @@ fn p42_determinant() {
a
b
";
- test_braille("Finnish", expr, "⠸⠁⠀⠖⠃⠀⠀⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃⠀⠀⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃");
+ test_braille("Finnish", expr, "⠸⠁⠀⠖⠃⠀⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃⠀⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃");
}
// Dots 156 to signify the bar over "arc"
@@ -1563,7 +1563,7 @@ fn p50_such_that_y_greater_than_x() {
ℝ
,
∃
- 𝑦
+ y
∈
ℝ
y
@@ -1623,7 +1623,7 @@ fn p50_binomial_with_factorial() {
";
- test_braille("Finnish", expr, "⠦⠼⠋⠯⠀⠼⠙⠴⠀⠶⠼⠋⠠⠲⠀⠌⠷⠼⠙⠠⠲⠀⠦⠼⠋⠀⠤⠼⠙⠠⠴⠠⠲⠾");
+ test_braille("Finnish", expr, "⠦⠼⠋⠯⠀⠼⠙⠴⠀⠶⠼⠋⠠⠲⠀⠌⠦⠼⠙⠠⠲⠀⠦⠼⠋⠀⠤⠼⠙⠠⠴⠠⠲⠴");
}
#[test]
@@ -1675,7 +1675,7 @@ fn p50_alternative_derivative_1() {
";
- test_braille("Finnish", expr, "⠙⠇⠝⠭⠀⠌⠙⠭");
+ test_braille("Finnish", expr, "⠙⠇⠝⠭⠀⠌⠦⠙⠭⠴");
}
// Not sure about this MathML markup.
@@ -1694,7 +1694,7 @@ fn p50_alternative_derivative_2() {
x
";
- test_braille("Finnish", expr, "⠙⠀⠌⠙⠭⠀⠇⠝⠭");
+ test_braille("Finnish", expr, "⠙⠀⠌⠦⠙⠭⠴⠀⠇⠝⠭");
}
From baf5f1683c7354e214028b6f9a9c5b2725075a20 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Tue, 4 Mar 2025 09:29:32 +0200
Subject: [PATCH 26/77] modify comments
---
tests/braille/Finnish/spec.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index d9a0b2170..603dd23fd 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -13,7 +13,7 @@
use crate::common::*;
// Finnish spec tests
-// Page and some other identification has been added to the function name, so you can figure out which expression the test in based on. Some tests are variations of the "official" test.
+// Page and some other identification has been added to the function name, so you can figure out which expression the test in based on. Some tests are variations and can't be found in the specs.
// Grouping numbers
@@ -48,7 +48,7 @@ fn p7_decimal_comma() {
test_braille("Finnish", expr, "⠼⠑⠂⠁⠃⠑⠄⠛⠑");
}
-// Now the point is transformed to comma. Maybe it should follow the text.
+// Now the point is transformed to comma. It should follow the text.
#[test]
fn p7_decimal_point() {
let expr = "5.12575";
From e261d8969954fc59d63e8a029f44ab9033d90f5a Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 10:44:28 +0200
Subject: [PATCH 27/77] fix dollar sign
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 098f530b4..48dad7949 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -139,7 +139,7 @@ fn p10_currency_euro() {
#[test]
fn p10_currency_dollar() {
let expr = "$35";
- test_braille("Finnish", expr, "⠠⠙⠼⠉⠑");
+ test_braille("Finnish", expr, "⠮⠼⠉⠑");
}
#[test]
From d824744abc64a2be18e2b6dc4b3acb7daacf2142 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 10:44:34 +0200
Subject: [PATCH 28/77] fix typo in test name
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 48dad7949..259c90735 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -95,7 +95,7 @@ fn p7_decimal_point_endless_no_grouping_ellipses() {
}
#[test]
-fn p7_decimal_point_endless_with_grouping_space_ellpses() {
+fn p7_decimal_point_endless_with_grouping_space_ellipses() {
let expr = "1,234 657 234…";
test_braille("Finnish", expr, "⠼⠁⠂⠃⠉⠙⠄⠋⠑⠛⠄⠃⠉⠙⠄⠄⠄");
}
From 2345d8295b5d1bed0fe455a57bf6bf18abd2c71b Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 10:51:39 +0200
Subject: [PATCH 29/77] fix test when number has a decimal point
The grouping character is the number character when the decimal point is used.
---
tests/braille/Finnish/spec.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 259c90735..798a8940e 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -50,11 +50,11 @@ fn p7_decimal_comma() {
}
-// Now the point is transformed to comma. Maybe it should follow the text.
+// When there is a decimal point in the text then the grouping character is the number character.
#[test]
fn p7_decimal_point() {
let expr = "5.12575";
- test_braille("Finnish", expr, "⠼⠑⠂⠁⠃⠑⠄⠛⠑");
+ test_braille("Finnish", expr, "⠼⠑⠄⠁⠃⠑⠼⠛⠑");
}
#[test]
From f09e3330dd946e32706c46b7bd91caae8c9336c9 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 11:57:10 +0200
Subject: [PATCH 30/77] restore double parentheses for the long fraction
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 798a8940e..5ee61c914 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -685,7 +685,7 @@ fn p25_long_fraction() {
";
- test_braille("Finnish", expr, "⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠀⠌⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴");
+ test_braille("Finnish", expr, "⠦⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠴⠀⠌⠦⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴⠴");
}
#[test]
From e2ef9d48ae65040da1b81ef9eaaf060b75117eb1 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 12:10:50 +0200
Subject: [PATCH 31/77] change braille for : for all expressions
---
tests/braille/Finnish/spec.rs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 5ee61c914..6a1e63877 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -277,7 +277,7 @@ fn p16_division() {
:
3
";
- test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠌⠼⠉");
+ test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠒⠼⠉");
}
#[test]
@@ -386,7 +386,7 @@ fn p17_multiple_operations() {
2
";
- test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠌⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬");
+ test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠒⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬");
}
#[test]
@@ -595,7 +595,7 @@ fn p22_equation_solving_notation() {
:
5
";
- test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠌⠼⠑");
+ test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠒⠼⠑");
}
#[test]
@@ -685,7 +685,7 @@ fn p25_long_fraction() {
";
- test_braille("Finnish", expr, "⠦⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠴⠀⠌⠦⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴⠴");
+ test_braille("Finnish", expr, "⠦⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠴⠀⠒⠦⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴⠴");
}
#[test]
@@ -1818,7 +1818,7 @@ fn p64_chemistry_bond_1() {
#[test]
fn p64_chemistry_bond_1_alternative() {
let expr = "H:H";
- test_braille("Finnish", expr, "⠠⠓⠀⠆⠠⠓");
+ test_braille("Finnish", expr, "⠠⠓⠀⠒⠠⠓");
}
#[test]
From a685328e93e0737ac972ac72cecb111deab8c318 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 12:17:27 +0200
Subject: [PATCH 32/77] alternative to degrees, minutes and seconds
---
tests/braille/Finnish/spec.rs | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 6a1e63877..4e87b3d2b 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -835,9 +835,8 @@ fn p31_trig_tan_infinity() {
test_braille("Finnish", expr, "⠞⠁⠝⠀⠼⠊⠚⠀⠴⠀⠶⠿");
}
-// This would probably need alternative markup and test case as well.
#[test]
-fn p31_degrees_minutes_seconds() {
+fn p31_degrees_minutes_seconds_primes() {
let expr = "
30
@@ -857,6 +856,27 @@ fn p31_degrees_minutes_seconds() {
test_braille("Finnish", expr, "⠼⠉⠚⠀⠴⠀⠼⠙⠑⠀⠨⠀⠼⠃⠚⠀⠸");
}
+#[test]
+fn p31_degrees_minutes_seconds_alternative() {
+ let expr = "
+
+ 30
+ °
+
+ 45
+ '
+
+
+ 20
+
+ ''
+
+
+
+";
+ test_braille("Finnish", expr, "⠼⠉⠚⠀⠴⠀⠼⠙⠑⠀⠨⠀⠼⠃⠚⠀⠸");
+}
+
#[test]
fn p32_expected_value() {
let expr = "
From 47a8ed02f5aaa6eeea2d7f7db7a7d9abb44dad94 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 12:54:15 +0200
Subject: [PATCH 33/77] add more examples for | operator
---
tests/braille/Finnish/spec.rs | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 4e87b3d2b..4455e338e 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -598,6 +598,34 @@ fn p22_equation_solving_notation() {
test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠒⠼⠑");
}
+#[test]
+fn operate_by_on_both_sides() {
+ let expr = "
+ |
+ +
+ 5
+ |
+ -
+ 5
+ |
+ −
+ 5
+ |
+ ·
+ 5
+ |
+ ×
+ 5
+ |
+ (
+
+ )
+ 2
+
+";
+ test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸⠦⠴⠬");
+}
+
#[test]
fn p24_fraction() {
let expr = "
From e992a94d1001dbd58c603d602e1a7e46ca064917 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 14:23:05 +0200
Subject: [PATCH 34/77] add one more test for | character
---
tests/braille/Finnish/spec.rs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 4455e338e..951c92721 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -621,9 +621,12 @@ fn operate_by_on_both_sides() {
)
2
+ |
+ /
+ 5
";
- test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸⠦⠴⠬");
+ test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸⠦⠴⠬⠀⠀⠸⠀⠌⠼⠑");
}
#[test]
From 5f882f25a05e6d3b16d20a5fce4b4b0af375676d Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 14:27:10 +0200
Subject: [PATCH 35/77] remove extra spaces
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 951c92721..23dcb96f3 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1421,7 +1421,7 @@ fn p42_determinant() {
a
b
";
- test_braille("Finnish", expr, "⠸⠁⠀⠖⠃⠀⠀⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃⠀⠀⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃");
+ test_braille("Finnish", expr, "⠸⠁⠀⠖⠃ ⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃ ⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃");
}
// Dots 156 to signify the bar over "arc"
From 34b16f5ea4770f5f92445e16b5456e5f39c37d31 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Thu, 30 Oct 2025 15:19:33 +0200
Subject: [PATCH 36/77] add examples of subscripts
---
tests/braille/Finnish/spec.rs | 47 +++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 23dcb96f3..46decd772 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -908,6 +908,53 @@ fn p31_degrees_minutes_seconds_alternative() {
test_braille("Finnish", expr, "⠼⠉⠚⠀⠴⠀⠼⠙⠑⠀⠨⠀⠼⠃⠚⠀⠸");
}
+#[test]
+fn msub_singular() {
+ let expr = "
+
+ x
+ 1
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠭⠡⠼⠁⠀⠖⠼⠁");
+}
+
+#[test]
+fn msub_parentheses() {
+ let expr = "
+
+ a
+
+ x
+ +
+ 1
+
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠀⠖⠼⠁");
+}
+
+// Overline notation comes after the subscript
+#[test]
+fn msub_with_vector() {
+ let expr = "
+
+
+ a
+ ‾
+
+ b
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠁⠡⠃⠱⠀⠖⠼⠁");
+}
+
#[test]
fn p32_expected_value() {
let expr = "
From 516a24cf350c8d7c9f50b8552f90fa00d9aef534 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 08:48:19 +0200
Subject: [PATCH 37/77] add tests for msubsup
---
tests/braille/Finnish/spec.rs | 39 +++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 46decd772..a1b4f734c 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -955,6 +955,45 @@ fn msub_with_vector() {
test_braille("Finnish", expr, "⠁⠡⠃⠱⠀⠖⠼⠁");
}
+#[test]
+fn msubsup_parentheses_in_sub() {
+ let expr = "
+
+ a
+
+ x
+ +
+ 1
+
+ 10
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠬⠼⠁⠚⠀⠖⠼⠁");
+}
+
+#[test]
+fn msubsup_parentheses_in_sub_and_sup() {
+ let expr = "
+
+ a
+
+ x
+ +
+ 1
+
+
+ x
+ −
+ 10
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠬⠦⠭⠀⠤⠼⠁⠚⠴⠀⠖⠼⠁");
+}
+
#[test]
fn p32_expected_value() {
let expr = "
From a557d14fa96ddfa4664f93d130d93110cb4b96be Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 09:10:06 +0200
Subject: [PATCH 38/77] add vector subscript test and normal msubsup
---
tests/braille/Finnish/spec.rs | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index a1b4f734c..909c84470 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -956,21 +956,33 @@ fn msub_with_vector() {
}
#[test]
-fn msubsup_parentheses_in_sub() {
+fn msub_with_vector_with_sub_text() {
let expr = "
-
+
+
a
-
- x
+ ‾
+
+ tuki
+
+
1
-
- 10
+";
+ test_braille("Finnish", expr, "⠁⠡⠞⠥⠅⠊⠱⠀⠖⠼⠁");
+}
+
+#[test]
+fn msubsup() {
+ let expr = "
+
+ a
+ 1
+ 2
+
1
";
- test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠬⠼⠁⠚⠀⠖⠼⠁");
+ test_braille("Finnish", expr, "⠁⠡⠼⠁⠬⠼⠃⠀⠖⠼⠁");
}
#[test]
From 782d7e17f16eb8cdc803dc7cdaae8869a9db71ea Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 09:13:19 +0200
Subject: [PATCH 39/77] remove zone ending dot 5
This was removed so it would be more consistent with marking up multiplication using a space.
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 909c84470..fd8a5abfb 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1029,7 +1029,7 @@ fn p32_expected_value() {
i
";
- test_braille("Finnish", expr, "⠠⠑⠦⠭⠴⠀⠶⠨⠍⠀⠶⠸⠎⠡⠊⠐⠏⠡⠊⠐⠭⠡⠊");
+ test_braille("Finnish", expr, "⠠⠑⠦⠭⠴⠀⠶⠨⠍⠀⠶⠸⠎⠡⠊⠐⠏⠡⠊ ⠭⠡⠊");
}
// Dots 156 to signify the bar over "AB"
From 0d461570c34e3a9da68cd7a8fd87e81ba77aade8 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 09:35:05 +0200
Subject: [PATCH 40/77] add tests for lower and upper bounds
---
tests/braille/Finnish/spec.rs | 74 +++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index fd8a5abfb..84282cfd0 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1647,6 +1647,80 @@ fn p49_integral_with_Finnish_notation_for_substitution() {
test_braille("Finnish", expr, "⠮⠢⠼⠚⠔⠼⠙⠐⠩⠭⠀⠙⠭⠀⠶⠸⠢⠼⠚⠔⠼⠙⠐⠦⠼⠃⠒⠀⠭⠀⠩⠭⠴");
}
+// Markup for lower and upper bounds for summation, product, intersection, union and such. "Equal to" character is replaced lower (dots 26) and upper (dots 35) bounds.
+#[test]
+fn p49_summation_with_lower_upper_limits() {
+ init_logger();
+ let expr = "
+
+∑
+
+i
+=
+0
+
+n
+
+
+f
+i
+
+
+x
+i
+
+";
+ test_braille("Finnish", expr, "⠸⠎⠡⠊⠢⠼⠚⠔⠝⠐⠦⠋⠡⠊⠀⠭⠡⠊⠴");
+ // Parentheses are added for clarity. Dot 5 is used to end the zone of the upper limit.
+}
+
+#[test]
+fn p49_union_with_lower_upper_limits() {
+ init_logger();
+ let expr = "
+
+∪
+
+i
+=
+1
+
+n
+
+
+A
+i
+
+";
+ test_braille("Finnish", expr, "⠳⠖⠡⠊⠢⠼⠁⠔⠝⠐⠠⠁⠡⠊");
+ // Dot 5 is used to end the zone of the upper limit.
+}
+
+#[test]
+fn p49_sequence_with_lower_upper_limits() {
+ init_logger();
+ let expr = "
+
+
+(
+
+x
+n
+
+)
+
+
+n
+=
+1
+
+∞
+
+";
+ test_braille("Finnish", expr, "⠦⠭⠡⠝⠴⠝⠢⠼⠁⠔⠿");
+ // Dot 5 is used to end the zone of the upper limit.
+}
+
#[test]
fn p50_such_that_y_greater_than_x() {
let expr = "
From 94b3fc4f1c3fef24f6924eea0d626e2fa07900b2 Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 10:58:44 +0200
Subject: [PATCH 41/77] use normal minus for sets
Fixed: There was a "set minus" used here (1256 36), which can't be produced by MathML. It is now a normal minus.
---
tests/braille/Finnish/spec.rs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 84282cfd0..2a51fff06 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1892,7 +1892,8 @@ fn p51_set_with_closure() {
‾
";
- test_braille("Finnish", expr, "⠈⠙⠠⠁⠀⠶⠠⠁⠱⠀⠳⠦⠦⠠⠭⠀⠳⠤⠠⠁⠴⠱");
+ test_braille("Finnish", expr, "⠈⠙⠠⠁⠀⠶⠠⠁⠱⠀⠳⠦⠦⠠⠭⠀⠤⠠⠁⠴⠱");
+ // Fixed: There was a "set minus" used here (1256 36), which can't be produced by MathML. It is now a normal minus.
}
#[test]
From d2eda17b760cbcad047f55117f1582469df3731a Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 10:59:18 +0200
Subject: [PATCH 42/77] change msubsup to munderover where applicable
---
tests/braille/Finnish/spec.rs | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 2a51fff06..84b6d5b65 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1649,10 +1649,10 @@ fn p49_integral_with_Finnish_notation_for_substitution() {
// Markup for lower and upper bounds for summation, product, intersection, union and such. "Equal to" character is replaced lower (dots 26) and upper (dots 35) bounds.
#[test]
-fn p49_summation_with_lower_upper_limits() {
+fn p49_summation_with_lower_upper_bounds() {
init_logger();
let expr = "
-
+
∑
i
@@ -1660,7 +1660,7 @@ fn p49_summation_with_lower_upper_limits() {
0
n
-
+
f
i
@@ -1671,14 +1671,14 @@ fn p49_summation_with_lower_upper_limits() {
";
test_braille("Finnish", expr, "⠸⠎⠡⠊⠢⠼⠚⠔⠝⠐⠦⠋⠡⠊⠀⠭⠡⠊⠴");
- // Parentheses are added for clarity. Dot 5 is used to end the zone of the upper limit.
+ // Parentheses are added for clarity. Dot 5 is used to end the zone of the upper bound.
}
#[test]
-fn p49_union_with_lower_upper_limits() {
+fn p49_union_with_lower_upper_bounds() {
init_logger();
let expr = "
-
+
∪
i
@@ -1686,18 +1686,18 @@ fn p49_union_with_lower_upper_limits() {
1
n
-
+
A
i
";
test_braille("Finnish", expr, "⠳⠖⠡⠊⠢⠼⠁⠔⠝⠐⠠⠁⠡⠊");
- // Dot 5 is used to end the zone of the upper limit.
+ // Dot 5 is used to end the zone of the upper bound.
}
#[test]
-fn p49_sequence_with_lower_upper_limits() {
+fn p49_sequence_with_lower_upper_bounds() {
init_logger();
let expr = "
@@ -1718,7 +1718,7 @@ fn p49_sequence_with_lower_upper_limits() {
";
test_braille("Finnish", expr, "⠦⠭⠡⠝⠴⠝⠢⠼⠁⠔⠿");
- // Dot 5 is used to end the zone of the upper limit.
+ // Dot 5 is used to end the zone of the upper bound.
}
#[test]
@@ -1868,8 +1868,6 @@ fn p50_alternative_derivative_2() {
test_braille("Finnish", expr, "⠙⠀⠌⠙⠭⠀⠇⠝⠭");
}
-
-
#[test]
fn p51_set_with_closure() {
let expr = "
From 2a1e6114bece433c46af72fb50af008a93dff51f Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 11:02:05 +0200
Subject: [PATCH 43/77] move test
---
tests/braille/Finnish/spec.rs | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 84b6d5b65..d0fb938de 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1536,6 +1536,15 @@ fn p45_arcsin_with_bar_over() {
test_braille("Finnish", expr, "⠁⠗⠉⠱⠀⠎⠊⠝⠀⠭");
}
+#[test]
+fn p46_simple_derivative_fraction() {
+ let expr = "
+ df(x)
+ dx
+ ";
+ test_braille("Finnish", expr, "⠙⠋⠦⠭⠴⠀⠌⠙⠭");
+}
+
// 'Change of zone' dot 5 is used after the limit subscript notation.
#[test]
fn p48_limit_right_hand_approaching_Finnish_notation() {
@@ -1822,14 +1831,7 @@ fn p50_conditional_probability() {
test_braille("Finnish", expr, "⠠⠏⠦⠠⠃⠀⠸⠀⠠⠁⠴⠀⠶⠠⠏⠦⠠⠁⠠⠃⠴⠀⠌⠠⠏⠦⠠⠁⠴");
}
-#[test]
-fn p46_simple_derivative_fraction() {
- let expr = "
- df(x)
- dx
- ";
- test_braille("Finnish", expr, "⠙⠋⠦⠭⠴⠀⠌⠙⠭");
-}
+
#[test]
fn p50_alternative_derivative_1() {
From a9dceed1db144e14c3283708ae5359fdc6d1f06a Mon Sep 17 00:00:00 2001
From: Sami M
Date: Fri, 31 Oct 2025 11:10:23 +0200
Subject: [PATCH 44/77] add tests for line under variables
---
tests/braille/Finnish/spec.rs | 42 +++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index d0fb938de..2be0b4375 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1545,6 +1545,48 @@ fn p46_simple_derivative_fraction() {
test_braille("Finnish", expr, "⠙⠋⠦⠭⠴⠀⠌⠙⠭");
}
+// Line under a variable
+#[test]
+fn p46_random_variable() {
+ let expr = "
+
+s
+_
+
+";
+ test_braille("Finnish", expr, "⠎⠤");
+}
+
+#[test]
+fn line_under_terminated_by_space() {
+ let expr = "
+
+s
+_
+
++
+1
+";
+ test_braille("Finnish", expr, "⠎⠤⠀⠖⠼⠁");
+}
+
+#[test]
+fn line_under_parentheses() {
+ let expr = "
+
+
+s
+/
+2
+
+_
+
++
+1
+";
+ test_braille("Finnish", expr, "⠦⠎⠀⠌⠼⠃⠴⠤⠀⠖⠼⠁");
+}
+
// 'Change of zone' dot 5 is used after the limit subscript notation.
#[test]
fn p48_limit_right_hand_approaching_Finnish_notation() {
From 2f4121686211f96911323de2b5c901f23163871d Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Mon, 19 Jan 2026 14:05:57 +0200
Subject: [PATCH 45/77] fix p7_decimal_point test
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 2be0b4375..a1f96185b 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -54,7 +54,7 @@ fn p7_decimal_comma() {
#[test]
fn p7_decimal_point() {
let expr = "5.12575";
- test_braille("Finnish", expr, "⠼⠑⠄⠁⠃⠑⠼⠛⠑");
+ test_braille("Finnish", expr, "⠼⠑⠄⠁⠃⠑⠛⠑");
}
#[test]
From e61d4c85280b40dd024d991497fddb78f5de5310 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 21 Jan 2026 12:52:50 +0200
Subject: [PATCH 46/77] fix unicode character to be correct
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index a1f96185b..0e5fe0392 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1781,7 +1781,7 @@ fn p50_such_that_y_greater_than_x() {
ℝ
,
∃
- 𝑦
+ y
∈
ℝ
;
From 26f5cc44a8e99c92a262c1a0fd3ea578cccfa4dc Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 21 Jan 2026 12:53:02 +0200
Subject: [PATCH 47/77] change minus to set minus in test, remove comment
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 0e5fe0392..7ac6e860c 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1927,7 +1927,7 @@ fn p51_set_with_closure() {
(
X
-−
+∖
A
)
From 6bebb6c13fea70d9b32ed37a0a12e6ef9ee91a2d Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 21 Jan 2026 12:53:12 +0200
Subject: [PATCH 48/77] remove comment
---
tests/braille/Finnish/spec.rs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 7ac6e860c..96c1de26c 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1934,8 +1934,7 @@ fn p51_set_with_closure() {
‾
";
- test_braille("Finnish", expr, "⠈⠙⠠⠁⠀⠶⠠⠁⠱⠀⠳⠦⠦⠠⠭⠀⠤⠠⠁⠴⠱");
- // Fixed: There was a "set minus" used here (1256 36), which can't be produced by MathML. It is now a normal minus.
+ test_braille("Finnish", expr, "⠈⠙⠠⠁⠀⠶⠠⠁⠱⠀⠳⠦⠦⠠⠭⠀⠳⠡⠠⠁⠴⠱");
}
#[test]
From 8df3cfdbc379b66a5d05aa04e54fb85e7036ea47 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 21 Jan 2026 12:53:55 +0200
Subject: [PATCH 49/77] simplify parentheses rules
Before I thought that it would be useful to have alternating brackets and parentheses to imply nested parentheses, but this gets complicated from development point of view.
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 96c1de26c..61c10d9c6 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2038,7 +2038,7 @@ fn p52_quadratic_formula() {
";
- test_braille("Finnish", expr, "⠭⠀⠶⠷⠤⠃⠀⠖⠤⠩⠦⠃⠬⠀⠤⠼⠙⠀⠁⠉⠴⠾⠀⠌⠦⠼⠃⠀⠁⠴");
+ test_braille("Finnish", expr, "⠭⠀⠶⠦⠤⠃⠀⠖⠤⠩⠦⠃⠬⠀⠤⠼⠙⠀⠁⠉⠴⠴⠀⠌⠦⠼⠃⠀⠁⠴");
}
#[test]
From 1fa9c0a5710e4793a68d6074cf3488e185ffc840 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Mon, 9 Mar 2026 12:35:50 +0200
Subject: [PATCH 50/77] fix parts of tests
---
tests/braille/Finnish/spec.rs | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 61c10d9c6..326145b67 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1790,6 +1790,7 @@ fn p50_such_that_y_greater_than_x() {
x
";
test_braille("Finnish", expr, "⠳⠂⠭⠀⠳⠔⠠⠗⠂⠀⠳⠢⠽⠀⠳⠔⠠⠗⠆⠀⠽⠀⠱⠀⠭");
+ // Sami, FI: The comma , is not produced by MathCAT. Should be.
}
// After the root sign, dot 5 is used to signify 'change of zone' in the braille.
@@ -1840,6 +1841,7 @@ fn p50_binomial_with_factorial() {
"#;
test_braille("Finnish", expr, "⠦⠼⠋⠯⠀⠼⠙⠴⠀⠶⠼⠋⠠⠲⠀⠌⠷⠼⠙⠠⠲⠀⠦⠼⠋⠀⠤⠼⠙⠠⠴⠠⠲⠾");
+ // The ⠯ character is used between the elements in the binomial.
}
#[test]
@@ -1890,7 +1892,7 @@ fn p50_alternative_derivative_1() {
";
- test_braille("Finnish", expr, "⠙⠇⠝⠭⠀⠌⠙⠭");
+ test_braille("Finnish", expr, "⠙⠇⠝⠀⠭⠀⠌⠙⠭");
}
// Not sure about this MathML markup.
@@ -1909,7 +1911,7 @@ fn p50_alternative_derivative_2() {
x
";
- test_braille("Finnish", expr, "⠙⠀⠌⠙⠭⠀⠇⠝⠭");
+ test_braille("Finnish", expr, "⠙⠀⠌⠙⠭⠀⠇⠝⠀⠭");
}
#[test]
@@ -2083,7 +2085,7 @@ fn p64_chemistry_bond_1() {
#[test]
fn p64_chemistry_bond_1_alternative() {
let expr = "H:H";
- test_braille("Finnish", expr, "⠠⠓⠀⠒⠠⠓");
+ test_braille("Finnish", expr, "⠠⠓⠀⠆⠠⠓");
}
#[test]
From 3b3036f56e533b9e4c08abcd1958c5288195bbf9 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Tue, 10 Mar 2026 14:38:47 +0200
Subject: [PATCH 51/77] fixes and explanation to tests
---
tests/braille/Finnish/spec.rs | 43 +++++++++++++++++++++++------------
1 file changed, 28 insertions(+), 15 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 326145b67..f5218f7e3 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -277,7 +277,7 @@ fn p16_division() {
:
3
";
- test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠒⠼⠉");
+ test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠌⠼⠉");
}
#[test]
@@ -386,7 +386,8 @@ fn p17_multiple_operations() {
2
";
- test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠒⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬");
+ test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠌⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬");
+ // : as a division sign
}
#[test]
@@ -595,13 +596,14 @@ fn p22_equation_solving_notation() {
:
5
";
- test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠒⠼⠑");
+ test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠌⠼⠑");
+ // Context: the equation is divided by five on both sides.
}
#[test]
fn operate_by_on_both_sides() {
let expr = "
- |
+ |
+
5
|
@@ -617,17 +619,20 @@ fn operate_by_on_both_sides() {
×
5
|
- (
+
+ (
)
+
2
- |
+
+ |
/
5
-
";
- test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸⠦⠴⠬⠀⠀⠸⠀⠌⠼⠑");
-}
+ test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸ ⠦⠴⠬⠀⠀⠸⠀⠌⠼⠑");
+ // Context: When marking up operation on both sides on an equation, this is the correct result.
+ }
#[test]
fn p24_fraction() {
@@ -717,6 +722,7 @@ fn p25_long_fraction() {
";
test_braille("Finnish", expr, "⠦⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠴⠀⠒⠦⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴⠴");
+ // Rule fix: Fractions' division requires double parentheses so that the order of operations is respected.
}
#[test]
@@ -935,7 +941,7 @@ fn msub_parentheses() {
+
1
";
- test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠀⠖⠼⠁");
+ test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠖⠼⠁⠴⠀⠖⠼⠁");
}
// Overline notation comes after the subscript
@@ -953,6 +959,7 @@ fn msub_with_vector() {
1
";
test_braille("Finnish", expr, "⠁⠡⠃⠱⠀⠖⠼⠁");
+ // For the rule: order should be first subscript and then superscript
}
#[test]
@@ -969,6 +976,7 @@ fn msub_with_vector_with_sub_text() {
1
";
test_braille("Finnish", expr, "⠁⠡⠞⠥⠅⠊⠱⠀⠖⠼⠁");
+ // For the rule: order should be first subscript and then superscript
}
#[test]
@@ -999,11 +1007,12 @@ fn msubsup_parentheses_in_sub_and_sup() {
x
−
10
+
+
1
";
- test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠲⠼⠁⠴⠬⠦⠭⠀⠤⠼⠁⠚⠴⠀⠖⠼⠁");
+ test_braille("Finnish", expr, "⠁⠡⠦⠭⠀⠖⠼⠁⠴⠬⠦⠭⠀⠤⠼⠁⠚⠴⠀⠖⠼⠁");
}
#[test]
@@ -1029,7 +1038,7 @@ fn p32_expected_value() {
i
";
- test_braille("Finnish", expr, "⠠⠑⠦⠭⠴⠀⠶⠨⠍⠀⠶⠸⠎⠡⠊⠐⠏⠡⠊ ⠭⠡⠊");
+ test_braille("Finnish", expr, "⠠⠑⠦⠭⠴⠀⠶⠨⠍⠀⠶⠸⠎⠡⠊⠐⠏⠡⠊⠐⠭⠡⠊");
}
// Dots 156 to signify the bar over "AB"
@@ -1410,7 +1419,6 @@ fn p40_function_with_parts() {
test_braille("Finnish", expr, "⠋⠦⠭⠴⠀⠶⠫⠤⠼⠁⠂⠀⠭⠀⠣⠶⠀⠤⠼⠁⠀⠐⠐⠀⠭⠬⠀⠖⠼⠃⠀⠭⠂⠀⠤⠼⠁⠀⠣⠀⠭⠀⠣⠶⠀⠼⠁⠀⠐⠐⠀⠤⠭⠀⠖⠼⠉⠂⠀⠭⠀⠱⠀⠼⠁⠻");
}
-// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
#[test]
fn p42_matrix() {
let expr = "
@@ -1480,7 +1488,7 @@ fn p42_matrix() {
test_braille("Finnish", expr, "⠦⠼⠁⠀⠼⠚⠀⠼⠚⠀⠼⠁⠴⠀⠐⠐⠀⠦⠼⠚⠀⠼⠁⠀⠼⠚⠀⠼⠚⠴⠀⠐⠐⠀⠦⠼⠚⠀⠼⠚⠀⠼⠁⠀⠼⠚⠴⠀⠐⠐⠀⠦⠼⠁⠀⠼⠚⠀⠼⠚⠀⠼⠁⠴");
}
-// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
+
#[test]
fn p42_determinant() {
let expr = "
@@ -1520,9 +1528,11 @@ fn p42_determinant() {
b
";
test_braille("Finnish", expr, "⠸⠁⠀⠖⠃ ⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃ ⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃");
+ // Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
+ // Rules fix: There are extra whitespaces between the elements of the matrix.
}
-// Dots 156 to signify the bar over "arc"
+
#[test]
fn p45_arcsin_with_bar_over() {
let expr = "
@@ -1534,6 +1544,8 @@ fn p45_arcsin_with_bar_over() {
x
";
test_braille("Finnish", expr, "⠁⠗⠉⠱⠀⠎⠊⠝⠀⠭");
+ // Dots 156 to signify the bar over "arc".
+ // Rules fix: There should be a whitespace after the bar.
}
#[test]
@@ -1585,6 +1597,7 @@ fn line_under_parentheses() {
1
";
test_braille("Finnish", expr, "⠦⠎⠀⠌⠼⠃⠴⠤⠀⠖⠼⠁");
+ // Needs parentheses so that grouping works.
}
// 'Change of zone' dot 5 is used after the limit subscript notation.
From 319cbb9af2b95d78cdd83554012f75b4300d5be7 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 14:24:16 +0300
Subject: [PATCH 52/77] Delete comment about using BANA
The test file contained information relating to BANA that is not correct.
---
tests/braille/Finnish/spec.rs | 8 --------
1 file changed, 8 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 050b35dc9..6ee5499f2 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2,14 +2,6 @@
//
// Changes to the specifications in the rules and tests in MathCAT
// Some changes have been made to the rules and these tests test against the modified rules. The changes have been made, because the specification is for printed braille and intended for people authoring mathematics braille. Some things have been changed to be consistent in all situations and to work in the braille display context.
-
-// UEB tests for the basic mathml tags
-// Initial tests are from BANA guidelines, mostly about initial chars for code switching
-// http://www.brailleauthority.org/ueb/ueb_math_guidance/final_for_posting_ueb_math_guidance_may_2019_102419.pdf
-// These tests start with "bana_"
-//
-// Many come from (refer to) https://iceb.org/guidelines_for_technical_material_2014.pdf
-// For example, "fraction_6_1_1" is a fraction example from section 6.1, and is the first example there.
use crate::common::*;
use anyhow::Result;
From 54e005ea3c6da39c5552d877c4ca2d342323e20d Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 14:36:19 +0300
Subject: [PATCH 53/77] Remove spacing
---
tests/braille/Finnish/spec.rs | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 6ee5499f2..841c74e48 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -6,7 +6,6 @@ use crate::common::*;
use anyhow::Result;
// Finnish spec tests
-
// Page and some other identification has been added to the function name, so you can figure out which expression the test in based on. Some tests are variations of the "official" test.
// Grouping numbers
From 577fc57528ed5449df3653433de5ea059a95a5a1 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 14:36:43 +0300
Subject: [PATCH 54/77] Explain test better for 'dropped dots' in fractions
When the fraction ends in a parenthesis (dots 356), the dot 6 is used to end the 'dropped dots' zone, so it is not confused with 'dropped dots' for number 0 (dots 356).
---
tests/braille/Finnish/spec.rs | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 841c74e48..f8279d1f7 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -252,6 +252,7 @@ fn p15_less_than_or_equal_to() -> Result<()> {
}
// Fractions with 'dropped dots'.
+// When the fraction ends in a parenthesis (dots 356), the dot 6 is used to end the 'dropped dots' zone, so it is not confused with 'dropped dots' for number 0 (dots 356).
#[test]
fn p15_fractions_minus() -> Result<()> {
let expr = "
From 02cda5a52c81bd2d073eb06b47f7f980befa9662 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 15:54:11 +0300
Subject: [PATCH 55/77] Fix spacing
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index f8279d1f7..e18000cc6 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -325,7 +325,7 @@ fn p16_fractional() -> Result<()> {
#[test]
fn p16_absolute_value() -> Result<()> {
- let expr = "
+ let expr = "
|
From 2f4d05dea44cdb68e7fab8f5d54670b9b724f366 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 15:54:30 +0300
Subject: [PATCH 56/77] Fix division sign to be ratio sign in braille
---
tests/braille/Finnish/spec.rs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index e18000cc6..648e1a7d7 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -415,8 +415,7 @@ fn p17_multiple_operations() -> Result<()> {
2
";
- test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠌⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬")?;
- // : as a division sign
+ test_braille("Finnish", expr, "⠼⠑⠀⠄⠼⠉⠬⠀⠖⠦⠼⠓⠁⠀⠤⠼⠋⠚⠴⠀⠒⠼⠉⠀⠤⠦⠼⠃⠀⠖⠼⠙⠴⠬")?;
return Ok(());
}
From 53bc0d5acb5485a6d961ad7f510ef32a36fac11e Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 15:54:53 +0300
Subject: [PATCH 57/77] Improve comments and move above tests
---
tests/braille/Finnish/spec.rs | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 648e1a7d7..11ae1c1e8 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -507,6 +507,7 @@ fn p19_fraction_multiplication_Finnish_notation_multiscripts() -> Result<()> {
return Ok(());
}
+// This is Finnish notation where the numerator and denomator is multiplied by the same expression that is in the pre-supercript. Structure is always: [multiplicator][parenthesis]
#[test]
fn p19_fraction_multiplication_Finnish_notation_multiscripts_2() -> Result<()> {
let expr = "
@@ -565,6 +566,7 @@ fn p22_fraction_division_Finnish_notation_msup() -> Result<()> {
return Ok(());
}
+// This is Finnish notation for dividing the numerator and denominator by the same expression. It is always of the form: [parenthesis][divisor]
#[test]
fn p22_fraction_division_Finnish_notation_msup_2() -> Result<()> {
let expr = "
@@ -621,6 +623,8 @@ fn p23_equation_1_with_invisible_multiplication() -> Result<()> {
return Ok(());
}
+// This is Finnish notation. The bar | is used to denote that an operation is done on both sides of the equation.
+// Here the equation is divided by five on both sides.
#[test]
fn p22_equation_solving_notation() -> Result<()> {
let expr = "
@@ -634,10 +638,11 @@ fn p22_equation_solving_notation() -> Result<()> {
5
";
test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠌⠼⠑")?;
- // Context: the equation is divided by five on both sides.
+
return Ok(());
}
+// This is Finnish notation. The bar | is used to denote that an operation is done on both sides of the equation. This is not a real life example, but a string of mark up that should produce the output in the test.
#[test]
fn operate_by_on_both_sides() -> Result<()> {
let expr = "
@@ -669,7 +674,6 @@ fn operate_by_on_both_sides() -> Result<()> {
5
";
test_braille("Finnish", expr, "⠀⠀⠸⠀⠖⠼⠑⠀⠀⠸⠀⠤⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠄⠼⠑⠀⠀⠸⠀⠒⠼⠑⠀⠀⠸ ⠦⠴⠬⠀⠀⠸⠀⠌⠼⠑")?;
- // Context: When marking up operation on both sides on an equation, this is the correct result.
return Ok(());
}
@@ -717,6 +721,7 @@ fn p24_fraction_2() -> Result<()> {
return Ok(());
}
+// Rule fix: Fractions' division requires double parentheses so that the order of operations is respected.
#[test]
fn p25_long_fraction() -> Result<()> {
let expr = "
@@ -763,7 +768,6 @@ fn p25_long_fraction() -> Result<()> {
";
test_braille("Finnish", expr, "⠦⠦⠭⠬⠀⠤⠼⠛⠀⠭⠀⠖⠼⠁⠃⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠃⠚⠴⠴⠀⠒⠦⠦⠭⠬⠀⠤⠼⠓⠀⠭⠀⠖⠼⠁⠑⠴⠀⠌⠦⠼⠙⠀⠭⠀⠤⠼⠁⠋⠴⠴")?;
- // Rule fix: Fractions' division requires double parentheses so that the order of operations is respected.
return Ok(());
}
From 5d3f584a4ab2f586cd345321aeeef02fbd829fa7 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Wed, 9 Sep 2026 15:55:11 +0300
Subject: [PATCH 58/77] Fix overline example and clarify comment
---
tests/braille/Finnish/spec.rs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 11ae1c1e8..6a4b60175 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1001,22 +1001,22 @@ fn msub_parentheses() -> Result<()> {
return Ok(());
}
-// Overline notation comes after the subscript
+// Overline braille notation (dots 156) comes after the (sub)script.
+// For the rule: order should be first subscript and then superscript
#[test]
fn msub_with_vector() -> Result<()> {
let expr = "
-
+
a
- b
+ ¯
+
+ b
- ¯
-
+
1
";
test_braille("Finnish", expr, "⠁⠡⠃⠱⠀⠖⠼⠁")?;
- // For the rule: order should be first subscript and then superscript
return Ok(());
}
From 8a68af6e36282d5f65ceb92e3acff26853ce8f85 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 11 Sep 2026 10:56:27 +0300
Subject: [PATCH 59/77] Remove bold from the braille
In Finnish notation the regular letter is used for denoting the bold letters.
---
Rules/Braille/Finnish/unicode-full.yaml | 106 ++++++++++++------------
tests/braille/Finnish/spec.rs | 40 +++++----
2 files changed, 76 insertions(+), 70 deletions(-)
diff --git a/Rules/Braille/Finnish/unicode-full.yaml b/Rules/Braille/Finnish/unicode-full.yaml
index ff3e5ed58..948d3d06a 100644
--- a/Rules/Braille/Finnish/unicode-full.yaml
+++ b/Rules/Braille/Finnish/unicode-full.yaml
@@ -289,59 +289,59 @@
- "ℜ": [t: "DCL⠗"] # 0x211C (Fraktur Capital R)
- "ℨ": [t: "DCL⠵"] # 0x2128 (Fraktur Capital Z)
- "ℭ": [t: "DCL⠉"] # 0x22DC (Fraktur Capital C)
- - "𝕒": [t: "𝔹L⠁"] # 0x1d552
- - "𝕓": [t: "𝔹L⠃"] # 0x1d553
- - "𝕔": [t: "𝔹L⠉"] # 0x1d554
- - "𝕕": [t: "𝔹L⠙"] # 0x1d555
- - "𝕖": [t: "𝔹L⠑"] # 0x1d556
- - "𝕗": [t: "𝔹L⠋"] # 0x1d557
- - "𝕘": [t: "𝔹L⠛"] # 0x1d558
- - "𝕙": [t: "𝔹L⠓"] # 0x1d559
- - "𝕚": [t: "𝔹L⠊"] # 0x1d55a
- - "𝕛": [t: "𝔹L⠚"] # 0x1d55b
- - "𝕜": [t: "𝔹L⠅"] # 0x1d55c
- - "𝕝": [t: "𝔹L⠇"] # 0x1d55d
- - "𝕞": [t: "𝔹L⠍"] # 0x1d55e
- - "𝕟": [t: "𝔹L⠝"] # 0x1d55f
- - "𝕠": [t: "𝔹L⠕"] # 0x1d560
- - "𝕡": [t: "𝔹L⠏"] # 0x1d561
- - "𝕢": [t: "𝔹L⠟"] # 0x1d562
- - "𝕣": [t: "𝔹L⠗"] # 0x1d563
- - "𝕤": [t: "𝔹L⠎"] # 0x1d564
- - "𝕥": [t: "𝔹L⠞"] # 0x1d565
- - "𝕦": [t: "𝔹L⠥"] # 0x1d566
- - "𝕧": [t: "𝔹L⠧"] # 0x1d567
- - "𝕨": [t: "𝔹L⠺"] # 0x1d568
- - "𝕩": [t: "𝔹L⠭"] # 0x1d569
- - "𝕪": [t: "𝔹L⠽"] # 0x1d56a
- - "𝕫": [t: "𝔹L⠵"] # 0x1d56b
-
- - "𝔸": [t: "𝔹CL⠁"] # 0x1d538
- - "𝔹": [t: "𝔹CL⠃"] # 0x1d539
- - "ℂ": [t: "𝔹CL⠉"] # 0x2102
- - "𝔻": [t: "𝔹CL⠙"] # 0x1d53b
- - "𝔼": [t: "𝔹CL⠑"] # 0x1d53c
- - "𝔽": [t: "𝔹CL⠋"] # 0x1d53d
- - "𝔾": [t: "𝔹CL⠛"] # 0x1d53e
- - "ℍ": [t: "𝔹CL⠓"] # 0x210d
- - "𝕀": [t: "𝔹CL⠊"] # 0x1d540
- - "𝕁": [t: "𝔹CL⠚"] # 0x1d541
- - "𝕂": [t: "𝔹CL⠅"] # 0x1d542
- - "𝕃": [t: "𝔹CL⠇"] # 0x1d543
- - "𝕄": [t: "𝔹CL⠍"] # 0x1d544
- - "ℕ": [t: "𝔹CL⠝"] # 0x2115
- - "𝕆": [t: "𝔹CL⠕"] # 0x1d546
- - "ℙ": [t: "𝔹CL⠏"] # 0x2119
- - "ℚ": [t: "𝔹CL⠟"] # 0x211a
- - "ℝ": [t: "𝔹CL⠗"] # 0x211d
- - "𝕊": [t: "𝔹CL⠎"] # 0x1d54a
- - "𝕋": [t: "𝔹CL⠞"] # 0x1d54b
- - "𝕌": [t: "𝔹CL⠥"] # 0x1d54c
- - "𝕍": [t: "𝔹CL⠧"] # 0x1d54d
- - "𝕎": [t: "𝔹CL⠺"] # 0x1d54e
- - "𝕏": [t: "𝔹CL⠭"] # 0x1d54f
- - "𝕐": [t: "𝔹CL⠽"] # 0x1d550
- - "ℤ": [t: "𝔹CL⠵"] # 0x2124
+ - "𝕒": [T: "L⠁"] # 0x1d552
+ - "𝕓": [T: "L⠃"] # 0x1d553
+ - "𝕔": [T: "L⠉"] # 0x1d554
+ - "𝕕": [T: "L⠙"] # 0x1d555
+ - "𝕖": [T: "L⠑"] # 0x1d556
+ - "𝕗": [T: "L⠋"] # 0x1d557
+ - "𝕘": [T: "L⠛"] # 0x1d558
+ - "𝕙": [T: "L⠓"] # 0x1d559
+ - "𝕚": [T: "L⠊"] # 0x1d55a
+ - "𝕛": [T: "L⠚"] # 0x1d55b
+ - "𝕜": [T: "L⠅"] # 0x1d55c
+ - "𝕝": [T: "L⠇"] # 0x1d55d
+ - "𝕞": [T: "L⠍"] # 0x1d55e
+ - "𝕟": [T: "L⠝"] # 0x1d55f
+ - "𝕠": [T: "L⠕"] # 0x1d560
+ - "𝕡": [T: "L⠏"] # 0x1d561
+ - "𝕢": [T: "L⠟"] # 0x1d562
+ - "𝕣": [T: "L⠗"] # 0x1d563
+ - "𝕤": [T: "L⠎"] # 0x1d564
+ - "𝕥": [T: "L⠞"] # 0x1d565
+ - "𝕦": [T: "L⠥"] # 0x1d566
+ - "𝕧": [T: "L⠧"] # 0x1d567
+ - "𝕨": [T: "L⠺"] # 0x1d568
+ - "𝕩": [T: "L⠭"] # 0x1d569
+ - "𝕪": [T: "L⠽"] # 0x1d56a
+ - "𝕫": [T: "L⠵"] # 0x1d56b
+
+ - "𝔸": [T: "CL⠁"] # 0x1d538
+ - "𝔹": [T: "CL⠃"] # 0x1d539
+ - "ℂ": [T: "CL⠉"] # 0x2102
+ - "𝔻": [T: "CL⠙"] # 0x1d53b
+ - "𝔼": [T: "CL⠑"] # 0x1d53c
+ - "𝔽": [T: "CL⠋"] # 0x1d53d
+ - "𝔾": [T: "CL⠛"] # 0x1d53e
+ - "ℍ": [T: "CL⠓"] # 0x210d
+ - "𝕀": [T: "CL⠊"] # 0x1d540
+ - "𝕁": [T: "CL⠚"] # 0x1d541
+ - "𝕂": [T: "CL⠅"] # 0x1d542
+ - "𝕃": [T: "CL⠇"] # 0x1d543
+ - "𝕄": [T: "CL⠍"] # 0x1d544
+ - "ℕ": [T: "CL⠝"] # 0x2115
+ - "𝕆": [T: "CL⠕"] # 0x1d546
+ - "ℙ": [T: "CL⠏"] # 0x2119
+ - "ℚ": [T: "CL⠟"] # 0x211a
+ - "ℝ": [T: "CL⠗"] # 0x211d
+ - "𝕊": [T: "CL⠎"] # 0x1d54a
+ - "𝕋": [T: "CL⠞"] # 0x1d54b
+ - "𝕌": [T: "CL⠥"] # 0x1d54c
+ - "𝕍": [T: "CL⠧"] # 0x1d54d
+ - "𝕎": [T: "CL⠺"] # 0x1d54e
+ - "𝕏": [T: "CL⠭"] # 0x1d54f
+ - "𝕐": [T: "CL⠽"] # 0x1d550
+ - "ℤ": [T: "CL⠵"] # 0x2124
- "𝖆": [t: "BDL⠁"] # 0x1d586
- "𝖇": [t: "BDL⠃"] # 0x1d587
- "𝖈": [t: "BDL⠉"] # 0x1d588
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 6a4b60175..edc83ab7e 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1020,6 +1020,7 @@ fn msub_with_vector() -> Result<()> {
return Ok(());
}
+// Overline braille notation (dots 156) comes after the (sub)script.
#[test]
fn msub_with_vector_with_sub_text() -> Result<()> {
let expr = "
@@ -1036,10 +1037,10 @@ fn msub_with_vector_with_sub_text() -> Result<()> {
";
test_braille("Finnish", expr, "⠁⠡⠞⠥⠅⠊⠱⠀⠖⠼⠁")?;
- // For the rule: order should be first subscript and then superscript
return Ok(());
}
+// First the subscript and then the superscript.
#[test]
fn msubsup() -> Result<()> {
let expr = "
@@ -1055,6 +1056,7 @@ fn msubsup() -> Result<()> {
return Ok(());
}
+// The scripts should have parentheses for easier reading.
#[test]
fn msubsup_parentheses_in_sub_and_sup() -> Result<()> {
let expr = "
@@ -1316,6 +1318,7 @@ fn p40_p_or_q() -> Result<()> {
return Ok(());
}
+// The colon : should be written directly after the function f (and similar). This is unlike when it is used as a division sign and for ratio.
#[test]
fn p41_function_definition() -> Result<()> {
let expr = "
@@ -1332,6 +1335,7 @@ fn p41_function_definition() -> Result<()> {
return Ok(());
}
+// Here the bar | should have whitespace on both sides of the character.
#[test]
fn p41_inverse_function() -> Result<()> {
let expr = "
@@ -1434,8 +1438,8 @@ fn p41_function_with_parts_with_arrow() -> Result<()> {
return Ok(());
}
-#[test]
// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
+#[test]
fn p40_function_with_parts() -> Result<()> {
let expr = "
f
@@ -1499,6 +1503,8 @@ fn p40_function_with_parts() -> Result<()> {
return Ok(());
}
+// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
+// In the matrix the parentheses are repeated for every row.
#[test]
fn p42_matrix() -> Result<()> {
let expr = "
@@ -1570,6 +1576,8 @@ fn p42_matrix() -> Result<()> {
}
+// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
+// In the determinant the vertical bar is repeated for every row.
#[test]
fn p42_determinant() -> Result<()> {
let expr = "
@@ -1609,12 +1617,10 @@ fn p42_determinant() -> Result<()> {
b
";
test_braille("Finnish", expr, "⠸⠁⠀⠖⠃⠀⠁⠀⠤⠃⠸⠀⠐⠐⠀⠸⠁⠀⠤⠃⠀⠁⠀⠖⠃⠸⠀⠶⠼⠙⠀⠁⠃")?;
- // Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
- // Rules fix: There are extra whitespaces between the elements of the matrix.
return Ok(());
}
-
+// Dots 156 to signify the bar over "arc".
#[test]
fn p45_arcsin_with_bar_over() -> Result<()> {
let expr = "
@@ -1626,8 +1632,6 @@ fn p45_arcsin_with_bar_over() -> Result<()> {
x
";
test_braille("Finnish", expr, "⠁⠗⠉⠱⠀⠎⠊⠝⠀⠭")?;
- // Dots 156 to signify the bar over "arc".
- // Rules fix: There should be a whitespace after the bar.
return Ok(());
}
@@ -1668,6 +1672,7 @@ fn line_under_terminated_by_space() -> Result<()> {
return Ok(());
}
+// Needs parentheses so that grouping is clear.
#[test]
fn line_under_parentheses() -> Result<()> {
let expr = "
@@ -1683,11 +1688,10 @@ fn line_under_parentheses() -> Result<()> {
1
";
test_braille("Finnish", expr, "⠦⠎⠀⠌⠼⠃⠴⠤⠀⠖⠼⠁")?;
- // Needs parentheses so that grouping works.
return Ok(());
}
-// 'Change of zone' dot 5 is used after the limit subscript notation.
+// 'Change of zone' dot 5 is used after the limit subscript notation. The subscript is in parentheses for easier reading.
#[test]
fn p48_limit_right_hand_approaching_Finnish_notation() -> Result<()> {
let expr = "
@@ -1713,7 +1717,7 @@ fn p48_limit_right_hand_approaching_Finnish_notation() -> Result<()> {
return Ok(());
}
-// 'Change of zone' dot 5 is used after the limit subscript notation.
+// 'Change of zone' dot 5 is used after the limit subscript notation. The subscript is in parentheses for easier reading.
#[test]
fn p48_limit_right_hand_approaching_Finnish_notation_with_msup() -> Result<()> {
let expr = "
@@ -1741,7 +1745,7 @@ fn p48_limit_right_hand_approaching_Finnish_notation_with_msup() -> Result<()> {
return Ok(());
}
-// 'Change of zone' dot 5 is used after the limit subscript notation.
+// 'Change of zone' dot 5 is used after the limit subscript notation. The subscript is in parentheses for easier reading.
#[test]
fn limit_approaches_from_below() -> Result<()> {
let expr = "
@@ -1766,7 +1770,7 @@ fn limit_approaches_from_below() -> Result<()> {
return Ok(());
}
-// This is a hack, so the Finnish substitution notation for integral would work. The intent is might be wrong, but that is what the notation means.
+// Finnish integral substitution notation. The intent might be wrong, but that is what the notation means.
#[test]
fn p49_integral_with_Finnish_notation_for_substitution() -> Result<()> {
let expr = "
@@ -1802,6 +1806,7 @@ fn p49_integral_with_Finnish_notation_for_substitution() -> Result<()> {
}
// Markup for lower and upper bounds for summation, product, intersection, union and such. "Equal to" character is replaced lower (dots 26) and upper (dots 35) bounds.
+// Parentheses are added for clarity. Dot 5 is used to end the zone of the upper bound.
#[test]
fn p49_summation_with_lower_upper_bounds() -> Result<()> {
let expr = "
@@ -1824,10 +1829,11 @@ fn p49_summation_with_lower_upper_bounds() -> Result<()> {
";
test_braille("Finnish", expr, "⠸⠎⠡⠊⠢⠼⠚⠔⠝⠐⠦⠋⠡⠊⠀⠭⠡⠊⠴")?;
- // Parentheses are added for clarity. Dot 5 is used to end the zone of the upper bound.
return Ok(());
}
+// Markup for lower and upper bounds for summation, product, intersection, union and such. "Equal to" character is replaced lower (dots 26) and upper (dots 35) bounds.
+// Dot 5 is used to end the zone of the upper bound.
#[test]
fn p49_union_with_lower_upper_bounds() -> Result<()> {
let expr = "
@@ -1846,10 +1852,11 @@ fn p49_union_with_lower_upper_bounds() -> Result<()> {
";
test_braille("Finnish", expr, "⠳⠖⠡⠊⠢⠼⠁⠔⠝⠐⠠⠁⠡⠊")?;
- // Dot 5 is used to end the zone of the upper bound.
return Ok(());
}
+// The test combines subscript notation and the lower and upper bound notation. "Equal to" character is replaced lower (dots 26) and upper (dots 35) bounds.
+// Dot 5 is used to end the zone of the upper bound.
#[test]
fn p49_sequence_with_lower_upper_bounds() -> Result<()> {
let expr = "
@@ -1870,11 +1877,11 @@ fn p49_sequence_with_lower_upper_bounds() -> Result<()> {
∞
";
- test_braille("Finnish", expr, "⠦⠭⠡⠝⠴⠡⠝⠢⠼⠁⠬⠿")?;
- // Dot 5 is used to end the zone of the upper bound.
+ test_braille("Finnish", expr, "⠦⠭⠡⠝⠴⠡⠝⠢⠼⠁⠔⠿")?;
return Ok(());
}
+// Rule FIX: Real numbers character ℝ is wrong in braille and should only be ⠠⠗ (cap r)
#[test]
fn p50_such_that_y_greater_than_x() -> Result<()> {
let expr = "
@@ -1893,7 +1900,6 @@ fn p50_such_that_y_greater_than_x() -> Result<()> {
x
";
test_braille("Finnish", expr, "⠳⠂⠭⠀⠳⠔⠠⠗⠂⠀⠳⠢⠽⠀⠳⠔⠠⠗⠆⠀⠽⠀⠱⠀⠭")?;
- // Sami, FI: The comma , is not produced by MathCAT. Should be.
return Ok(());
}
From aaf085dca8091e64e7ed436fdb48c51aa238e40f Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 11 Sep 2026 11:44:30 +0300
Subject: [PATCH 60/77] Fixing documentation
---
tests/braille/Finnish/spec.rs | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index edc83ab7e..dce7cac34 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1881,7 +1881,7 @@ fn p49_sequence_with_lower_upper_bounds() -> Result<()> {
return Ok(());
}
-// Rule FIX: Real numbers character ℝ is wrong in braille and should only be ⠠⠗ (cap r)
+// Regular letters are used in the bold lettering.
#[test]
fn p50_such_that_y_greater_than_x() -> Result<()> {
let expr = "
@@ -1920,6 +1920,7 @@ fn p50_cube_root() -> Result<()> {
return Ok(());
}
+// The ⠯ character is used between the elements in the binomial.
#[test]
fn p50_binomial_with_factorial() -> Result<()> {
let expr = r#"
@@ -1952,7 +1953,6 @@ fn p50_binomial_with_factorial() -> Result<()> {
"#;
test_braille("Finnish", expr, "⠦⠼⠋⠯⠀⠼⠙⠴⠀⠶⠼⠋⠠⠲⠀⠌⠷⠼⠙⠠⠲⠀⠦⠼⠋⠀⠤⠼⠙⠠⠴⠠⠲⠾")?;
- // The ⠯ character is used between the elements in the binomial.
return Ok(());
}
@@ -1988,8 +1988,6 @@ fn p50_conditional_probability() -> Result<()> {
return Ok(());
}
-
-
#[test]
fn p50_alternative_derivative_1() -> Result<()> {
let expr = "
@@ -2163,6 +2161,7 @@ fn p52_quadratic_formula() -> Result<()> {
return Ok(());
}
+// Sub- and superscripts are used before the atom sign.
#[test]
fn p63_O16() -> Result<()> {
// From MathType
@@ -2171,6 +2170,7 @@ fn p63_O16() -> Result<()> {
return Ok(());
}
+// The numbers are written as 'dropped dots' (like in fractions) right after the atom. No whitespace between the atoms.
#[test]
fn p64_chemical_equation_1() -> Result<()> {
// From MathType
@@ -2186,6 +2186,7 @@ fn p64_sodium_ion() -> Result<()> {
return Ok(());
}
+// Whitespace before the ion's plus or minus sign if there is a number before it. Parentheses for clarity.
#[test]
fn p64_copper_ion() -> Result<()> {
// From MathType
@@ -2201,6 +2202,7 @@ fn p64_chemistry_1() -> Result<()> {
return Ok(());
}
+// Whitespace before the dash, not after.
#[test]
fn p64_chemistry_bond_1() -> Result<()> {
let expr = "H-H";
@@ -2208,6 +2210,7 @@ fn p64_chemistry_bond_1() -> Result<()> {
return Ok(());
}
+// Whitespace before the colon, not after.
#[test]
fn p64_chemistry_bond_1_alternative() -> Result<()> {
let expr = "H:H";
@@ -2215,6 +2218,7 @@ fn p64_chemistry_bond_1_alternative() -> Result<()> {
return Ok(());
}
+// Whitespace before the dashes, not after.
#[test]
fn p64_chemistry_bond_2() -> Result<()> {
let expr = "O=O";
@@ -2222,6 +2226,7 @@ fn p64_chemistry_bond_2() -> Result<()> {
return Ok(());
}
+// Whitespace before the double colon, not after.
#[test]
fn p64_chemistry_bond_2_alternative() -> Result<()> {
let expr = "O∷O";
@@ -2229,6 +2234,7 @@ fn p64_chemistry_bond_2_alternative() -> Result<()> {
return Ok(());
}
+// Whitespace before the dashes, not after.
#[test]
fn p64_chemistry_bond_3() -> Result<()> {
let expr = "N≡N";
From 6eaf41e36b6c99a8c7f5097aba3b48aa6c0c5f4b Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 11 Sep 2026 12:35:07 +0300
Subject: [PATCH 61/77] Write MathML for new tests
---
tests/braille/Finnish/spec.rs | 213 ++++++++++++++++++++++++++++++++++
1 file changed, 213 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index dce7cac34..126b9003c 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2241,3 +2241,216 @@ fn p64_chemistry_bond_3() -> Result<()> {
test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
return Ok(());
}
+
+// New tests start here 11.9.2026
+
+#[test]
+fn approx_1() -> Result<()> {
+ let expr = "
+
+ 230
+ ≈
+ 200
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn approx_2() -> Result<()> {
+ let expr = "
+
+ 80
+ +
+ 60
+ ≈
+ 150
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn large_numbers_1() -> Result<()> {
+ let expr = "
+
+ 20.000
+ +
+ 3000
+ =
+ 23.000
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn large_numbers_2() -> Result<()> {
+ let expr = "
+
+ 88.888
+ −
+ 8080
+ =
+ 80.808
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn comparison_multiple_numbers() -> Result<()> {
+ let expr = "
+
+ 1000
+ <
+ 9000
+ <
+ 10.000
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn division_slash_1() -> Result<()> {
+ let expr = "
+
+ 9
+ /
+ 3
+ =
+ 3
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn division_slash_2() -> Result<()> {
+ let expr = "
+
+ 100
+ /
+ 2
+ =
+ 50
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn units_grams() -> Result<()> {
+ let expr = "
+ 380
+ g
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn test_default() -> Result<()> {
+ let expr = "
+ 4
+ kg
+ −
+ 150
+ g
+ =
+ 3,850
+ kg
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn invisible_plus_with_mixed_fraction_1() -> Result<()> {
+ let expr = "
+ 1
+
+
+ 1
+ 2
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn invisible_plus_with_mixed_fraction_2() -> Result<()> {
+ let expr = "
+ 1
+
+
+ 1
+ 2
+
+ −
+ 2
+
+
+ 1
+ 3
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+#[test]
+fn count_with_steps() -> Result<()> {
+ let expr = "
+
+
+
+ (
+ 10
+ −
+ 6
+ )
+ ⋅
+ (
+ 5
+ +
+ 5
+ )
+
+
+
+
+ =
+ 4
+ ⋅
+ 10
+
+
+
+
+ =
+ 40
+
+
+
+";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
+
+
+#[test]
+fn test_default() -> Result<()> {
+ let expr = "";
+ test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ return Ok(());
+}
\ No newline at end of file
From 3758b784347d1db24d482d873639737374c4fb01 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 10:32:06 +0300
Subject: [PATCH 62/77] Write braille markup for new tests
---
tests/braille/Finnish/spec.rs | 37 +++++++++++++++--------------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 126b9003c..6984b7c10 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2253,7 +2253,7 @@ fn approx_1() -> Result<()> {
200
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠃⠉⠚⠀⠸⠶⠼⠃⠚⠚")?;
return Ok(());
}
@@ -2268,7 +2268,7 @@ fn approx_2() -> Result<()> {
150
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠓⠚⠀⠖⠼⠋⠚⠀⠸⠶⠼⠁⠑⠚")?;
return Ok(());
}
@@ -2283,7 +2283,7 @@ fn large_numbers_1() -> Result<()> {
23.000
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠃⠚⠄⠚⠚⠚⠀⠖⠼⠉⠚⠚⠚⠀⠶⠼⠃⠉⠄⠚⠚⠚")?;
return Ok(());
}
@@ -2298,7 +2298,7 @@ fn large_numbers_2() -> Result<()> {
80.808
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠓⠓⠄⠓⠓⠓⠀⠤⠼⠓⠚⠓⠚⠀⠶⠼⠓⠚⠄⠓⠚⠓")?;
return Ok(());
}
@@ -2313,7 +2313,7 @@ fn comparison_multiple_numbers() -> Result<()> {
10.000
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠚⠚⠚⠀⠣⠀⠼⠊⠚⠚⠚⠀⠣⠀⠼⠁⠚⠄⠚⠚⠚")?;
return Ok(());
}
@@ -2328,7 +2328,7 @@ fn division_slash_1() -> Result<()> {
3
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠊⠀⠌⠼⠉⠀⠶⠼⠉")?;
return Ok(());
}
@@ -2343,7 +2343,7 @@ fn division_slash_2() -> Result<()> {
50
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠚⠚⠀⠌⠼⠃⠀⠶⠼⠑⠚")?;
return Ok(());
}
@@ -2353,12 +2353,12 @@ fn units_grams() -> Result<()> {
380
g
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠉⠓⠚⠀⠛")?;
return Ok(());
}
#[test]
-fn test_default() -> Result<()> {
+fn units_kilograms_and_grams() -> Result<()> {
let expr = "
4
kg
@@ -2369,10 +2369,11 @@ fn test_default() -> Result<()> {
3,850
kg
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠙⠀⠅⠛⠀⠤⠼⠁⠑⠚⠀⠛⠀⠶⠼⠉⠂⠓⠑⠚⠀⠅⠛")?;
return Ok(());
}
+// Invisible plus is replaced with the number sign (dots 3456) in a mixed fraction.
#[test]
fn invisible_plus_with_mixed_fraction_1() -> Result<()> {
let expr = "
@@ -2383,10 +2384,11 @@ fn invisible_plus_with_mixed_fraction_1() -> Result<()> {
2
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠼⠁⠆")?;
return Ok(());
}
+// Invisible plus is replaced with the number sign (dots 3456) in a mixed fraction.
#[test]
fn invisible_plus_with_mixed_fraction_2() -> Result<()> {
let expr = "
@@ -2404,10 +2406,11 @@ fn invisible_plus_with_mixed_fraction_2() -> Result<()> {
3
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠼⠁⠆⠀⠤⠼⠃⠼⠁⠒")?;
return Ok(());
}
+// The same solution is used for counting in steps as is in the matrices. A custom [space][dot 5][dot 5][space] separates rows from each other.
#[test]
fn count_with_steps() -> Result<()> {
let expr = "
@@ -2443,14 +2446,6 @@ fn count_with_steps() -> Result<()> {
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠦⠼⠁⠚⠀⠤⠼⠋⠴⠀⠄⠦⠼⠑⠀⠖⠼⠑⠴⠀⠐⠐⠀⠶⠼⠙⠀⠄⠼⠁⠚⠀⠐⠐⠀⠶⠼⠙⠚")?;
return Ok(());
}
-
-
-#[test]
-fn test_default() -> Result<()> {
- let expr = "";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
- return Ok(());
-}
\ No newline at end of file
From 8f5f50d8f5eef494563d8c29bb4197c1d740a5c5 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 14:59:33 +0300
Subject: [PATCH 63/77] Explanation about grouping numbers and letters
---
tests/braille/Finnish/spec.rs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 126b9003c..a04e87c22 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -8,8 +8,10 @@ use anyhow::Result;
// Finnish spec tests
// Page and some other identification has been added to the function name, so you can figure out which expression the test in based on. Some tests are variations of the "official" test.
-// Grouping numbers
+// In general numbers and variables are separated from each other with a space, so the variables (most often letters) are not interpreted as numbers.
+// Variables can be written with no space between them, since there is not similar misinterpretation risk.
+// Grouping numbers
// No example in the specs
#[test]
fn p7_no_grouping_in_four_digit_numbers() -> Result<()> {
From 01d0f5212aef3120432e70ddadc3d63d4fb2336b Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 14:59:53 +0300
Subject: [PATCH 64/77] Add new test on variables being next to each other
---
tests/braille/Finnish/spec.rs | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index a04e87c22..0ab4fda64 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -230,6 +230,20 @@ fn p15_greater_than() -> Result<()> {
return Ok(());
}
+// No space required between variables.
+#[test]
+fn greater_than_with_more_variables() -> Result<()> {
+ let expr = "
+ 2
+ x
+ y
+ >
+ 6
+";
+ test_braille("Finnish", expr, "⠼⠃⠀⠭⠽⠀⠱⠀⠼⠋")?;
+ return Ok(());
+}
+
#[test]
fn p15_greater_than_or_equal_to() -> Result<()> {
let expr = "
From b30e10101514b8c1aa18c6ea0938f186e960f944 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:00:36 +0300
Subject: [PATCH 65/77] Change colon to be output as a colon
---
tests/braille/Finnish/spec.rs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 0ab4fda64..d224f4318 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -317,7 +317,7 @@ fn p16_division() -> Result<()> {
:
3
";
- test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠌⠼⠉")?;
+ test_braille("Finnish", expr, "⠦⠼⠋⠀⠭⠀⠖⠼⠉⠀⠭⠴⠀⠒⠼⠉")?;
return Ok(());
}
@@ -653,7 +653,7 @@ fn p22_equation_solving_notation() -> Result<()> {
:
5
";
- test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠌⠼⠑")?;
+ test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠀⠒⠼⠑")?;
return Ok(());
}
@@ -1334,7 +1334,7 @@ fn p40_p_or_q() -> Result<()> {
return Ok(());
}
-// The colon : should be written directly after the function f (and similar). This is unlike when it is used as a division sign and for ratio.
+// The colon : should be written directly after the function f (and similar). This is different compared to it being used as a division sign and as a ratio.
#[test]
fn p41_function_definition() -> Result<()> {
let expr = "
From 308d98a30425c164b59be2f1cb607f1c1f3c9b05 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:01:01 +0300
Subject: [PATCH 66/77] Add another case for dividing a fraction notation
---
tests/braille/Finnish/spec.rs | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index d224f4318..f334246ad 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -601,6 +601,26 @@ fn p22_fraction_division_Finnish_notation_msup_2() -> Result<()> {
return Ok(());
}
+// It could possible to have the same structure as a mmultiscript as before, so here is a test for that. Output is the same as before.
+#[test]
+fn p22_fraction_division_Finnish_notation_mmultiscripts() -> Result<()> {
+ let expr = "
+
+
+ 2
+ 4
+
+
+
+ (
+ 2
+
+
+";
+ test_braille("Finnish", expr, "⠼⠃⠲⠣⠼⠃")?;
+ return Ok(());
+}
+
#[test]
fn p23_equation_1_no_invisible_multiplication() -> Result<()> {
let expr = "
From 09bba86842af5cf46b88b102107063dac69568f6 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:01:19 +0300
Subject: [PATCH 67/77] Add more explanation
---
tests/braille/Finnish/spec.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index f334246ad..e09d94940 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -678,7 +678,7 @@ fn p22_equation_solving_notation() -> Result<()> {
return Ok(());
}
-// This is Finnish notation. The bar | is used to denote that an operation is done on both sides of the equation. This is not a real life example, but a string of mark up that should produce the output in the test.
+// This is Finnish notation. The bar | is used to denote that an operation is done on both sides of the equation. This is not a real life example, but a string of mark up that should produce the output in the test: [space][vertical bar][operation done on both sides].
#[test]
fn operate_by_on_both_sides() -> Result<()> {
let expr = "
From b1dd1d43779ff3bfd868d2c88259ac60af13262e Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:01:29 +0300
Subject: [PATCH 68/77] Add two new cases
---
tests/braille/Finnish/spec.rs | 61 +++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index e09d94940..3e3e6361a 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -713,6 +713,67 @@ fn operate_by_on_both_sides() -> Result<()> {
return Ok(());
}
+// Sometimes also two bars || are used.
+#[test]
+fn p22_equation_solving_notation_double_bars() -> Result<()> {
+ let expr = "
+ 5
+ x
+ =
+ −
+ 10
+ |
+ |
+ :
+ 5
+";
+ test_braille("Finnish", expr, "⠼⠑⠀⠭⠀⠶⠤⠼⠁⠚⠀⠀⠸⠸⠀⠒⠼⠑")?;
+
+ return Ok(());
+}
+
+// Sometimes also two bars || are used. This is not a real life example, but a string of mark up that should produce the output in the test: [space][vertical bar][vertical bar][operation done on both sides].
+#[test]
+fn operate_by_on_both_sides_double_bars() -> Result<()> {
+ let expr = "
+ |
+ |
+ +
+ 5
+ |
+ |
+ -
+ 5
+ |
+ |
+ −
+ 5
+ |
+ |
+ ·
+ 5
+ |
+ |
+ ×
+ 5
+ |
+ |
+
+
+ (
+ )
+
+ 2
+
+ |
+ |
+ /
+ 5
+";
+ test_braille("Finnish", expr, "⠀⠀⠸⠸⠀⠖⠼⠑⠀⠀⠸⠸⠀⠤⠼⠑⠀⠀⠸⠸⠀⠄⠼⠑⠀⠀⠸⠸⠀⠄⠼⠑⠀⠀⠸⠸⠀⠒⠼⠑⠀⠀⠸⠸ ⠦⠴⠬⠀⠀⠸⠸⠀⠌⠼⠑")?;
+ return Ok(());
+ }
+
#[test]
fn p24_fraction() -> Result<()> {
let expr = "
From 65ed9497fe7d32d93e5e547bda208eefdc733bff Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:01:43 +0300
Subject: [PATCH 69/77] Add more complex msubsup cases
---
tests/braille/Finnish/spec.rs | 54 +++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 3e3e6361a..ef6b59345 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1137,6 +1137,60 @@ fn msub_with_vector_with_sub_text() -> Result<()> {
return Ok(());
}
+// First the subscript, then superscript and then overline notation.
+#[test]
+fn msubsup_with_vector() -> Result<()> {
+ let expr = "
+
+
+
+ a
+ ¯
+
+ 5
+ 0
+
+ +
+ 1
+
+ ";
+ test_braille("Finnish", expr, "⠁⠡⠼⠑⠌⠼⠚⠱⠀⠖⠼⠁")?;
+ return Ok(());
+}
+
+// First the subscript, then superscript and then overline notation.
+#[test]
+fn msubsup_with_vector_complex_with_parentheses() -> Result<()> {
+ let expr = "
+
+
+
+ a
+ ¯
+
+
+ (
+ 5
+ +
+ 2
+ )
+
+
+ (
+ 3
+ +
+ x
+ )
+
+
+ +
+ 1
+
+ ";
+ test_braille("Finnish", expr, "⠁⠡⠦⠼⠑⠀⠖⠼⠃⠴⠌⠦⠼⠉⠀⠖⠭⠴⠱⠀⠖⠼⠁")?;
+ return Ok(());
+}
+
// First the subscript and then the superscript.
#[test]
fn msubsup() -> Result<()> {
From d417feda7cfdf8106b79dcab763fbd68c0191548 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:02:08 +0300
Subject: [PATCH 70/77] Add a test for vector with an arrow on top
---
tests/braille/Finnish/spec.rs | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index ef6b59345..e7bd9ad65 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1117,6 +1117,24 @@ fn msub_with_vector() -> Result<()> {
return Ok(());
}
+// Even when the vector is marked with an arrow, it should output the same dots (156).
+#[test]
+fn msub_with_vector_arrow() -> Result<()> {
+ let expr = "
+
+
+ a
+ →
+
+ b
+
+ +
+ 1
+";
+ test_braille("Finnish", expr, "⠁⠡⠃⠱⠀⠖⠼⠁")?;
+ return Ok(());
+}
+
// Overline braille notation (dots 156) comes after the (sub)script.
#[test]
fn msub_with_vector_with_sub_text() -> Result<()> {
From 047754622203bc1e32fc516518e570d6eae3c20b Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:02:18 +0300
Subject: [PATCH 71/77] Fix MathML on test
---
tests/braille/Finnish/spec.rs | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index e7bd9ad65..06cb1fb2b 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1140,13 +1140,13 @@ fn msub_with_vector_arrow() -> Result<()> {
fn msub_with_vector_with_sub_text() -> Result<()> {
let expr = "
-
- a
+
+ a
+ ¯
+
tuki
- ¯
-
+
1
From a3cf68f7dde4ffa16b6be2a6730d2edc80acdd5c Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:02:28 +0300
Subject: [PATCH 72/77] Add a test on matrices with empty cells
---
tests/braille/Finnish/spec.rs | 60 +++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 06cb1fb2b..22cb919c9 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1744,6 +1744,66 @@ fn p42_matrix() -> Result<()> {
return Ok(());
}
+// Empty cells are marked up with dots (25).
+#[test]
+fn matrix_with_empty_cells() -> Result<()> {
+ let expr = "
+
+(
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+)
+
+";
+ test_braille("Finnish", expr, "⠦⠼⠁⠀⠒⠀⠒⠀⠼⠁⠴⠀⠐⠐⠀⠦⠒⠀⠼⠁⠀⠒⠀⠒⠴⠀⠐⠐⠀⠦⠒⠀⠒⠀⠼⠁⠀⠒⠴⠀⠐⠐⠀⠦⠼⠁⠀⠒⠀⠒⠀⠼⠁⠴")?;
+ return Ok(());
+}
// Two 5-dots separate the rows in the 2D math. Format: [whitespace][dot 5][dot 5][whitespace]. This is not an operator.
// In the determinant the vertical bar is repeated for every row.
From 83362f1afcbcb6c9fc1d94e6215d01757cea0304 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:02:37 +0300
Subject: [PATCH 73/77] Add tests on intervals
---
tests/braille/Finnish/spec.rs | 91 +++++++++++++++++++++++++++++++++++
1 file changed, 91 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 22cb919c9..519d318b1 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1849,6 +1849,97 @@ fn p42_determinant() -> Result<()> {
return Ok(());
}
+#[test]
+fn open_interval() -> Result<()> {
+ let expr = "
+ ]
+ c
+ ,
+ d
+ [
+";
+ test_braille("Finnish", expr, "⠾⠉⠂⠀⠙⠷")?;
+ return Ok(());
+}
+
+#[test]
+fn open_interval_alt() -> Result<()> {
+ let expr = "
+ (
+ c
+ ,
+ d
+ )
+";
+ test_braille("Finnish", expr, "⠦⠉⠂⠀⠙⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn half_open_interval_left() -> Result<()> {
+ let expr = "
+ ]
+ c
+ ,
+ d
+ ]
+";
+ test_braille("Finnish", expr, "⠾⠉⠂⠀⠙⠾")?;
+ return Ok(());
+}
+
+#[test]
+fn half_open_interval_left_alt() -> Result<()> {
+ let expr = "
+ (
+ c
+ ,
+ d
+ ]
+";
+ test_braille("Finnish", expr, "⠦⠉⠂⠀⠙⠾")?;
+ return Ok(());
+}
+
+#[test]
+fn half_open_interval_right() -> Result<()> {
+ let expr = "
+ [
+ c
+ ,
+ d
+ [
+";
+ test_braille("Finnish", expr, "⠷⠉⠂⠀⠙⠷")?;
+ return Ok(());
+}
+
+#[test]
+fn half_open_interval_right_alt() -> Result<()> {
+ let expr = "
+ [
+ c
+ ,
+ d
+ )
+";
+ test_braille("Finnish", expr, "⠷⠉⠂⠀⠙⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn closed_interval() -> Result<()> {
+ let expr = "
+ [
+ c
+ ,
+ d
+ ]
+";
+ test_braille("Finnish", expr, "⠷⠉⠂⠀⠙⠾")?;
+ return Ok(());
+}
+
// Dots 156 to signify the bar over "arc".
#[test]
fn p45_arcsin_with_bar_over() -> Result<()> {
From fee8c2a80c72360359c336ad2a360fcda0ed2eb4 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:02:51 +0300
Subject: [PATCH 74/77] Add tests for alternative derivation notations
---
tests/braille/Finnish/spec.rs | 42 +++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 519d318b1..2e88ae4dc 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -1965,6 +1965,48 @@ fn p46_simple_derivative_fraction() -> Result<()> {
return Ok(());
}
+#[test]
+fn p46_first_order_derivative() -> Result<()> {
+ let expr = "f'(x)";
+ test_braille("Finnish", expr, "⠋⠔⠦⠭⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn p46_first_order_derivative_alt() -> Result<()> {
+ let expr = "f’(x)";
+ test_braille("Finnish", expr, "⠋⠔⠦⠭⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn second_order_derivative() -> Result<()> {
+ let expr = "f''(x)";
+ test_braille("Finnish", expr, "⠋⠔⠔⠦⠭⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn second_order_derivative_alt_1() -> Result<()> {
+ let expr = "f’’(x)";
+ test_braille("Finnish", expr, "⠋⠔⠔⠦⠭⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn second_order_derivative_alt_2() -> Result<()> {
+ let expr = "f”(x)";
+ test_braille("Finnish", expr, "⠋⠔⠔⠦⠭⠴")?;
+ return Ok(());
+}
+
+#[test]
+fn nth_order_derivative() -> Result<()> {
+ let expr = "f(n)(x)";
+ test_braille("Finnish", expr, "⠋⠌⠦⠝⠴⠦⠭⠴")?;
+ return Ok(());
+}
+
// Line under a variable
#[test]
fn p46_random_variable() -> Result<()> {
From ea493d3cca716f2e34bcaf0ad8781bbce04de7d2 Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:03:07 +0300
Subject: [PATCH 75/77] Add two tests for chemical formulas with parentheses
---
tests/braille/Finnish/spec.rs | 45 +++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 2e88ae4dc..2212afad5 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2604,6 +2604,51 @@ fn p64_chemistry_bond_3() -> Result<()> {
return Ok(());
}
+// The specs use different parentheses for atomic groups. Dots (126) for left and dots (345) for right parenthesis.
+// For MathCAT these are not used, since making the rule would probably be difficult. The parentheses that are used in the MathML are also output by MathCAT.
+#[test]
+fn chemical_formula_parentheses_1() -> Result<()> {
+ let expr = "
+ Ca
+
+
+ (
+ O
+ H
+ )
+
+ 2
+
+";
+ test_braille("Finnish", expr, "⠠⠉⠁⠦⠠⠕⠠⠓⠴⠆")?;
+ return Ok(());
+}
+
+// Here the zone ending dot (5) is needed, so parenthesis are not confused with the 'dropped dots'.
+#[test]
+fn chemical_formula_parentheses_2() -> Result<()> {
+ let expr = "
+
+ Ca
+ 3
+
+
+
+ (
+ P
+
+ O
+ 4
+
+ )
+
+ 2
+
+";
+ test_braille("Finnish", expr, "⠠⠉⠁⠒⠦⠠⠏⠠⠕⠲⠐⠴⠆")?;
+ return Ok(());
+}
+
// New tests start here 11.9.2026
#[test]
From 9344f4fc7be2365554a0fb3c0d57b5c746ea172e Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:03:30 +0300
Subject: [PATCH 76/77] Write braille for remaining new tests
---
tests/braille/Finnish/spec.rs | 37 +++++++++++++++--------------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/tests/braille/Finnish/spec.rs b/tests/braille/Finnish/spec.rs
index 2212afad5..f064270ba 100644
--- a/tests/braille/Finnish/spec.rs
+++ b/tests/braille/Finnish/spec.rs
@@ -2660,7 +2660,7 @@ fn approx_1() -> Result<()> {
200
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠃⠉⠚⠀⠸⠶⠼⠃⠚⠚")?;
return Ok(());
}
@@ -2675,7 +2675,7 @@ fn approx_2() -> Result<()> {
150
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠓⠚⠀⠖⠼⠋⠚⠀⠸⠶⠼⠁⠑⠚")?;
return Ok(());
}
@@ -2690,7 +2690,7 @@ fn large_numbers_1() -> Result<()> {
23.000
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠃⠚⠄⠚⠚⠚⠀⠖⠼⠉⠚⠚⠚⠀⠶⠼⠃⠉⠄⠚⠚⠚")?;
return Ok(());
}
@@ -2705,7 +2705,7 @@ fn large_numbers_2() -> Result<()> {
80.808
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠓⠓⠄⠓⠓⠓⠀⠤⠼⠓⠚⠓⠚⠀⠶⠼⠓⠚⠄⠓⠚⠓")?;
return Ok(());
}
@@ -2720,7 +2720,7 @@ fn comparison_multiple_numbers() -> Result<()> {
10.000
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠚⠚⠚⠀⠣⠀⠼⠊⠚⠚⠚⠀⠣⠀⠼⠁⠚⠄⠚⠚⠚")?;
return Ok(());
}
@@ -2735,7 +2735,7 @@ fn division_slash_1() -> Result<()> {
3
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠊⠀⠌⠼⠉⠀⠶⠼⠉")?;
return Ok(());
}
@@ -2750,7 +2750,7 @@ fn division_slash_2() -> Result<()> {
50
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠚⠚⠀⠌⠼⠃⠀⠶⠼⠑⠚")?;
return Ok(());
}
@@ -2760,12 +2760,12 @@ fn units_grams() -> Result<()> {
380
g
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠉⠓⠚⠀⠛")?;
return Ok(());
}
#[test]
-fn test_default() -> Result<()> {
+fn units_kilograms_and_grams() -> Result<()> {
let expr = "
4
kg
@@ -2776,10 +2776,11 @@ fn test_default() -> Result<()> {
3,850
kg
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠙⠀⠅⠛⠀⠤⠼⠁⠑⠚⠀⠛⠀⠶⠼⠉⠂⠓⠑⠚⠀⠅⠛")?;
return Ok(());
}
+// Invisible plus is replaced with the number sign (dots 3456) in a mixed fraction.
#[test]
fn invisible_plus_with_mixed_fraction_1() -> Result<()> {
let expr = "
@@ -2790,10 +2791,11 @@ fn invisible_plus_with_mixed_fraction_1() -> Result<()> {
2
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠼⠁⠆")?;
return Ok(());
}
+// Invisible plus is replaced with the number sign (dots 3456) in a mixed fraction.
#[test]
fn invisible_plus_with_mixed_fraction_2() -> Result<()> {
let expr = "
@@ -2811,10 +2813,11 @@ fn invisible_plus_with_mixed_fraction_2() -> Result<()> {
3
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠼⠁⠼⠁⠆⠀⠤⠼⠃⠼⠁⠒")?;
return Ok(());
}
+// The same solution is used for counting in steps as is in the matrices. A custom [space][dot 5][dot 5][space] separates rows from each other.
#[test]
fn count_with_steps() -> Result<()> {
let expr = "
@@ -2850,14 +2853,6 @@ fn count_with_steps() -> Result<()> {
";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
- return Ok(());
-}
-
-
-#[test]
-fn test_default() -> Result<()> {
- let expr = "";
- test_braille("Finnish", expr, "⠠⠝⠀⠒⠒⠒⠠⠝")?;
+ test_braille("Finnish", expr, "⠦⠼⠁⠚⠀⠤⠼⠋⠴⠀⠄⠦⠼⠑⠀⠖⠼⠑⠴⠀⠐⠐⠀⠶⠼⠙⠀⠄⠼⠁⠚⠀⠐⠐⠀⠶⠼⠙⠚")?;
return Ok(());
}
\ No newline at end of file
From 4aab3b3145671bb945c9fb4b912babb62d315e2a Mon Sep 17 00:00:00 2001
From: Sami M <68050150+samimaattaCelia@users.noreply.github.com>
Date: Fri, 16 Oct 2026 15:10:35 +0300
Subject: [PATCH 77/77] update translations
---
Rules/Braille/Finnish/suomi_Rules.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Rules/Braille/Finnish/suomi_Rules.yaml b/Rules/Braille/Finnish/suomi_Rules.yaml
index 4693c11b1..56bddfbab 100644
--- a/Rules/Braille/Finnish/suomi_Rules.yaml
+++ b/Rules/Braille/Finnish/suomi_Rules.yaml
@@ -177,7 +177,7 @@
- test:
if: .[self::m:mlabeledtr]
then:
- - t: "⠗⠊⠧⠊⠝⠀⠕⠞⠎⠊⠅⠅⠕⠱" # "row label:" ("rivin otsikko:")
+ - t: "⠗⠊⠧⠊" # "row label" ("rivi")
- x: "*[1]/*" # contents of row label
- test:
if: .[self::m:mlabeledtr]
@@ -838,7 +838,7 @@
tag: "*"
match: "*" # make sure there are children
replace:
- - t: "unknown math m l element"
+ - T: "tuntematon mathML-elementti"
- x: "name(.)"
- x: "*"
@@ -848,7 +848,7 @@
tag: "*"
match: "text()"
replace:
- - t: unknown math m l element
+ - T: "tuntematon mathML-elementti"
- x: "name(.)"
- x: "text()"
@@ -857,5 +857,5 @@
tag: "*"
match: "."
replace:
- - t: "empty unknown math m l element"
+ - T: "tuntematon mathML-elementti"
- x: "name(.)"
\ No newline at end of file