<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AUnitTests</id>
	<title>Модуль:UnitTests - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AUnitTests"/>
	<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;action=history"/>
	<updated>2026-04-24T17:03:11Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=238483&amp;oldid=prev</id>
		<title>Karaby: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=238483&amp;oldid=prev"/>
		<updated>2025-07-27T15:36:50Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 15:36, 27 июля 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=238482&amp;oldid=prev</id>
		<title>Буквица&gt;Vavilexxx: уточнение</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=238482&amp;oldid=prev"/>
		<updated>2024-04-08T16:59:24Z</updated>

		<summary type="html">&lt;p&gt;уточнение&lt;/p&gt;
&lt;a href=&quot;https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;amp;diff=238482&amp;amp;oldid=123212&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Буквица&gt;Vavilexxx</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=123212&amp;oldid=prev</id>
		<title>Karaby: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=123212&amp;oldid=prev"/>
		<updated>2021-12-24T09:31:09Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 09:31, 24 декабря 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=123211&amp;oldid=prev</id>
		<title>bukvica&gt;Wikisaurus: русификация</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=123211&amp;oldid=prev"/>
		<updated>2020-11-09T00:17:17Z</updated>

		<summary type="html">&lt;p&gt;русификация&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 00:17, 9 ноября 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Строка 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local frame, tick, cross&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local frame, tick, cross&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local result_table_header = &quot;{|class=\&quot;wikitable\&quot;\n! !! &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Text &lt;/del&gt;!! &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Expected &lt;/del&gt;!! &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Actual&lt;/del&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local result_table_header = &quot;{|class=\&quot;wikitable\&quot;\n! !! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Текст &lt;/ins&gt;!! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ожидаемое значение &lt;/ins&gt;!! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Фактическое значение &lt;/ins&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local result_table = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local result_table = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local num_failures = 0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local num_failures = 0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l25&quot;&gt;Строка 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 25:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open &lt;/del&gt;= (options and options.nowiki) and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&amp;lt;&lt;/del&gt;nowiki&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&#039; &lt;/del&gt;or &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki &lt;/ins&gt;= (options and options.nowiki) and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.text.&lt;/ins&gt;nowiki or &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;function&lt;/ins&gt;(.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;..&lt;/ins&gt;) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;return ... end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local nowiki_close = &lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;options and options&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/del&gt;) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and &#039;&amp;lt;/nowiki&amp;gt;&#039; or &#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;nowiki&amp;gt;&lt;/del&gt;&#039; .. text&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:gsub&lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;%|&#039;, &#039;&amp;amp;#124;&#039;&lt;/del&gt;) .. &#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt; &lt;/del&gt;\n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;expected &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;actual &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. mw&lt;/ins&gt;.text&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.nowiki&lt;/ins&gt;(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;text&lt;/ins&gt;) .. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;expected&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;actual&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Строка 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 45:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open &lt;/del&gt;= (options and options.nowiki) and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&amp;lt;&lt;/del&gt;nowiki&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&#039; &lt;/del&gt;or &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki &lt;/ins&gt;= (options and options.nowiki) and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.text.&lt;/ins&gt;nowiki or &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;function&lt;/ins&gt;(.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;..&lt;/ins&gt;) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;return ... end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local nowiki_close = &lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;options and options&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/del&gt;) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and &#039;&amp;lt;/nowiki&amp;gt;&#039; or &#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;nowiki&amp;gt;&lt;/del&gt;&#039; .. text1&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:gsub(&#039;%|&#039;, &#039;&amp;amp;#124;&#039;&lt;/del&gt;) .. &#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt; &lt;/del&gt;\n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;expected &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;actual &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.text.nowiki(&lt;/ins&gt;text1) .. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;expected&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;actual&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l65&quot;&gt;Строка 65:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 63:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open &lt;/del&gt;= (options and options.nowiki) and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&amp;lt;&lt;/del&gt;nowiki&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&#039; &lt;/del&gt;or &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki &lt;/ins&gt;= (options and options.nowiki) and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.text.&lt;/ins&gt;nowiki or &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;function&lt;/ins&gt;(.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;..&lt;/ins&gt;) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;return ... end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local nowiki_close = &lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;options and options&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/del&gt;) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and &#039;&amp;lt;/nowiki&amp;gt;&#039; or &#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .. name .. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;tostring(expected) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;tostring(actual) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .. name .. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;tostring(expected)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;tostring(actual)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l76&quot;&gt;Строка 76:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 73:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if ty1 ~= ty2 then return false end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if ty1 ~= ty2 then return false end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if ty1 ~= &amp;#039;table&amp;#039; and ty2 ~= &amp;#039;table&amp;#039; then return t1 == t2 end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if ty1 ~= &amp;#039;table&amp;#039; and ty2 ~= &amp;#039;table&amp;#039; then return t1 == t2 end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local mt = getmetatable(t1)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local mt = getmetatable(t1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if not ignore_mt and mt and mt.__eq then return t1 == t2 end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if not ignore_mt and mt and mt.__eq then return t1 == t2 end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for k1, v1 in pairs(t1) do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for k1, v1 in pairs(t1) do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local v2 = t2[k1]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local v2 = t2[k1]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l133&quot;&gt;Строка 133:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 130:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         num_failures = num_failures + 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open &lt;/del&gt;= (options and options.nowiki) and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&amp;lt;&lt;/del&gt;nowiki&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&#039; &lt;/del&gt;or &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki &lt;/ins&gt;= (options and options.nowiki) and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.text.&lt;/ins&gt;nowiki or &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;function&lt;/ins&gt;(.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;..&lt;/ins&gt;) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;return ... end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local nowiki_close = &lt;/del&gt;(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;options and options&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/del&gt;) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and &#039;&amp;lt;/nowiki&amp;gt;&#039; or &#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local actual_str = val_to_str(actual)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local actual_str = val_to_str(actual)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local expected_str = val_to_str(expected)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local expected_str = val_to_str(expected)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected_str, actual_str)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected_str, actual_str)) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .. name .. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;expected_str &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. &#039; \n| &#039; .. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki_open .. &lt;/del&gt;actual_str &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. nowiki_close &lt;/del&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     result_table = result_table .. &#039; \n| &#039; .. name .. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;expected_str&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. &#039; \n| &#039; .. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;maybe_nowiki(&lt;/ins&gt;actual_str&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;.. differs_at .. &quot;\n|-\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l165&quot;&gt;Строка 165:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 161:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         result_table = result_table .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. value .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;:\n&amp;quot; .. table_header .. &amp;quot;\n|-\n&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         result_table = result_table .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. value .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;:\n&amp;quot; .. table_header .. &amp;quot;\n|-\n&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         self[value](self)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         self[value](self)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         result_table = result_table .. &quot;|}\n\n&quot; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;   &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         result_table = result_table .. &quot;|}\n\n&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return (num_failures == 0 and &quot;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;font color&lt;/del&gt;=\&quot;#008000\&quot;&amp;gt;&#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;All tests passed&lt;/del&gt;.&#039;&#039;&#039;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;font&lt;/del&gt;&amp;gt;&quot; or &quot;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;font color&lt;/del&gt;=\&quot;#800000\&quot;&amp;gt;&#039;&#039;&#039;&quot; .. num_failures .. &quot; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tests failed&lt;/del&gt;.&#039;&#039;&#039;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;font&lt;/del&gt;&amp;gt;&quot;) .. &quot;\n\n&quot; .. frame:preprocess(result_table)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return (num_failures == 0 and &quot;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;span style&lt;/ins&gt;=\&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;color:&lt;/ins&gt;#008000\&quot;&amp;gt;&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Все тесты успешно пройдены&lt;/ins&gt;.&#039;&#039;&#039;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;span&lt;/ins&gt;&amp;gt;&quot; or &quot;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;span style&lt;/ins&gt;=\&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;color:&lt;/ins&gt;#800000\&quot;&amp;gt;&#039;&#039;&#039;&quot; .. num_failures .. &quot; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;тестов провалено&lt;/ins&gt;.&#039;&#039;&#039;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;span&lt;/ins&gt;&amp;gt;&quot;) .. &quot;\n\n&quot; .. frame:preprocess(result_table)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>bukvica&gt;Wikisaurus</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=30222&amp;oldid=prev</id>
		<title>Karaby: Новая страница: «-- UnitTester provides unit testing for other Lua scripts. For details see Wikipedia:Lua#Unit_testing. -- For user documentation see talk page. local UnitTest…»</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:UnitTests&amp;diff=30222&amp;oldid=prev"/>
		<updated>2015-03-04T05:07:36Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «-- UnitTester provides unit testing for other Lua scripts. For details see &lt;a href=&quot;http://ru.wikipedia.org/wiki/Lua#Unit_testing&quot; class=&quot;extiw&quot; title=&quot;wikipedia:Lua&quot;&gt;Wikipedia:Lua&lt;/a&gt;. -- For user documentation see talk page. local UnitTest…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- UnitTester provides unit testing for other Lua scripts. For details see [[Wikipedia:Lua#Unit_testing]].&lt;br /&gt;
-- For user documentation see talk page.&lt;br /&gt;
local UnitTester = {}&lt;br /&gt;
&lt;br /&gt;
local frame, tick, cross&lt;br /&gt;
local result_table_header = &amp;quot;{|class=\&amp;quot;wikitable\&amp;quot;\n! !! Text !! Expected !! Actual&amp;quot;&lt;br /&gt;
local result_table = &amp;#039;&amp;#039;&lt;br /&gt;
local num_failures = 0&lt;br /&gt;
&lt;br /&gt;
function first_difference(s1, s2)&lt;br /&gt;
    if s1 == s2 then return &amp;#039;&amp;#039; end&lt;br /&gt;
    local max = math.min(#s1, #s2)&lt;br /&gt;
    for i = 1, max do&lt;br /&gt;
        if s1:sub(i,i) ~= s2:sub(i,i) then return i end&lt;br /&gt;
    end&lt;br /&gt;
    return max + 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:preprocess_equals(text, expected, options)&lt;br /&gt;
    local actual = frame:preprocess(text)&lt;br /&gt;
    if actual == expected then&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. tick&lt;br /&gt;
    else&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. cross&lt;br /&gt;
        num_failures = num_failures + 1&lt;br /&gt;
    end&lt;br /&gt;
    local nowiki_open = (options and options.nowiki) and &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local nowiki_close = (options and options.nowiki) and &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;br /&gt;
    result_table = result_table .. &amp;#039; \n| &amp;lt;nowiki&amp;gt;&amp;#039; .. text:gsub(&amp;#039;%|&amp;#039;, &amp;#039;&amp;amp;#124;&amp;#039;) .. &amp;#039;&amp;lt;/nowiki&amp;gt; \n| &amp;#039; .. nowiki_open .. expected .. nowiki_close .. &amp;#039; \n| &amp;#039; .. nowiki_open .. actual .. nowiki_close .. differs_at .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:preprocess_equals_many(prefix, suffix, cases, options)&lt;br /&gt;
    for _, case in ipairs(cases) do&lt;br /&gt;
        self:preprocess_equals(prefix .. case[1] .. suffix, case[2], options)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:preprocess_equals_preprocess(text1, text2, options)&lt;br /&gt;
    local actual = frame:preprocess(text1)&lt;br /&gt;
    local expected = frame:preprocess(text2)&lt;br /&gt;
    if actual == expected then&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. tick&lt;br /&gt;
    else&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. cross&lt;br /&gt;
        num_failures = num_failures + 1&lt;br /&gt;
    end&lt;br /&gt;
    local nowiki_open = (options and options.nowiki) and &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local nowiki_close = (options and options.nowiki) and &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;br /&gt;
    result_table = result_table .. &amp;#039; \n| &amp;lt;nowiki&amp;gt;&amp;#039; .. text1:gsub(&amp;#039;%|&amp;#039;, &amp;#039;&amp;amp;#124;&amp;#039;) .. &amp;#039;&amp;lt;/nowiki&amp;gt; \n| &amp;#039; .. nowiki_open .. expected .. nowiki_close .. &amp;#039; \n| &amp;#039; .. nowiki_open .. actual .. nowiki_close .. differs_at .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases, options)&lt;br /&gt;
    for _, case in ipairs(cases) do&lt;br /&gt;
        self:preprocess_equals_preprocess(prefix1 .. case[1] .. suffix1, prefix2 .. (case[2] and case[2] or case[1]) .. suffix2, options)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:equals(name, actual, expected, options)&lt;br /&gt;
    if actual == expected then&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. tick&lt;br /&gt;
    else&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. cross&lt;br /&gt;
        num_failures = num_failures + 1&lt;br /&gt;
    end&lt;br /&gt;
    local nowiki_open = (options and options.nowiki) and &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local nowiki_close = (options and options.nowiki) and &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected, actual)) or &amp;#039;&amp;#039;&lt;br /&gt;
    result_table = result_table .. &amp;#039; \n| &amp;#039; .. name .. &amp;#039; \n| &amp;#039; .. nowiki_open .. tostring(expected) .. nowiki_close .. &amp;#039; \n| &amp;#039; .. nowiki_open .. tostring(actual) .. nowiki_close .. differs_at .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function deep_compare(t1, t2, ignore_mt)&lt;br /&gt;
    local ty1 = type(t1)&lt;br /&gt;
    local ty2 = type(t2)&lt;br /&gt;
    if ty1 ~= ty2 then return false end&lt;br /&gt;
    if ty1 ~= &amp;#039;table&amp;#039; and ty2 ~= &amp;#039;table&amp;#039; then return t1 == t2 end&lt;br /&gt;
    &lt;br /&gt;
    local mt = getmetatable(t1)&lt;br /&gt;
    if not ignore_mt and mt and mt.__eq then return t1 == t2 end&lt;br /&gt;
    &lt;br /&gt;
    for k1, v1 in pairs(t1) do&lt;br /&gt;
        local v2 = t2[k1]&lt;br /&gt;
        if v2 == nil or not deep_compare(v1, v2) then return false end&lt;br /&gt;
    end&lt;br /&gt;
    for k2, v2 in pairs(t2) do&lt;br /&gt;
        local v1 = t1[k2]&lt;br /&gt;
        if v1 == nil or not deep_compare(v1, v2) then return false end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function val_to_str(v)&lt;br /&gt;
    if type(v) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        v = mw.ustring.gsub(v, &amp;#039;\n&amp;#039;, &amp;#039;\\n&amp;#039;)&lt;br /&gt;
        if mw.ustring.match(mw.ustring.gsub(v, &amp;#039;[^\&amp;#039;&amp;quot;]&amp;#039;, &amp;#039;&amp;#039;), &amp;#039;^&amp;quot;+$&amp;#039;) then&lt;br /&gt;
            return &amp;quot;&amp;#039;&amp;quot; .. v .. &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        return &amp;#039;&amp;quot;&amp;#039; .. mw.ustring.gsub(v, &amp;#039;&amp;quot;&amp;#039;, &amp;#039;\\&amp;quot;&amp;#039; ) .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        return type(v) == &amp;#039;table&amp;#039; and table_to_str(v) or tostring(v)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table_key_to_str(k)&lt;br /&gt;
    if type(k) == &amp;#039;string&amp;#039; and mw.ustring.match(k, &amp;#039;^[_%a][_%a%d]*$&amp;#039;) then&lt;br /&gt;
        return k&lt;br /&gt;
    else&lt;br /&gt;
        return &amp;#039;[&amp;#039; .. val_to_str(k) .. &amp;#039;]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table_to_str(tbl)&lt;br /&gt;
    local result, done = {}, {}&lt;br /&gt;
    for k, v in ipairs(tbl) do&lt;br /&gt;
        table.insert(result, val_to_str(v))&lt;br /&gt;
        done[k] = true&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(tbl) do&lt;br /&gt;
        if not done[k] then&lt;br /&gt;
            table.insert(result, table_key_to_str(k) .. &amp;#039;=&amp;#039; .. val_to_str(v))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;{&amp;#039; .. table.concat(result, &amp;#039;,&amp;#039;) .. &amp;#039;}&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:equals_deep(name, actual, expected, options)&lt;br /&gt;
    if deep_compare(actual, expected) then&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. tick&lt;br /&gt;
    else&lt;br /&gt;
        result_table = result_table .. &amp;#039;| &amp;#039; .. cross&lt;br /&gt;
        num_failures = num_failures + 1&lt;br /&gt;
    end&lt;br /&gt;
    local nowiki_open = (options and options.nowiki) and &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local nowiki_close = (options and options.nowiki) and &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
    local actual_str = val_to_str(actual)&lt;br /&gt;
    local expected_str = val_to_str(expected)&lt;br /&gt;
    local differs_at = self.differs_at and (&amp;#039; \n| &amp;#039; .. first_difference(expected_str, actual_str)) or &amp;#039;&amp;#039;&lt;br /&gt;
    result_table = result_table .. &amp;#039; \n| &amp;#039; .. name .. &amp;#039; \n| &amp;#039; .. nowiki_open .. expected_str .. nowiki_close .. &amp;#039; \n| &amp;#039; .. nowiki_open .. actual_str .. nowiki_close .. differs_at .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:run(frame_arg)&lt;br /&gt;
    frame = frame_arg&lt;br /&gt;
    self.frame = frame&lt;br /&gt;
    self.differs_at = frame.args[&amp;#039;differs_at&amp;#039;]&lt;br /&gt;
    tick = frame:preprocess(&amp;#039;{{Tick}}&amp;#039;)&lt;br /&gt;
    cross = frame:preprocess(&amp;#039;{{Cross}}&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local table_header = result_table_header&lt;br /&gt;
    if self.differs_at then&lt;br /&gt;
        table_header = table_header .. &amp;#039; !! Differs at&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Sort results into alphabetical order.&lt;br /&gt;
    local self_sorted = {}&lt;br /&gt;
    for key,value in pairs(self) do&lt;br /&gt;
        if key:find(&amp;#039;^test&amp;#039;) then&lt;br /&gt;
            table.insert(self_sorted, key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(self_sorted)&lt;br /&gt;
    -- Add results to the results table.&lt;br /&gt;
    for i,value in ipairs(self_sorted) do&lt;br /&gt;
        result_table = result_table .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. value .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;:\n&amp;quot; .. table_header .. &amp;quot;\n|-\n&amp;quot;&lt;br /&gt;
        self[value](self)&lt;br /&gt;
        result_table = result_table .. &amp;quot;|}\n\n&amp;quot;    &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return (num_failures == 0 and &amp;quot;&amp;lt;font color=\&amp;quot;#008000\&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;All tests passed.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;&amp;quot; or &amp;quot;&amp;lt;font color=\&amp;quot;#800000\&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. num_failures .. &amp;quot; tests failed.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;&amp;quot;) .. &amp;quot;\n\n&amp;quot; .. frame:preprocess(result_table)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UnitTester:new()&lt;br /&gt;
    local o = {}&lt;br /&gt;
    setmetatable(o, self)&lt;br /&gt;
    self.__index = self&lt;br /&gt;
    return o&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = UnitTester:new()&lt;br /&gt;
function p.run_tests(frame) return p:run(frame) end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
</feed>