Skip to content

Commit aea47c5

Browse files
committed
к EvilBeaver#1500: строгое сравнение значений при поиске в коллекцииях значений +тесты
1 parent 24324fb commit aea47c5

File tree

4 files changed

+226
-5
lines changed

4 files changed

+226
-5
lines changed

src/OneScript.StandardLibrary/Collections/ValueList/ValueListImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public int IndexOf(ValueListItem item)
182182
[ContextMethod("НайтиПоЗначению", "FindByValue")]
183183
public IValue FindByValue(IValue val)
184184
{
185-
var item = _items.FirstOrDefault(x => x.Value.Equals(val));
185+
var item = _items.FirstOrDefault(x => x.Value.StrictEquals(val));
186186
if(item == null)
187187
return ValueFactory.Create();
188188

src/OneScript.StandardLibrary/Collections/ValueTable/ValueTable.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public IValue Find(IValue value, string columnNames = null)
258258
foreach (var col in processing_list)
259259
{
260260
var current = row.Get(col);
261-
if (value.Equals(current))
261+
if (value.StrictEquals(current))
262262
return row;
263263
}
264264
}
@@ -274,7 +274,7 @@ private bool CheckFilterCriteria(ValueTableRow Row, StructureImpl Filter)
274274
throw WrongColumnNameException(kv.Key.AsString());
275275

276276
IValue current = Row.Get(Column);
277-
if (!current.Equals(kv.Value))
277+
if (!current.StrictEquals(kv.Value))
278278
return false;
279279
}
280280
return true;

src/OneScript.StandardLibrary/Collections/ValueTree/ValueTreeRowCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public IValue Find(IValue value, string columnNames = null, bool includeChildren
224224
foreach (ValueTreeColumn col in processingList)
225225
{
226226
IValue current = row.Get(col);
227-
if (value.Equals(current))
227+
if (value.StrictEquals(current))
228228
return row;
229229
}
230230
if (includeChildren)
@@ -248,7 +248,7 @@ private bool CheckFilterCriteria(ValueTreeRow row, StructureImpl filter)
248248
throw PropertyAccessException.PropNotFoundException(kv.Key.AsString());
249249

250250
IValue current = row.Get(column);
251-
if (!current.Equals(kv.Value))
251+
if (!current.StrictEquals(kv.Value))
252252
return false;
253253
}
254254
return true;

