-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathbitwise.os
154 lines (100 loc) · 7.67 KB
/
bitwise.os
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИ");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИНе");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИли");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИсключительноеИли");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовыеСдвиги");
ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуБитов");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПроверитьПобитовоеИ() Экспорт
СамоеБольшоеЧисло = 4294967295;
юТест.ПроверитьРавенство(ПобитовоеИ(4294967295, 0), 0);
юТест.ПроверитьРавенство(ПобитовоеИ(0, 4294967295), 0);
юТест.ПроверитьРавенство(ПобитовоеИ(1, 4294967295), 1);
юТест.ПроверитьРавенство(ПобитовоеИ(2, 4294967295), 2);
юТест.ПроверитьРавенство(ПобитовоеИ(7, 5), 5);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПобитовоеИНе() Экспорт
СамоеБольшоеЧисло = 4294967295;
юТест.ПроверитьРавенство(ПобитовоеИНе(4294967295, 0), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИНе(0, 4294967295), 0);
юТест.ПроверитьРавенство(ПобитовоеИНе(1, 4294967295), 0);
юТест.ПроверитьРавенство(ПобитовоеИНе(2, 4294967295), 0);
юТест.ПроверитьРавенство(ПобитовоеИНе(7, 5), 2);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПобитовоеИли() Экспорт
СамоеБольшоеЧисло = 4294967295;
юТест.ПроверитьРавенство(ПобитовоеИли(4294967295, 0), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИли(0, 4294967295), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИли(1, 4294967295), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИли(2, 4294967295), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИли(7, 1), 7);
юТест.ПроверитьРавенство(ПобитовоеИли(17, 7), 23);
КонецПроцедуры
Функция СдвигВлевоВызвалИсключение(Знач Число, Знач Смещение)
Попытка
Число = ПобитовыйСдвигВлево(Число, Смещение);
Исключение
Возврат Истина;
КонецПопытки;
Возврат Ложь;
КонецФункции
Функция СдвигВправоВызвалИсключение(Знач Число, Знач Смещение)
Попытка
Число = ПобитовыйСдвигВлево(Число, Смещение);
Исключение
Возврат Истина;
КонецПопытки;
Возврат Ложь;
КонецФункции
Процедура ТестДолжен_ПроверитьПобитовыеСдвиги() Экспорт
юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 0), 1);
юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 1), 2);
юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 2), 4);
юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 3), 8);
юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, 32));
юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, 33));
юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, -1));
юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, -2));
юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(1, 0), 1);
юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(2, 1), 1);
юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(3, 2), 0);
юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(8, 3), 1);
юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, 32));
юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, 33));
юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, -1));
юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, -2));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПобитовоеИсключительноеИли() Экспорт
юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(4294967295, 0), 4294967295);
юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(7, 1), 6);
юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(17, 7), 22);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьУстановкуБитов() Экспорт
Число = 0;
Число = УстановитьБит(Число, 0, 1);
Число = УстановитьБит(Число, 1, 1);
Число = УстановитьБит(Число, 2, 1);
Число = УстановитьБит(Число, 3, 1);
юТест.ПроверитьРавенство(Число, 15);
Число = УстановитьБит(Число, 0, 0);
юТест.ПроверитьРавенство(Число, 14);
Число = 48;
юТест.ПроверитьРавенство(ПроверитьБит(Число, 1), Ложь);
юТест.ПроверитьРавенство(ПроверитьБит(Число, 2), Ложь);
юТест.ПроверитьРавенство(ПроверитьБит(Число, 3), Ложь);
юТест.ПроверитьРавенство(ПроверитьБит(Число, 4), Истина);
юТест.ПроверитьРавенство(ПроверитьБит(Число, 5), Истина);
юТест.ПроверитьРавенство(ПроверитьБит(Число, 6), Ложь);
юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(127, 48));
юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(52, 48));
юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(56, 48));
юТест.ПроверитьЛожь(ПроверитьПоБитовойМаске(33, 48));
юТест.ПроверитьЛожь(ПроверитьПоБитовойМаске(47, 48));
КонецПроцедуры