-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfunctions.js
More file actions
208 lines (172 loc) · 4.21 KB
/
Copy pathfunctions.js
File metadata and controls
208 lines (172 loc) · 4.21 KB
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
function test(name, fn) {
try {
fn();
console.log(`✓ ${name}`);
} catch (e) {
console.error(`✗ ${name}`);
console.error(e);
}
}
// isSentenceLengthCorrect
console.log('isSentenceLengthCorrect:');
function isSentenceLengthCorrect(sentence, maxLength) {
if (typeof sentence !== 'string') {
throw new TypeError('sentence must be a string');
}
if (typeof maxLength !== 'number' || maxLength < 0) {
throw new TypeError('maxLength must be a non-negative number');
}
return sentence.length <= maxLength;
}
// isSentenceLengthCorrect test
test('строка короче лимита', () => {
if (!isSentenceLengthCorrect('hello', 10)) {
throw new Error();
}
});
test('строка равна лимиту', () => {
if (!isSentenceLengthCorrect('hello', 5)) {
throw new Error();
}
});
test('строка длиннее лимита', () => {
if (isSentenceLengthCorrect('hello world', 5)) {
throw new Error();
}
});
test('ошибка при нестроке', () => {
let error = false;
try {
isSentenceLengthCorrect(123, 10);
} catch (e) {
error = true;
}
if (!error) {
throw new Error();
}
});
test('ошибка при некорректном лимите', () => {
let error = false;
try {
isSentenceLengthCorrect('hello', -1);
} catch (e) {
error = true;
}
if (!error) {
throw new Error();
}
});
// isSentenceLengthCorrect
console.log('\n');
console.log('isSentenceLengthCorrect:');
function isPalindrome(input) {
if (typeof input !== 'string') {
throw new TypeError('input must be a string');
}
const normalized = input
.toLowerCase()
.replace(/\s+/g, '');
const reversed = [...normalized].reverse().join('');
return normalized === reversed;
}
test('простая строка-палиндром', () => {
if (!isPalindrome('топот')) {
throw new Error();
}
});
test('палиндром с разным регистром', () => {
if (!isPalindrome('ДовОд')) {
throw new Error();
}
});
test('не палиндром', () => {
if (isPalindrome('Кекс')) {
throw new Error();
}
});
test('палиндром с пробелами', () => {
if (!isPalindrome('Лёша на полке клопа нашёл')) {
throw new Error();
}
});
test('пустая строка', () => {
if (!isPalindrome('')) {
throw new Error();
}
});
test('один символ', () => {
if (!isPalindrome('a')) {
throw new Error();
}
});
// isSentenceLengthCorrect
console.log('\n');
console.log('extractDigits:');
function extractDigits(input) {
if (typeof input !== 'string' && typeof input !== 'number') {
throw new TypeError('input must be a string or number');
}
const str = input.toString();
let result = '';
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (!Number.isNaN(parseInt(char, 10))) {
result += char;
}
}
if (result === '') {
return NaN;
}
return parseInt(result, 10);
}
// isSentenceLengthCorrect test
test('из строки с цифрами', () => {
if (extractDigits('2023 год') !== 2023) {
throw new Error();
}
});
test('цифры в конце', () => {
if (extractDigits('ECMAScript 2022') !== 2022) {
throw new Error();
}
});
test('смешанная строка', () => {
if (extractDigits('1 кефир, 0.5 батона') !== 105) {
throw new Error();
}
});
test('ведущие нули', () => {
if (extractDigits('агент 007') !== 7) {
throw new Error();
}
});
test('без цифр', () => {
if (!Number.isNaN(extractDigits('а я томат'))) {
throw new Error();
}
});
test('положительное число', () => {
if (extractDigits(2023) !== 2023) {
throw new Error();
}
});
test('отрицательное число', () => {
if (extractDigits(-1) !== 1) {
throw new Error();
}
});
test('дробное число', () => {
if (extractDigits(1.5) !== 15) {
throw new Error();
}
});
test('пустая строка', () => {
if (!Number.isNaN(extractDigits(''))) {
throw new Error();
}
});
test('только символы', () => {
if (!Number.isNaN(extractDigits('abc'))) {
throw new Error();
}
});