tests/find-in-collections.os

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
Перем юТест;
2+
3+
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
4+
юТест = ЮнитТестирование;
5+
6+
ВсеТесты = Новый Массив;
7+
8+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВМассиве");
9+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВМассиве");
10+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВФиксированномМассиве");
11+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВФиксированномМассиве");
12+
13+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСпискеЗначений");
14+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСпискеЗначений");
15+
16+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВТаблицеЗначений");
17+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВТаблицеЗначений");
18+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСтрокахТаблицыЗначений");
19+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСтрокахТаблицыЗначений");
20+
21+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВДеревеЗначений");
22+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВДеревеЗначений");
23+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСтрокахДереваЗначений");
24+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСтрокахДереваЗначений");
25+
26+
Возврат ВсеТесты;
27+
КонецФункции
28+
29+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВМассиве() Экспорт
30+
Массив = Новый Массив;
31+
Массив.Добавить(0);
32+
Массив.Добавить(1);
33+
ЕстьИстина = Массив.Найти(Истина) <> Неопределено;
34+
ЕстьЛожь = Массив.Найти(Ложь) <> Неопределено;
35+
юТест.ПроверитьЛожь( ЕстьИстина );
36+
юТест.ПроверитьЛожь( ЕстьЛожь );
37+
КонецПроцедуры
38+
39+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВМассиве() Экспорт
40+
Массив = Новый Массив;
41+
Массив.Добавить(Ложь);
42+
Массив.Добавить(Истина);
43+
Есть1 = Массив.Найти(1) <> Неопределено;
44+
Есть0 = Массив.Найти(0) <> Неопределено;
45+
юТест.ПроверитьЛожь( Есть1 );
46+
юТест.ПроверитьЛожь( Есть0 );
47+
КонецПроцедуры
48+
49+
50+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВФиксированномМассиве() Экспорт
51+
Массив = Новый Массив;
52+
Массив.Добавить(0);
53+
Массив.Добавить(1);
54+
ФиксированныйМассив = Новый ФиксированныйМассив(Массив);
55+
ЕстьИстина = ФиксированныйМассив.Найти(Истина) <> Неопределено;
56+
ЕстьЛожь = ФиксированныйМассив.Найти(Ложь) <> Неопределено;
57+
юТест.ПроверитьЛожь( ЕстьИстина );
58+
юТест.ПроверитьЛожь( ЕстьЛожь );
59+
КонецПроцедуры
60+
61+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВФиксированномМассиве() Экспорт
62+
Массив = Новый Массив;
63+
Массив.Добавить(Ложь);
64+
Массив.Добавить(Истина);
65+
ФиксированныйМассив = Новый ФиксированныйМассив(Массив);
66+
Есть1 = ФиксированныйМассив.Найти(1) <> Неопределено;
67+
Есть0 = ФиксированныйМассив.Найти(0) <> Неопределено;
68+
юТест.ПроверитьЛожь( Есть1 );
69+
юТест.ПроверитьЛожь( Есть0 );
70+
КонецПроцедуры
71+
72+
73+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСпискеЗначений() Экспорт
74+
СписокЗначений = Новый СписокЗначений();
75+
СписокЗначений.Добавить(1);
76+
СписокЗначений.Добавить(0);
77+
ЕстьИстина = СписокЗначений.НайтиПоЗначению(Истина) <> Неопределено;
78+
ЕстьЛожь = СписокЗначений.НайтиПоЗначению(Ложь) <> Неопределено;
79+
юТест.ПроверитьЛожь( ЕстьИстина );
80+
юТест.ПроверитьЛожь( ЕстьЛожь );
81+
КонецПроцедуры
82+
83+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСпискеЗначений() Экспорт
84+
СписокЗначений = Новый СписокЗначений();
85+
СписокЗначений.Добавить(Истина);
86+
СписокЗначений.Добавить(Ложь);
87+
Есть1 = СписокЗначений.НайтиПоЗначению(1) <> Неопределено;
88+
Есть0 = СписокЗначений.НайтиПоЗначению(0) <> Неопределено;
89+
юТест.ПроверитьЛожь( Есть1 );
90+
юТест.ПроверитьЛожь( Есть0 );
91+
КонецПроцедуры
92+
93+
94+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВТаблицеЗначений() Экспорт
95+
ТаблицаЗначений = Новый ТаблицаЗначений();
96+
ТаблицаЗначений.Колонки.Добавить("Кол1");
97+
ТаблицаЗначений.Колонки.Добавить("Кол2");
98+
Строка1 = ТаблицаЗначений.Добавить();
99+
Строка2 = ТаблицаЗначений.Добавить();
100+
Строка1.Кол1 = 1;
101+
Строка1.Кол2 = 0;
102+
Строка2.Кол1 = 0;
103+
Строка2.Кол2 = 1;
104+
ЕстьИстина = ТаблицаЗначений.Найти(Истина) <> Неопределено;
105+
ЕстьЛожь = ТаблицаЗначений.Найти(Ложь) <> Неопределено;
106+
юТест.ПроверитьЛожь( ЕстьИстина );
107+
юТест.ПроверитьЛожь( ЕстьЛожь );
108+
КонецПроцедуры
109+
110+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВТаблицеЗначений() Экспорт
111+
ТаблицаЗначений = Новый ТаблицаЗначений();
112+
ТаблицаЗначений.Колонки.Добавить("Кол1");
113+
ТаблицаЗначений.Колонки.Добавить("Кол2");
114+
Строка1 = ТаблицаЗначений.Добавить();
115+
Строка2 = ТаблицаЗначений.Добавить();
116+
Строка1.Кол1 = Истина;
117+
Строка1.Кол2 = Ложь;
118+
Строка2.Кол1 = Ложь;
119+
Строка2.Кол2 = Истина;
120+
Есть1 = ТаблицаЗначений.Найти(1) <> Неопределено;
121+
Есть0 = ТаблицаЗначений.Найти(0) <> Неопределено;
122+
юТест.ПроверитьЛожь( Есть1 );
123+
юТест.ПроверитьЛожь( Есть0 );
124+
КонецПроцедуры
125+
126+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСтрокахТаблицыЗначений() Экспорт
127+
ТаблицаЗначений = Новый ТаблицаЗначений();
128+
ТаблицаЗначений.Колонки.Добавить("Кол1");
129+
ТаблицаЗначений.Колонки.Добавить("Кол2");
130+
Строка1 = ТаблицаЗначений.Добавить();
131+
Строка2 = ТаблицаЗначений.Добавить();
132+
Строка1.Кол1 = 1;
133+
Строка1.Кол2 = 0;
134+
Строка2.Кол1 = 0;
135+
Строка2.Кол2 = 1;
136+
ЕстьИстина = ТаблицаЗначений.НайтиСтроки( Новый Структура("Кол1", Истина) ).Количество() > 0;
137+
ЕстьЛожь = ТаблицаЗначений.НайтиСтроки( Новый Структура("Кол1", Ложь) ).Количество() > 0;
138+
юТест.ПроверитьЛожь( ЕстьИстина );
139+
юТест.ПроверитьЛожь( ЕстьЛожь );
140+
КонецПроцедуры
141+
142+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСтрокахТаблицыЗначений() Экспорт
143+
ТаблицаЗначений = Новый ТаблицаЗначений();
144+
ТаблицаЗначений.Колонки.Добавить("Кол1");
145+
ТаблицаЗначений.Колонки.Добавить("Кол2");
146+
Строка1 = ТаблицаЗначений.Добавить();
147+
Строка2 = ТаблицаЗначений.Добавить();
148+
Строка1.Кол1 = Истина;
149+
Строка1.Кол2 = Ложь;
150+
Строка2.Кол1 = Ложь;
151+
Строка2.Кол2 = Истина;
152+
Есть1 = ТаблицаЗначений.НайтиСтроки( Новый Структура("Кол1", 1) ).Количество() > 0;
153+
Есть0 = ТаблицаЗначений.НайтиСтроки( Новый Структура("Кол1", 0) ).Количество() > 0;
154+
юТест.ПроверитьЛожь( Есть1 );
155+
юТест.ПроверитьЛожь( Есть0 );
156+
КонецПроцедуры
157+
158+
159+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВДеревеЗначений() Экспорт
160+
ДеревоЗначений = Новый ДеревоЗначений();
161+
ДеревоЗначений.Колонки.Добавить("Кол1");
162+
ДеревоЗначений.Колонки.Добавить("Кол2");
163+
Строка1 = ДеревоЗначений.Строки.Добавить();
164+
Строка2 = ДеревоЗначений.Строки.Добавить();
165+
Строка1.Кол1 = 1;
166+
Строка1.Кол2 = 0;
167+
Строка2.Кол1 = 0;
168+
Строка2.Кол2 = 1;
169+
ЕстьИстина = ДеревоЗначений.Строки.Найти(Истина) <> Неопределено;
170+
ЕстьЛожь = ДеревоЗначений.Строки.Найти(Ложь) <> Неопределено;
171+
юТест.ПроверитьЛожь( ЕстьИстина );
172+
юТест.ПроверитьЛожь( ЕстьЛожь );
173+
КонецПроцедуры
174+
175+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВДеревеЗначений() Экспорт
176+
ДеревоЗначений = Новый ДеревоЗначений();
177+
ДеревоЗначений.Колонки.Добавить("Кол1");
178+
ДеревоЗначений.Колонки.Добавить("Кол2");
179+
Строка1 = ДеревоЗначений.Строки.Добавить();
180+
Строка2 = ДеревоЗначений.Строки.Добавить();
181+
Строка1.Кол1 = Истина;
182+
Строка1.Кол2 = Ложь;
183+
Строка2.Кол1 = Ложь;
184+
Строка2.Кол2 = Истина;
185+
Есть1 = ДеревоЗначений.Строки.Найти(1) <> Неопределено;
186+
Есть0 = ДеревоЗначений.Строки.Найти(0) <> Неопределено;
187+
юТест.ПроверитьЛожь( Есть1 );
188+
юТест.ПроверитьЛожь( Есть0 );
189+
КонецПроцедуры
190+
191+
Процедура ТестДолжен_ПроверитьПоиск_БулеваСредиЧисел_ВСтрокахДереваЗначений() Экспорт
192+
ДеревоЗначений = Новый ДеревоЗначений();
193+
ДеревоЗначений.Колонки.Добавить("Кол1");
194+
ДеревоЗначений.Колонки.Добавить("Кол2");
195+
Строка1 = ДеревоЗначений.Строки.Добавить();
196+
Строка2 = ДеревоЗначений.Строки.Добавить();
197+
Строка1.Кол1 = 1;
198+
Строка1.Кол2 = 0;
199+
Строка2.Кол1 = 0;
200+
Строка2.Кол2 = 1;
201+
ЕстьИстина = ДеревоЗначений.Строки.НайтиСтроки( Новый Структура("Кол1", Истина) ).Количество() > 0;
202+
ЕстьЛожь = ДеревоЗначений.Строки.НайтиСтроки( Новый Структура("Кол1", Ложь) ).Количество() > 0;
203+
юТест.ПроверитьЛожь( ЕстьИстина );
204+
юТест.ПроверитьЛожь( ЕстьЛожь );
205+
КонецПроцедуры
206+
207+
Процедура ТестДолжен_ПроверитьПоиск_ЧислаСредиБулевых_ВСтрокахДереваЗначений() Экспорт
208+
ДеревоЗначений = Новый ДеревоЗначений();
209+
ДеревоЗначений.Колонки.Добавить("Кол1");
210+
ДеревоЗначений.Колонки.Добавить("Кол2");
211+
Строка1 = ДеревоЗначений.Строки.Добавить();
212+
Строка2 = ДеревоЗначений.Строки.Добавить();
213+
Строка1.Кол1 = Истина;
214+
Строка1.Кол2 = Ложь;
215+
Строка2.Кол1 = Ложь;
216+
Строка2.Кол2 = Истина;
217+
Есть1 = ДеревоЗначений.Строки.НайтиСтроки( Новый Структура("Кол1", 1) ).Количество() > 0;
218+
Есть0 = ДеревоЗначений.Строки.НайтиСтроки( Новый Структура("Кол1", 0) ).Количество() > 0;
219+
юТест.ПроверитьЛожь( Есть1 );
220+
юТест.ПроверитьЛожь( Есть0 );
221+
КонецПроцедуры

0 commit comments

Comments
 (0)