Это заголовок
Поменьше
Еще поменьше
И еще
И еще
И еще
####### Такого в html вроде не придумали
#Это не заголовок
И даже # это не заголовок
*Это не список
И это тоже * не список
Это выделится
Это выделится
_Это не выделится__
__И это не выделится_
Внутри слоооооова
Тоже рабоооооотает
Но если неправильн_оооооо__
То не раб__оооооо_тает
В начале и в кооооонце тоже работает
Так _не получится_
И так\
Вот _ так_ и _так _не получится
И _если __пересечь_, то не получится__
Вот так все получится
А вот так уже __не все__
Все здесь тоже будет рабоооотать
- И даже здесь
- Будет работать обалдеть
+
Здесь не список
- Здесь опять другой список
- И вот * такая штуко*вина это всего одна запись в списке
- # И заголовка здесь нет
- В\роде все
Следующая строка не список
*
а это _точно не работает?_
а где?
\emmm
a\a\\aa\a
aa\a\aa\a
a\a__aaa\a__a\a
aaaaa\aaa
a\aaaaaa\a
aaaa\aaaa
aaa*aa
a*
a/
a#
a*
a/
a*
\ No newline at end of file
diff --git a/cs/MarkdownTests/MdAcceptanceTest.cs b/cs/MarkdownTests/MdAcceptanceTest.cs
new file mode 100644
index 000000000..acd521869
--- /dev/null
+++ b/cs/MarkdownTests/MdAcceptanceTest.cs
@@ -0,0 +1,37 @@
+using System.Text;
+using Markdown;
+
+namespace MarkdownTests;
+
+public class MdAcceptanceTest
+{
+ private const string TestInputFilename = "MdAcceptanceTest.txt";
+ private const string TestOutputFilename = "MdAcceptanceResult.html";
+ private static readonly string? TestDirectory = Directory.GetParent(".")?.Parent?.Parent?.FullName;
+ private readonly string testInputPath = Path.Combine(
+ TestDirectory ?? throw new InvalidOperationException(), TestInputFilename);
+ private readonly string testOutputPath = Path.Combine(
+ TestDirectory ?? throw new InvalidOperationException(), TestOutputFilename);
+
+ [Test]
+ public async Task Render_ShouldReturnCorrectHtml()
+ {
+ string html;
+ await using (var fstream = new FileStream(testInputPath, FileMode.Open))
+ {
+ var buffer = new byte[fstream.Length];
+ _ = await fstream.ReadAsync(buffer);
+ var markdown = Encoding.UTF8.GetString(buffer);
+ Console.WriteLine(markdown);
+
+ html = Md.Render(markdown);
+ }
+ Console.WriteLine(html);
+ await using (var fstream = new FileStream(testOutputPath, FileMode.Create))
+ {
+ Console.WriteLine(fstream.Name);
+ var buffer = Encoding.UTF8.GetBytes(html);
+ await fstream.WriteAsync(buffer);
+ }
+ }
+}
\ No newline at end of file
diff --git a/cs/MarkdownTests/MdAcceptanceTest.txt b/cs/MarkdownTests/MdAcceptanceTest.txt
new file mode 100644
index 000000000..a5903742c
--- /dev/null
+++ b/cs/MarkdownTests/MdAcceptanceTest.txt
@@ -0,0 +1,55 @@
+# Это заголовок
+## Поменьше
+### Еще поменьше
+#### И еще
+##### И еще
+###### И еще
+####### Такого в html вроде не придумали
+#Это не заголовок
+И даже # это не заголовок
+* Это список
+*Это не список
+И это тоже * не список
+_Это выделится_
+__Это выделится__
+_Это не выделится__
+__И это не выделится_
+Внутри сл_оооооо_ва
+Тоже раб__оооооо__тает
+Но если неправильн_оооооо__
+То не раб__оооооо_тает
+В _нача_ле и в кооо_оонце_ __тож__е рабо__тает__
+Так \_не получится_
+И _так\_
+Вот _ так_ и _так _не получится
+И _если __пересечь_, то не получится__
+__Вот так все _получится___
+_А вот так уже __не все___
+# Все _здесь_ __тоже__ будет _раб_оооо__тать__
+* И даже _здесь_
+* Будет работать __обалдеть__
+
+* А это уже другой список
+Здесь не список
+* Здесь опять другой список
+* И вот * такая штуко*вина это всего одна запись в списке
+* # И заголовка здесь нет
+* В\роде все
+Следующая строка не список
+*
+а это _точно не работает?_
+__а где?__
+\\_emmm_
+_a\a\\aa\a_
+__aa\a\aa\a__
+_a\a__aaa\a__a\a_
+__aa_aaa\a_aa__
+__a\a_aaaa_a\a__
+aaa_a\aa_aa
+_aaa*aa_
+__a*__
+__a/__
+__a#__
+_a*_
+_a/_
+_a*_
\ No newline at end of file
diff --git a/cs/MarkdownTests/MdTest.cs b/cs/MarkdownTests/MdTest.cs
new file mode 100644
index 000000000..a75bd8e3c
--- /dev/null
+++ b/cs/MarkdownTests/MdTest.cs
@@ -0,0 +1,43 @@
+using System.Diagnostics;
+using System.Text;
+using FluentAssertions;
+using Markdown;
+
+namespace MarkdownTests;
+
+public class Tests
+{
+ [Test]
+ public void Markdown_Render_ShouldWorkFast()
+ {
+ const int scale = 10;
+ var sw = new Stopwatch();
+ var results = new List