@rogolev/value 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/CHANGELOG.md +142 -1
  2. package/docs/helpers/array/array_chunk.md +80 -0
  3. package/docs/helpers/array/array_chunk_with_keys.md +81 -0
  4. package/docs/helpers/array/array_column.md +110 -0
  5. package/docs/helpers/array/array_combine.md +77 -0
  6. package/docs/helpers/array/array_count_values.md +71 -0
  7. package/docs/helpers/array/array_diff.md +97 -0
  8. package/docs/helpers/array/array_diff_assoc.md +81 -0
  9. package/docs/helpers/array/array_diff_key.md +81 -0
  10. package/docs/helpers/array/array_diff_uassoc.md +101 -0
  11. package/docs/helpers/array/array_diff_ukey.md +101 -0
  12. package/docs/helpers/array/array_fill.md +81 -0
  13. package/docs/helpers/array/array_fill_keys.md +73 -0
  14. package/docs/helpers/array/array_filter.md +79 -0
  15. package/docs/helpers/array/array_flip.md +70 -0
  16. package/docs/helpers/array/array_index_max.md +78 -0
  17. package/docs/helpers/array/array_index_min.md +78 -0
  18. package/docs/helpers/array/array_intersect.md +91 -0
  19. package/docs/helpers/array/array_intersect_assoc.md +91 -0
  20. package/docs/helpers/array/array_intersect_key.md +91 -0
  21. package/docs/helpers/array/array_intersect_uassoc.md +101 -0
  22. package/docs/helpers/array/array_intersect_ukey.md +101 -0
  23. package/docs/helpers/array/array_key_exists.md +73 -0
  24. package/docs/helpers/array/array_key_first.md +62 -0
  25. package/docs/helpers/array/array_key_last.md +62 -0
  26. package/docs/helpers/array/array_key_to_lower_case.md +57 -0
  27. package/docs/helpers/array/array_key_to_upper_case.md +57 -0
  28. package/docs/helpers/array/array_keys.md +62 -0
  29. package/docs/helpers/array/array_map.md +69 -0
  30. package/docs/helpers/array/array_merge.md +67 -0
  31. package/docs/helpers/array/array_merge_recursive.md +86 -0
  32. package/docs/helpers/array/array_pad.md +83 -0
  33. package/docs/helpers/array/array_pop.md +64 -0
  34. package/docs/helpers/array/array_product.md +62 -0
  35. package/docs/helpers/array/array_push.md +57 -0
  36. package/docs/helpers/array/array_rand.md +99 -0
  37. package/docs/helpers/array/array_reduce.md +77 -0
  38. package/docs/helpers/array/array_replace.md +85 -0
  39. package/docs/helpers/array/array_replace_recursive.md +87 -0
  40. package/docs/helpers/array/array_reverse.md +55 -0
  41. package/docs/helpers/array/array_search.md +74 -0
  42. package/docs/helpers/array/array_shift.md +64 -0
  43. package/docs/helpers/array/array_slice.md +65 -0
  44. package/docs/helpers/array/array_splice.md +103 -0
  45. package/docs/helpers/array/array_sum.md +55 -0
  46. package/docs/helpers/array/array_udiff.md +97 -0
  47. package/docs/helpers/array/array_udiff_assoc.md +101 -0
  48. package/docs/helpers/array/array_udiff_uassoc.md +88 -0
  49. package/docs/helpers/array/array_uintersect.md +101 -0
  50. package/docs/helpers/array/array_uintersect_assoc.md +102 -0
  51. package/docs/helpers/array/array_uintersect_uassoc.md +135 -0
  52. package/docs/helpers/array/array_unique.md +54 -0
  53. package/docs/helpers/array/array_unshift.md +58 -0
  54. package/docs/helpers/array/array_values.md +54 -0
  55. package/docs/helpers/array/array_walk.md +87 -0
  56. package/docs/helpers/array/array_walk_recursive.md +93 -0
  57. package/docs/helpers/array/count.md +54 -0
  58. package/docs/helpers/array/in_array.md +65 -0
  59. package/docs/helpers/array/natsort.md +60 -0
  60. package/docs/helpers/array/range.md +76 -0
  61. package/docs/helpers/array/shuffle.md +74 -0
  62. package/docs/helpers/array/sort.md +79 -0
  63. package/docs/helpers/is_char.md +84 -0
  64. package/docs/helpers/string/is_digit_char.md +70 -0
  65. package/docs/helpers/string/is_whitespace_char.md +70 -0
  66. package/docs/helpers/string/natcompare.md +69 -0
  67. package/docs/helpers/string/natcompare_numeric.md +70 -0
  68. package/docs/helpers.md +125 -1
  69. package/index.mjs +66 -1
  70. package/package.json +2 -1
  71. package/prettier.config.mjs +2 -1
  72. package/src/helpers/array/array_chunk.mjs +102 -0
  73. package/src/helpers/array/array_chunk_with_keys.mjs +102 -0
  74. package/src/helpers/array/array_column.mjs +131 -0
  75. package/src/helpers/array/array_combine.mjs +26 -0
  76. package/src/helpers/array/array_count_values.mjs +82 -0
  77. package/src/helpers/array/array_diff.mjs +77 -0
  78. package/src/helpers/array/array_diff_assoc.mjs +56 -0
  79. package/src/helpers/array/array_diff_key.mjs +56 -0
  80. package/src/helpers/array/array_diff_uassoc.mjs +76 -0
  81. package/src/helpers/array/array_diff_ukey.mjs +71 -0
  82. package/src/helpers/array/array_fill.mjs +108 -0
  83. package/src/helpers/array/array_fill_keys.mjs +90 -0
  84. package/src/helpers/array/array_filter.mjs +105 -0
  85. package/src/helpers/array/array_flip.mjs +58 -0
  86. package/src/helpers/array/array_index_max.mjs +82 -0
  87. package/src/helpers/array/array_index_min.mjs +82 -0
  88. package/src/helpers/array/array_intersect.mjs +71 -0
  89. package/src/helpers/array/array_intersect_assoc.mjs +67 -0
  90. package/src/helpers/array/array_intersect_key.mjs +67 -0
  91. package/src/helpers/array/array_intersect_uassoc.mjs +77 -0
  92. package/src/helpers/array/array_intersect_ukey.mjs +72 -0
  93. package/src/helpers/array/array_key_exists.mjs +83 -0
  94. package/src/helpers/array/array_key_first.mjs +73 -0
  95. package/src/helpers/array/array_key_last.mjs +74 -0
  96. package/src/helpers/array/array_key_to_lower_case.mjs +71 -0
  97. package/src/helpers/array/array_key_to_upper_case.mjs +71 -0
  98. package/src/helpers/array/array_keys.mjs +65 -0
  99. package/src/helpers/array/array_map.mjs +84 -0
  100. package/src/helpers/array/array_merge.mjs +95 -0
  101. package/src/helpers/array/array_merge_recursive.mjs +153 -0
  102. package/src/helpers/array/array_pad.mjs +105 -0
  103. package/src/helpers/array/array_pop.mjs +82 -0
  104. package/src/helpers/array/array_product.mjs +67 -0
  105. package/src/helpers/array/array_push.mjs +75 -0
  106. package/src/helpers/array/array_rand.mjs +129 -0
  107. package/src/helpers/array/array_reduce.mjs +90 -0
  108. package/src/helpers/array/array_replace.mjs +25 -0
  109. package/src/helpers/array/array_replace_recursive.mjs +109 -0
  110. package/src/helpers/array/array_reverse.mjs +62 -0
  111. package/src/helpers/array/array_search.mjs +104 -0
  112. package/src/helpers/array/array_shift.mjs +78 -0
  113. package/src/helpers/array/array_slice.mjs +99 -0
  114. package/src/helpers/array/array_splice.mjs +218 -0
  115. package/src/helpers/array/array_sum.mjs +60 -0
  116. package/src/helpers/array/array_udiff.mjs +91 -0
  117. package/src/helpers/array/array_udiff_assoc.mjs +71 -0
  118. package/src/helpers/array/array_udiff_uassoc.mjs +124 -0
  119. package/src/helpers/array/array_uintersect.mjs +72 -0
  120. package/src/helpers/array/array_uintersect_assoc.mjs +77 -0
  121. package/src/helpers/array/array_uintersect_uassoc.mjs +121 -0
  122. package/src/helpers/array/array_unique.mjs +77 -0
  123. package/src/helpers/array/array_unshift.mjs +64 -0
  124. package/src/helpers/array/array_values.mjs +57 -0
  125. package/src/helpers/array/array_walk.mjs +95 -0
  126. package/src/helpers/array/array_walk_recursive.mjs +104 -0
  127. package/src/helpers/array/count.mjs +57 -0
  128. package/src/helpers/array/in_array.mjs +67 -0
  129. package/src/helpers/array/natsort.mjs +62 -0
  130. package/src/helpers/array/range.mjs +121 -0
  131. package/src/helpers/array/shuffle.mjs +73 -0
  132. package/src/helpers/array/sort.mjs +69 -0
  133. package/src/helpers/is_char.mjs +54 -0
  134. package/src/helpers/string/is_digit_char.mjs +60 -0
  135. package/src/helpers/string/is_whitespace_char.mjs +54 -0
  136. package/src/helpers/string/natcompare.mjs +107 -0
  137. package/src/helpers/string/natcompare_numeric.mjs +131 -0
  138. package/tests/helpers/array/array_chunk.test.mjs +49 -0
  139. package/tests/helpers/array/array_chunk_with_keys.test.mjs +45 -0
  140. package/tests/helpers/array/array_column.test.mjs +87 -0
  141. package/tests/helpers/array/array_combine.test.mjs +41 -0
  142. package/tests/helpers/array/array_count_values.test.mjs +40 -0
  143. package/tests/helpers/array/array_diff.test.mjs +78 -0
  144. package/tests/helpers/array/array_diff_assoc.test.mjs +64 -0
  145. package/tests/helpers/array/array_diff_key.test.mjs +64 -0
  146. package/tests/helpers/array/array_diff_uassoc.test.mjs +73 -0
  147. package/tests/helpers/array/array_diff_ukey.test.mjs +77 -0
  148. package/tests/helpers/array/array_fill.test.mjs +47 -0
  149. package/tests/helpers/array/array_fill_keys.test.mjs +35 -0
  150. package/tests/helpers/array/array_filter.test.mjs +38 -0
  151. package/tests/helpers/array/array_flip.test.mjs +33 -0
  152. package/tests/helpers/array/array_index_max.test.mjs +41 -0
  153. package/tests/helpers/array/array_index_min.test.mjs +41 -0
  154. package/tests/helpers/array/array_intersect.test.mjs +65 -0
  155. package/tests/helpers/array/array_intersect_assoc.test.mjs +65 -0
  156. package/tests/helpers/array/array_intersect_key.test.mjs +65 -0
  157. package/tests/helpers/array/array_intersect_uassoc.test.mjs +76 -0
  158. package/tests/helpers/array/array_intersect_ukey.test.mjs +74 -0
  159. package/tests/helpers/array/array_key_exists.test.mjs +36 -0
  160. package/tests/helpers/array/array_key_first.test.mjs +29 -0
  161. package/tests/helpers/array/array_key_last.test.mjs +29 -0
  162. package/tests/helpers/array/array_key_to_lower_case.test.mjs +23 -0
  163. package/tests/helpers/array/array_key_to_upper_case.test.mjs +23 -0
  164. package/tests/helpers/array/array_keys.test.mjs +27 -0
  165. package/tests/helpers/array/array_map.test.mjs +32 -0
  166. package/tests/helpers/array/array_merge.test.mjs +37 -0
  167. package/tests/helpers/array/array_merge_recursive.test.mjs +65 -0
  168. package/tests/helpers/array/array_pad.test.mjs +48 -0
  169. package/tests/helpers/array/array_pop.test.mjs +29 -0
  170. package/tests/helpers/array/array_product.test.mjs +33 -0
  171. package/tests/helpers/array/array_push.test.mjs +31 -0
  172. package/tests/helpers/array/array_rand.test.mjs +59 -0
  173. package/tests/helpers/array/array_reduce.test.mjs +44 -0
  174. package/tests/helpers/array/array_replace.test.mjs +46 -0
  175. package/tests/helpers/array/array_replace_recursive.test.mjs +46 -0
  176. package/tests/helpers/array/array_reverse.test.mjs +31 -0
  177. package/tests/helpers/array/array_search.test.mjs +48 -0
  178. package/tests/helpers/array/array_shift.test.mjs +29 -0
  179. package/tests/helpers/array/array_slice.test.mjs +49 -0
  180. package/tests/helpers/array/array_splice.test.mjs +67 -0
  181. package/tests/helpers/array/array_sum.test.mjs +27 -0
  182. package/tests/helpers/array/array_udiff.test.mjs +95 -0
  183. package/tests/helpers/array/array_udiff_assoc.test.mjs +77 -0
  184. package/tests/helpers/array/array_udiff_uassoc.test.mjs +89 -0
  185. package/tests/helpers/array/array_uintersect.test.mjs +78 -0
  186. package/tests/helpers/array/array_uintersect_assoc.test.mjs +80 -0
  187. package/tests/helpers/array/array_uintersect_uassoc.test.mjs +122 -0
  188. package/tests/helpers/array/array_unique.test.mjs +27 -0
  189. package/tests/helpers/array/array_unshift.test.mjs +31 -0
  190. package/tests/helpers/array/array_values.test.mjs +27 -0
  191. package/tests/helpers/array/array_walk.test.mjs +48 -0
  192. package/tests/helpers/array/array_walk_recursive.test.mjs +53 -0
  193. package/tests/helpers/array/count.test.mjs +27 -0
  194. package/tests/helpers/array/in_array.test.mjs +52 -0
  195. package/tests/helpers/array/natsort.test.mjs +71 -0
  196. package/tests/helpers/array/range.test.mjs +51 -0
  197. package/tests/helpers/array/shuffle.test.mjs +42 -0
  198. package/tests/helpers/array/sort.test.mjs +60 -0
  199. package/tests/helpers/is_char.test.mjs +40 -0
  200. package/tests/helpers/string/is_digit_char.test.mjs +32 -0
  201. package/tests/helpers/string/is_whitespace_char.test.mjs +32 -0
  202. package/tests/helpers/string/natcompare.test.mjs +100 -0
  203. package/tests/helpers/string/natcompare_numeric.test.mjs +110 -0
@@ -0,0 +1,59 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_rand } from '../../../index.mjs';
3
+
4
+ describe('Функция array_rand', () => {
5
+ test('Должна возвращать случайный ключ из обычного массива', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = array_rand(array);
8
+ expect(array).toContain(array[result]);
9
+ });
10
+
11
+ test('Должна возвращать случайный ключ из ассоциативного массива', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = array_rand(array);
14
+ expect(Object.keys(array)).toContain(result[0]);
15
+ });
16
+
17
+ test('Должна возвращать несколько случайных ключей из обычного массива', () => {
18
+ const array = [1, 2, 3, 4, 5];
19
+ const result = array_rand(array, 3);
20
+ expect(result.length).toBe(3);
21
+ result.forEach((key) => {
22
+ expect(array).toContain(array[key]);
23
+ });
24
+ });
25
+
26
+ test('Должна возвращать несколько случайных ключей из ассоциативного массива', () => {
27
+ const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
28
+ const result = array_rand(array, 3);
29
+ expect(result.length).toBe(3);
30
+ result.forEach((key) => {
31
+ expect(Object.keys(array)).toContain(key[0]);
32
+ });
33
+ });
34
+
35
+ test('Должна возвращать null для пустого массива', () => {
36
+ const array = [];
37
+ const result = array_rand(array);
38
+ expect(result).toBeNull();
39
+ });
40
+
41
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
42
+ expect(() => array_rand('not an array')).toThrow(TypeError);
43
+ expect(() => array_rand('not an array')).toThrow('Параметр "arr" должен быть массивом.');
44
+ });
45
+
46
+ test('Должна выбрасывать ошибку, если параметр count не является целым числом', () => {
47
+ expect(() => array_rand([1, 2, 3], 'not a number')).toThrow(TypeError);
48
+ expect(() => array_rand([1, 2, 3], 'not a number')).toThrow(
49
+ 'Параметр "count" должен быть целым числом.',
50
+ );
51
+ });
52
+
53
+ test('Должна выбрасывать ошибку, если параметр count выходит за пределы длины массива', () => {
54
+ expect(() => array_rand([1, 2, 3], 5)).toThrow(Error);
55
+ expect(() => array_rand([1, 2, 3], 5)).toThrow(
56
+ 'Значение параметра "count" выходит за пределы длины массива.',
57
+ );
58
+ });
59
+ });
@@ -0,0 +1,44 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_reduce } from '../../../index.mjs';
3
+
4
+ describe('Функция array_reduce', () => {
5
+ test('Должна суммировать элементы обычного массива', () => {
6
+ const array = [1, 2, 3, 4];
7
+ const result = array_reduce(array, (acc, value) => acc + value, 0);
8
+ expect(result).toBe(10);
9
+ });
10
+
11
+ test('Должна объединять строки в массиве', () => {
12
+ const array = ['a', 'b', 'c'];
13
+ const result = array_reduce(array, (acc, value) => acc + value, '');
14
+ expect(result).toBe('abc');
15
+ });
16
+
17
+ test('Должна суммировать элементы ассоциативного массива', () => {
18
+ const array = { a: 1, b: 2, c: 3 };
19
+ const result = array_reduce(array, (acc, value) => acc + value, 0);
20
+ expect(result).toBe(6);
21
+ });
22
+
23
+ test('Должна возвращать начальное значение для пустого массива', () => {
24
+ const array = [];
25
+ const result = array_reduce(array, (acc, value) => acc + value, 0);
26
+ expect(result).toBe(0);
27
+ });
28
+
29
+ test('Должна выбрасывать ошибку, если первый параметр не является массивом', () => {
30
+ expect(() => array_reduce('not an array', (acc, value) => acc + value, 0)).toThrow(
31
+ TypeError,
32
+ );
33
+ expect(() => array_reduce('not an array', (acc, value) => acc + value, 0)).toThrow(
34
+ 'Параметр "arr" должен быть массивом.',
35
+ );
36
+ });
37
+
38
+ test('Должна выбрасывать ошибку, если второй параметр не является функцией', () => {
39
+ expect(() => array_reduce([1, 2, 3], 'not a function', 0)).toThrow(TypeError);
40
+ expect(() => array_reduce([1, 2, 3], 'not a function', 0)).toThrow(
41
+ 'Параметр "callback" должен быть функцией.',
42
+ );
43
+ });
44
+ });
@@ -0,0 +1,46 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_replace } from '../../../index.mjs';
3
+
4
+ describe('Функция array_replace', () => {
5
+ test('Должна заменять значения в обычном массиве', () => {
6
+ const array = [1, 2, 3];
7
+ const replacements = { 1: 4, 2: 5 };
8
+ const result = array_replace(array, replacements);
9
+ expect(result).toEqual([1, 4, 5]);
10
+ });
11
+
12
+ test('Должна заменять значения в ассоциативном массиве', () => {
13
+ const array = { a: 1, b: 2, c: 3 };
14
+ const replacements = { b: 4, c: 5 };
15
+ const result = array_replace(array, replacements);
16
+ expect(result).toEqual({ a: 1, b: 4, c: 5 });
17
+ });
18
+
19
+ test('Должна возвращать массив без изменений, если замены не указаны', () => {
20
+ const array = [1, 2, 3];
21
+ const replacements = {};
22
+ const result = array_replace(array, replacements);
23
+ expect(result).toEqual([1, 2, 3]);
24
+ });
25
+
26
+ test('Должна возвращать массив без изменений, если замены не соответствуют ключам', () => {
27
+ const array = [1, 2, 3];
28
+ const replacements = { 3: 4, 4: 5 };
29
+ const result = array_replace(array, replacements);
30
+ expect(result).toEqual([1, 2, 3]);
31
+ });
32
+
33
+ test('Должна выбрасывать ошибку, если первый параметр не является массивом', () => {
34
+ expect(() => array_replace('not an array', { 1: 4 })).toThrow(TypeError);
35
+ expect(() => array_replace('not an array', { 1: 4 })).toThrow(
36
+ 'Параметр "arr" должен быть массивом.',
37
+ );
38
+ });
39
+
40
+ test('Должна выбрасывать ошибку, если второй параметр не является объектом', () => {
41
+ expect(() => array_replace([1, 2, 3], 'not an array')).toThrow(TypeError);
42
+ expect(() => array_replace([1, 2, 3], 'not an array')).toThrow(
43
+ 'Параметр "replacements" должен быть массивом.',
44
+ );
45
+ });
46
+ });
@@ -0,0 +1,46 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_replace_recursive } from '../../../index.mjs';
3
+
4
+ describe('Функция array_replace_recursive', () => {
5
+ test('Должна рекурсивно заменять значения в обычном массиве', () => {
6
+ const array = [1, 2, [3, 4]];
7
+ const replacements = { 2: [5, 6] };
8
+ const result = array_replace_recursive(array, replacements);
9
+ expect(result).toEqual([1, 2, [5, 6]]);
10
+ });
11
+
12
+ test('Должна рекурсивно заменять значения в ассоциативном массиве', () => {
13
+ const array = { a: 1, b: { c: 2, d: 3 } };
14
+ const replacements = { b: { c: 4, e: 5 } };
15
+ const result = array_replace_recursive(array, replacements);
16
+ expect(result).toEqual({ a: 1, b: { c: 4, d: 3 } });
17
+ });
18
+
19
+ test('Должна возвращать массив без изменений, если замены не указаны', () => {
20
+ const array = [1, 2, 3];
21
+ const replacements = {};
22
+ const result = array_replace_recursive(array, replacements);
23
+ expect(result).toEqual([1, 2, 3]);
24
+ });
25
+
26
+ test('Должна возвращать массив без изменений, если замены не соответствуют ключам', () => {
27
+ const array = [1, 2, 3];
28
+ const replacements = { 3: 4, 4: 5 };
29
+ const result = array_replace_recursive(array, replacements);
30
+ expect(result).toEqual([1, 2, 3]);
31
+ });
32
+
33
+ test('Должна выбрасывать ошибку, если первый параметр не является массивом', () => {
34
+ expect(() => array_replace_recursive('not an array', { 1: 4 })).toThrow(TypeError);
35
+ expect(() => array_replace_recursive('not an array', { 1: 4 })).toThrow(
36
+ 'Параметр "arr" должен быть массивом.',
37
+ );
38
+ });
39
+
40
+ test('Должна выбрасывать ошибку, если второй параметр не является объектом', () => {
41
+ expect(() => array_replace_recursive([1, 2, 3], 'not an array')).toThrow(TypeError);
42
+ expect(() => array_replace_recursive([1, 2, 3], 'not an array')).toThrow(
43
+ 'Параметр "replacements" должен быть массивом.',
44
+ );
45
+ });
46
+ });
@@ -0,0 +1,31 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_reverse } from '../../../index.mjs';
3
+
4
+ describe('Функция array_reverse', () => {
5
+ test('Должна переворачивать обычный массив', () => {
6
+ const array = [1, 2, 3];
7
+ const result = array_reverse(array);
8
+ expect(result).toEqual([3, 2, 1]);
9
+ });
10
+
11
+ test('Должна переворачивать ассоциативный массив', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = array_reverse(array);
14
+ expect(result).toEqual([
15
+ ['c', 3],
16
+ ['b', 2],
17
+ ['a', 1],
18
+ ]);
19
+ });
20
+
21
+ test('Должна возвращать пустой массив, если исходный массив пустой', () => {
22
+ const array = [];
23
+ const result = array_reverse(array);
24
+ expect(result).toEqual([]);
25
+ });
26
+
27
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
28
+ expect(() => array_reverse('not an array')).toThrow(TypeError);
29
+ expect(() => array_reverse('not an array')).toThrow('Параметр "arr" должен быть массивом.');
30
+ });
31
+ });
@@ -0,0 +1,48 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_search } from '../../../index.mjs';
3
+
4
+ describe('Функция array_search', () => {
5
+ test('Должна находить значение в обычном массиве', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = array_search(array, 3);
8
+ expect(result).toBe(2);
9
+ });
10
+
11
+ test('Должна находить значение в ассоциативном массиве', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = array_search(array, 2);
14
+ expect(result).toBe('b');
15
+ });
16
+
17
+ test('Должна находить значение с использованием строгого сравнения', () => {
18
+ const array = [1, '2', 3];
19
+ const result = array_search(array, 2, true);
20
+ expect(result).toBeNull();
21
+ });
22
+
23
+ test('Должна находить значение с использованием функции', () => {
24
+ const array = [1, 2, 3, 4, 5];
25
+ const result = array_search(array, (v) => v > 3);
26
+ expect(result).toBe(3);
27
+ });
28
+
29
+ test('Должна возвращать null, если значение не найдено', () => {
30
+ const array = [1, 2, 3];
31
+ const result = array_search(array, 4);
32
+ expect(result).toBeNull();
33
+ });
34
+
35
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
36
+ expect(() => array_search('not an array', 1)).toThrow(TypeError);
37
+ expect(() => array_search('not an array', 1)).toThrow(
38
+ 'Параметр "arr" должен быть массивом.',
39
+ );
40
+ });
41
+
42
+ test('Должна выбрасывать ошибку, если параметр strict не является логическим значением', () => {
43
+ expect(() => array_search([1, 2, 3], 1, 'not a boolean')).toThrow(TypeError);
44
+ expect(() => array_search([1, 2, 3], 1, 'not a boolean')).toThrow(
45
+ 'Параметр "strict" должен иметь логический тип.',
46
+ );
47
+ });
48
+ });
@@ -0,0 +1,29 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_shift } from '../../../index.mjs';
3
+
4
+ describe('Функция array_shift', () => {
5
+ test('Должна удалять и возвращать первый элемент обычного массива', () => {
6
+ const array = [1, 2, 3];
7
+ const result = array_shift(array);
8
+ expect(result).toBe(1);
9
+ expect(array).toEqual([2, 3]);
10
+ });
11
+
12
+ test('Должна удалять и возвращать первый элемент ассоциативного массива', () => {
13
+ const array = { a: 1, b: 2, c: 3 };
14
+ const result = array_shift(array);
15
+ expect(result).toBe(1);
16
+ expect(array).toEqual({ b: 2, c: 3 });
17
+ });
18
+
19
+ test('Должна возвращать null для пустого массива', () => {
20
+ const array = [];
21
+ const result = array_shift(array);
22
+ expect(result).toBeNull();
23
+ });
24
+
25
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
26
+ expect(() => array_shift('not an array')).toThrow(TypeError);
27
+ expect(() => array_shift('not an array')).toThrow('Параметр "arr" должен быть массивом.');
28
+ });
29
+ });
@@ -0,0 +1,49 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_slice } from '../../../index.mjs';
3
+
4
+ describe('Функция array_slice', () => {
5
+ test('Должна извлекать часть обычного массива', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = array_slice(array, 1, 3);
8
+ expect(result).toEqual([2, 3, 4]);
9
+ });
10
+
11
+ test('Должна извлекать часть ассоциативного массива', () => {
12
+ const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
13
+ const result = array_slice(array, 1, 3);
14
+ expect(result).toEqual({ b: 2, c: 3, d: 4 });
15
+ });
16
+
17
+ test('Должна извлекать до конца массива, если длина не указана', () => {
18
+ const array = [1, 2, 3, 4, 5];
19
+ const result = array_slice(array, 2);
20
+ expect(result).toEqual([3, 4, 5]);
21
+ });
22
+
23
+ test('Должна возвращать пустой массив, если длина равна нулю', () => {
24
+ const array = [1, 2, 3, 4, 5];
25
+ const result = array_slice(array, 1, 0);
26
+ expect(result).toEqual([]);
27
+ });
28
+
29
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
30
+ expect(() => array_slice('not an array', 1, 2)).toThrow(TypeError);
31
+ expect(() => array_slice('not an array', 1, 2)).toThrow(
32
+ 'Параметр "arr" должен быть массивом.',
33
+ );
34
+ });
35
+
36
+ test('Должна выбрасывать ошибку, если параметр offset не является целым числом', () => {
37
+ expect(() => array_slice([1, 2, 3], 'not a number', 2)).toThrow(TypeError);
38
+ expect(() => array_slice([1, 2, 3], 'not a number', 2)).toThrow(
39
+ 'Параметр "offset" должен быть целым числом.',
40
+ );
41
+ });
42
+
43
+ test('Должна выбрасывать ошибку, если параметр length не является целым числом или null', () => {
44
+ expect(() => array_slice([1, 2, 3], 1, 'not a number')).toThrow(TypeError);
45
+ expect(() => array_slice([1, 2, 3], 1, 'not a number')).toThrow(
46
+ 'Параметр "length" должен быть целым числом.',
47
+ );
48
+ });
49
+ });
@@ -0,0 +1,67 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_splice } from '../../../index.mjs';
3
+
4
+ describe('Функция array_splice', () => {
5
+ test('Должна удалять элементы из обычного массива', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = array_splice(array, 1, 2);
8
+ expect(result).toEqual([2, 3]);
9
+ expect(array).toEqual([1, 4, 5]);
10
+ });
11
+
12
+ test('Должна удалять элементы из ассоциативного массива', () => {
13
+ const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
14
+ const result = array_splice(array, 1, 2);
15
+ expect(result).toEqual({ b: 2, c: 3 });
16
+ expect(array).toEqual({ a: 1, d: 4, e: 5 });
17
+ });
18
+
19
+ test('Должна добавлять элементы в обычный массив', () => {
20
+ const array = [1, 2, 3];
21
+ const result = array_splice(array, 1, 0, [4, 5]);
22
+ expect(result).toEqual([]);
23
+ expect(array).toEqual([1, 4, 5, 2, 3]);
24
+ });
25
+
26
+ test('Должна добавлять элементы в ассоциативный массив', () => {
27
+ const array = { a: 1, b: 2, c: 3 };
28
+ const result = array_splice(array, 1, 0, { d: 4, e: 5 });
29
+ expect(result).toEqual({});
30
+ expect(array).toEqual({ a: 1, d: 4, e: 5, b: 2, c: 3 });
31
+ });
32
+
33
+ test('Должна заменять элементы в обычном массиве', () => {
34
+ const array = [1, 2, 3];
35
+ const result = array_splice(array, 1, 2, [4, 5]);
36
+ expect(result).toEqual([2, 3]);
37
+ expect(array).toEqual([1, 4, 5]);
38
+ });
39
+
40
+ test('Должна заменять элементы в ассоциативном массиве', () => {
41
+ const array = { a: 1, b: 2, c: 3 };
42
+ const result = array_splice(array, 1, 2, { d: 4, e: 5 });
43
+ expect(result).toEqual({ b: 2, c: 3 });
44
+ expect(array).toEqual({ a: 1, d: 4, e: 5 });
45
+ });
46
+
47
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
48
+ expect(() => array_splice('not an array', 1, 2)).toThrow(TypeError);
49
+ expect(() => array_splice('not an array', 1, 2)).toThrow(
50
+ 'Параметр "arr" должен быть массивом.',
51
+ );
52
+ });
53
+
54
+ test('Должна выбрасывать ошибку, если параметр offset не является целым числом', () => {
55
+ expect(() => array_splice([1, 2, 3], 'not a number', 2)).toThrow(TypeError);
56
+ expect(() => array_splice([1, 2, 3], 'not a number', 2)).toThrow(
57
+ 'Параметр "offset" должен быть целым числом.',
58
+ );
59
+ });
60
+
61
+ test('Должна выбрасывать ошибку, если параметр length не является целым числом или null', () => {
62
+ expect(() => array_splice([1, 2, 3], 1, 'not a number')).toThrow(TypeError);
63
+ expect(() => array_splice([1, 2, 3], 1, 'not a number')).toThrow(
64
+ 'Параметр "length" должен быть целым числом.',
65
+ );
66
+ });
67
+ });
@@ -0,0 +1,27 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_sum } from '../../../index.mjs';
3
+
4
+ describe('Функция array_sum', () => {
5
+ test('Должна вычислять сумму значений в обычном массиве', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = array_sum(array);
8
+ expect(result).toBe(15);
9
+ });
10
+
11
+ test('Должна вычислять сумму значений в ассоциативном массиве', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = array_sum(array);
14
+ expect(result).toBe(6);
15
+ });
16
+
17
+ test('Должна возвращать 0 для пустого массива', () => {
18
+ const array = [];
19
+ const result = array_sum(array);
20
+ expect(result).toBe(0);
21
+ });
22
+
23
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
24
+ expect(() => array_sum('not an array')).toThrow(TypeError);
25
+ expect(() => array_sum('not an array')).toThrow('Параметр "arr" должен быть массивом.');
26
+ });
27
+ });
@@ -0,0 +1,95 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_udiff } from '../../../index.mjs';
3
+
4
+ describe('Функция array_udiff', () => {
5
+ const value_compare_func = (a, b) => a === b;
6
+
7
+ test('Должна возвращать элементы из первого массива, которые отсутствуют в других массивах', () => {
8
+ const original_array = [1, 2, 3];
9
+ const array1 = [1, 2];
10
+ const result = array_udiff(value_compare_func, original_array, array1);
11
+ expect(result).toEqual({ 2: 3 });
12
+ });
13
+
14
+ test('Должна возвращать пустой массив, если все элементы первого массива присутствуют в других массивах', () => {
15
+ const original_array = [1, 2];
16
+ const array1 = [1, 2];
17
+ const result = array_udiff(value_compare_func, original_array, array1);
18
+ expect(result).toEqual({});
19
+ });
20
+
21
+ test('Должна корректно обрабатывать пустые массивы', () => {
22
+ const original_array = [];
23
+ const array1 = [];
24
+ const result = array_udiff(value_compare_func, original_array, array1);
25
+ expect(result).toEqual({});
26
+ });
27
+
28
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
29
+ expect(() => array_udiff('not a function', [])).toThrow(TypeError);
30
+ expect(() => array_udiff('not a function', [])).toThrow(
31
+ 'Параметр "value_compare_func" должен быть функцией.',
32
+ );
33
+ });
34
+
35
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
36
+ expect(() => array_udiff(value_compare_func, 'not an array')).toThrow(TypeError);
37
+ expect(() => array_udiff(value_compare_func, 'not an array')).toThrow(
38
+ 'Параметр "original_array" должен быть массивом.',
39
+ );
40
+ });
41
+
42
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
43
+ expect(() => array_udiff(value_compare_func, [], 'not an array')).toThrow(TypeError);
44
+ expect(() => array_udiff(value_compare_func, [], 'not an array')).toThrow(
45
+ 'Параметр "arrays" должен быть массивом.',
46
+ );
47
+ });
48
+
49
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
50
+ const original_array = [1, '2', true];
51
+ const array1 = [1, 2, false];
52
+ const result = array_udiff(value_compare_func, original_array, array1);
53
+ expect(result).toEqual({ 1: '2', 2: true });
54
+ });
55
+
56
+ test('Должна корректно обрабатывать массивы с объектами', () => {
57
+ const original_array = [{ id: 1 }, { id: 2 }, { id: 3 }];
58
+ const array1 = [{ id: 1 }, { id: 2 }];
59
+ const result = array_udiff(
60
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
61
+ original_array,
62
+ array1,
63
+ );
64
+ expect(result).toEqual({ 2: { id: 3 } });
65
+ });
66
+
67
+ test('Должна корректно обрабатывать ассоциативные массивы', () => {
68
+ const original_array = { a: 1, b: 2, c: 3 };
69
+ const array1 = { a: 1, b: 2 };
70
+ const result = array_udiff(value_compare_func, original_array, array1);
71
+ expect(result).toEqual({ c: 3 });
72
+ });
73
+
74
+ test('Должна корректно обрабатывать несколько массивов для сравнения', () => {
75
+ const original_array = [1, 2, 3, 4];
76
+ const array1 = [1, 2];
77
+ const array2 = [3];
78
+ const result = array_udiff(value_compare_func, original_array, array1, array2);
79
+ expect(result).toEqual({ 3: 4 });
80
+ });
81
+
82
+ test('Должна корректно обрабатывать массивы с вложенными структурами', () => {
83
+ const original_array = [
84
+ { id: 1, data: [1, 2] },
85
+ { id: 2, data: [3, 4] },
86
+ ];
87
+ const array1 = [{ id: 1, data: [1, 2] }];
88
+ const result = array_udiff(
89
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
90
+ original_array,
91
+ array1,
92
+ );
93
+ expect(result).toEqual({ 1: { id: 2, data: [3, 4] } });
94
+ });
95
+ });
@@ -0,0 +1,77 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_udiff_assoc } from '../../../index.mjs';
3
+
4
+ describe('Функция array_udiff_assoc', () => {
5
+ const value_compare_func = (a, b) => a === b;
6
+
7
+ test('Должна возвращать элементы из первого массива, которые отсутствуют в других массивах', () => {
8
+ const original_array = { a: 1, b: 2, c: 3 };
9
+ const array1 = { a: 1, b: 2 };
10
+ const result = array_udiff_assoc(value_compare_func, original_array, array1);
11
+ expect(result).toEqual({ c: 3 });
12
+ });
13
+
14
+ test('Должна возвращать пустой объект, если все элементы первого массива присутствуют в других массивах', () => {
15
+ const original_array = { a: 1, b: 2 };
16
+ const array1 = { a: 1, b: 2 };
17
+ const result = array_udiff_assoc(value_compare_func, original_array, array1);
18
+ expect(result).toEqual({});
19
+ });
20
+
21
+ test('Должна корректно обрабатывать пустые массивы', () => {
22
+ const original_array = {};
23
+ const array1 = {};
24
+ const result = array_udiff_assoc(value_compare_func, original_array, array1);
25
+ expect(result).toEqual({});
26
+ });
27
+
28
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
29
+ expect(() => array_udiff_assoc('not a function', {})).toThrow(TypeError);
30
+ expect(() => array_udiff_assoc('not a function', {})).toThrow(
31
+ 'Параметр "value_compare_func" должен быть функцией.',
32
+ );
33
+ });
34
+
35
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
36
+ expect(() => array_udiff_assoc(value_compare_func, 'not an array')).toThrow(TypeError);
37
+ expect(() => array_udiff_assoc(value_compare_func, 'not an array')).toThrow(
38
+ 'Параметр "original_array" должен быть массивом.',
39
+ );
40
+ });
41
+
42
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
43
+ expect(() => array_udiff_assoc(value_compare_func, {}, 'not an array')).toThrow(TypeError);
44
+ expect(() => array_udiff_assoc(value_compare_func, {}, 'not an array')).toThrow(
45
+ 'Параметр "arrays" должен быть массивом.',
46
+ );
47
+ });
48
+
49
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
50
+ const original_array = { a: 1, b: '2', c: true };
51
+ const array1 = { a: 1, b: 2, d: false };
52
+ const result = array_udiff_assoc(value_compare_func, original_array, array1);
53
+ expect(result).toEqual({ b: '2', c: true });
54
+ });
55
+
56
+ test('Должна корректно обрабатывать несколько массивов для сравнения', () => {
57
+ const original_array = { a: 1, b: 2, c: 3, d: 4 };
58
+ const array1 = { a: 1, b: 2 };
59
+ const array2 = { c: 3 };
60
+ const result = array_udiff_assoc(value_compare_func, original_array, array1, array2);
61
+ expect(result).toEqual({ d: 4 });
62
+ });
63
+
64
+ test('Должна корректно обрабатывать массивы с вложенными структурами', () => {
65
+ const original_array = {
66
+ a: { id: 1, data: [1, 2] },
67
+ b: { id: 2, data: [3, 4] },
68
+ };
69
+ const array1 = { a: { id: 1, data: [1, 2] } };
70
+ const result = array_udiff_assoc(
71
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
72
+ original_array,
73
+ array1,
74
+ );
75
+ expect(result).toEqual({ b: { id: 2, data: [3, 4] } });
76
+ });
77
+ });