@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,89 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_udiff_uassoc } from '../../../index.mjs';
3
+
4
+ describe('Функция array_udiff_uassoc', () => {
5
+ const value_compare_func = (a, b) => a === b;
6
+ const key_compare_func = (a, b) => a === b;
7
+
8
+ test('Должна возвращать элементы из первого массива, которые отсутствуют в других массивах', () => {
9
+ const original_array = { a: 1, b: 2, c: 3 };
10
+ const array1 = { a: 1, b: 2 };
11
+ const result = array_udiff_uassoc(
12
+ value_compare_func,
13
+ key_compare_func,
14
+ original_array,
15
+ array1,
16
+ );
17
+ expect(result).toEqual({ c: 3 });
18
+ });
19
+
20
+ test('Должна возвращать пустой объект, если все элементы первого массива присутствуют в других массивах', () => {
21
+ const original_array = { a: 1, b: 2 };
22
+ const array1 = { a: 1, b: 2 };
23
+ const result = array_udiff_uassoc(
24
+ value_compare_func,
25
+ key_compare_func,
26
+ original_array,
27
+ array1,
28
+ );
29
+ expect(result).toEqual({});
30
+ });
31
+
32
+ test('Должна корректно обрабатывать пустые массивы', () => {
33
+ const original_array = {};
34
+ const array1 = {};
35
+ const result = array_udiff_uassoc(
36
+ value_compare_func,
37
+ key_compare_func,
38
+ original_array,
39
+ array1,
40
+ );
41
+ expect(result).toEqual({});
42
+ });
43
+
44
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
45
+ expect(() => array_udiff_uassoc('not a function', key_compare_func, {})).toThrow(TypeError);
46
+ expect(() => array_udiff_uassoc('not a function', key_compare_func, {})).toThrow(
47
+ 'Параметр "value_compare_func" должен быть функцией.',
48
+ );
49
+ });
50
+
51
+ test('Должна выбрасывать ошибку, если переданное значение для key_compare_func не является функцией', () => {
52
+ expect(() => array_udiff_uassoc(value_compare_func, 'not a function', {})).toThrow(
53
+ TypeError,
54
+ );
55
+ expect(() => array_udiff_uassoc(value_compare_func, 'not a function', {})).toThrow(
56
+ 'Параметр "key_compare_func" должен быть функцией.',
57
+ );
58
+ });
59
+
60
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
61
+ expect(() =>
62
+ array_udiff_uassoc(value_compare_func, key_compare_func, 'not an array'),
63
+ ).toThrow(TypeError);
64
+ expect(() =>
65
+ array_udiff_uassoc(value_compare_func, key_compare_func, 'not an array'),
66
+ ).toThrow('Параметр "original_array" должен быть массивом.');
67
+ });
68
+
69
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
70
+ expect(() =>
71
+ array_udiff_uassoc(value_compare_func, key_compare_func, {}, 'not an array'),
72
+ ).toThrow(TypeError);
73
+ expect(() =>
74
+ array_udiff_uassoc(value_compare_func, key_compare_func, {}, 'not an array'),
75
+ ).toThrow('Параметр "arrays" должен быть массивом.');
76
+ });
77
+
78
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
79
+ const original_array = { a: 1, b: '2', c: true };
80
+ const array1 = { a: 1, b: 2, d: false };
81
+ const result = array_udiff_uassoc(
82
+ value_compare_func,
83
+ key_compare_func,
84
+ original_array,
85
+ array1,
86
+ );
87
+ expect(result).toEqual({ b: '2', c: true });
88
+ });
89
+ });
@@ -0,0 +1,78 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_uintersect } from '../../../index.mjs';
3
+
4
+ describe('Функция array_uintersect', () => {
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 array2 = { b: 2, c: 3 };
11
+ const result = array_uintersect(value_compare_func, original_array, array1, array2);
12
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
13
+ });
14
+
15
+ test('Должна возвращать пустой объект, если все элементы первого массива отсутствуют в других массивах', () => {
16
+ const original_array = { a: 1, b: 2 };
17
+ const array1 = { c: 3, d: 4 };
18
+ const result = array_uintersect(value_compare_func, original_array, array1);
19
+ expect(result).toEqual({});
20
+ });
21
+
22
+ test('Должна корректно обрабатывать пустые массивы', () => {
23
+ const original_array = {};
24
+ const array1 = {};
25
+ const result = array_uintersect(value_compare_func, original_array, array1);
26
+ expect(result).toEqual({});
27
+ });
28
+
29
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
30
+ expect(() => array_uintersect('not a function', {})).toThrow(TypeError);
31
+ expect(() => array_uintersect('not a function', {})).toThrow(
32
+ 'Параметр "value_compare_func" должен быть функцией.',
33
+ );
34
+ });
35
+
36
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
37
+ expect(() => array_uintersect(value_compare_func, 'not an array')).toThrow(TypeError);
38
+ expect(() => array_uintersect(value_compare_func, 'not an array')).toThrow(
39
+ 'Параметр "original_array" должен быть массивом.',
40
+ );
41
+ });
42
+
43
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
44
+ expect(() => array_uintersect(value_compare_func, {}, 'not an array')).toThrow(TypeError);
45
+ expect(() => array_uintersect(value_compare_func, {}, 'not an array')).toThrow(
46
+ 'Параметр "arrays" должен быть массивом.',
47
+ );
48
+ });
49
+
50
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
51
+ const original_array = { a: 1, b: '2', c: true };
52
+ const array1 = { a: 1, b: 2, d: false };
53
+ const result = array_uintersect(value_compare_func, original_array, array1);
54
+ expect(result).toEqual({ a: 1 });
55
+ });
56
+
57
+ test('Должна корректно обрабатывать несколько массивов для сравнения', () => {
58
+ const original_array = { a: 1, b: 2, c: 3, d: 4 };
59
+ const array1 = { a: 1, b: 2 };
60
+ const array2 = { c: 3 };
61
+ const result = array_uintersect(value_compare_func, original_array, array1, array2);
62
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
63
+ });
64
+
65
+ test('Должна корректно обрабатывать массивы с вложенными структурами', () => {
66
+ const original_array = {
67
+ a: { id: 1, data: [1, 2] },
68
+ b: { id: 2, data: [3, 4] },
69
+ };
70
+ const array1 = { a: { id: 1, data: [1, 2] } };
71
+ const result = array_uintersect(
72
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
73
+ original_array,
74
+ array1,
75
+ );
76
+ expect(result).toEqual({ a: { id: 1, data: [1, 2] } });
77
+ });
78
+ });
@@ -0,0 +1,80 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_uintersect_assoc } from '../../../index.mjs';
3
+
4
+ describe('Функция array_uintersect_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 array2 = { b: 2, c: 3 };
11
+ const result = array_uintersect_assoc(value_compare_func, original_array, array1, array2);
12
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
13
+ });
14
+
15
+ test('Должна возвращать пустой объект, если все элементы первого массива отсутствуют в других массивах', () => {
16
+ const original_array = { a: 1, b: 2 };
17
+ const array1 = { c: 3, d: 4 };
18
+ const result = array_uintersect_assoc(value_compare_func, original_array, array1);
19
+ expect(result).toEqual({});
20
+ });
21
+
22
+ test('Должна корректно обрабатывать пустые массивы', () => {
23
+ const original_array = {};
24
+ const array1 = {};
25
+ const result = array_uintersect_assoc(value_compare_func, original_array, array1);
26
+ expect(result).toEqual({});
27
+ });
28
+
29
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
30
+ expect(() => array_uintersect_assoc('not a function', {})).toThrow(TypeError);
31
+ expect(() => array_uintersect_assoc('not a function', {})).toThrow(
32
+ 'Параметр "value_compare_func" должен быть функцией.',
33
+ );
34
+ });
35
+
36
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
37
+ expect(() => array_uintersect_assoc(value_compare_func, 'not an array')).toThrow(TypeError);
38
+ expect(() => array_uintersect_assoc(value_compare_func, 'not an array')).toThrow(
39
+ 'Параметр "original_array" должен быть массивом.',
40
+ );
41
+ });
42
+
43
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
44
+ expect(() => array_uintersect_assoc(value_compare_func, {}, 'not an array')).toThrow(
45
+ TypeError,
46
+ );
47
+ expect(() => array_uintersect_assoc(value_compare_func, {}, 'not an array')).toThrow(
48
+ 'Параметр "arrays" должен быть массивом.',
49
+ );
50
+ });
51
+
52
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
53
+ const original_array = { a: 1, b: '2', c: true };
54
+ const array1 = { a: 1, b: 2, d: false };
55
+ const result = array_uintersect_assoc(value_compare_func, original_array, array1);
56
+ expect(result).toEqual({ a: 1 });
57
+ });
58
+
59
+ test('Должна корректно обрабатывать несколько массивов для сравнения', () => {
60
+ const original_array = { a: 1, b: 2, c: 3, d: 4 };
61
+ const array1 = { a: 1, b: 2 };
62
+ const array2 = { c: 3 };
63
+ const result = array_uintersect_assoc(value_compare_func, original_array, array1, array2);
64
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
65
+ });
66
+
67
+ test('Должна корректно обрабатывать массивы с вложенными структурами', () => {
68
+ const original_array = {
69
+ a: { id: 1, data: [1, 2] },
70
+ b: { id: 2, data: [3, 4] },
71
+ };
72
+ const array1 = { a: { id: 1, data: [1, 2] } };
73
+ const result = array_uintersect_assoc(
74
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
75
+ original_array,
76
+ array1,
77
+ );
78
+ expect(result).toEqual({ a: { id: 1, data: [1, 2] } });
79
+ });
80
+ });
@@ -0,0 +1,122 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_uintersect_uassoc } from '../../../index.mjs';
3
+
4
+ describe('Функция array_uintersect_uassoc', () => {
5
+ const value_compare_func = (a, b) => a === b;
6
+ const key_compare_func = (a, b) => a === b;
7
+
8
+ test('Должна возвращать элементы из первого массива, которые присутствуют в других массивах', () => {
9
+ const original_array = { a: 1, b: 2, c: 3 };
10
+ const array1 = { a: 1, b: 2 };
11
+ const array2 = { b: 2, c: 3 };
12
+ const result = array_uintersect_uassoc(
13
+ value_compare_func,
14
+ key_compare_func,
15
+ original_array,
16
+ array1,
17
+ array2,
18
+ );
19
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
20
+ });
21
+
22
+ test('Должна возвращать пустой объект, если все элементы первого массива отсутствуют в других массивах', () => {
23
+ const original_array = { a: 1, b: 2 };
24
+ const array1 = { c: 3, d: 4 };
25
+ const result = array_uintersect_uassoc(
26
+ value_compare_func,
27
+ key_compare_func,
28
+ original_array,
29
+ array1,
30
+ );
31
+ expect(result).toEqual({});
32
+ });
33
+
34
+ test('Должна корректно обрабатывать пустые массивы', () => {
35
+ const original_array = {};
36
+ const array1 = {};
37
+ const result = array_uintersect_uassoc(
38
+ value_compare_func,
39
+ key_compare_func,
40
+ original_array,
41
+ array1,
42
+ );
43
+ expect(result).toEqual({});
44
+ });
45
+
46
+ test('Должна выбрасывать ошибку, если переданное значение для value_compare_func не является функцией', () => {
47
+ expect(() => array_uintersect_uassoc('not a function', key_compare_func, {})).toThrow(
48
+ TypeError,
49
+ );
50
+ expect(() => array_uintersect_uassoc('not a function', key_compare_func, {})).toThrow(
51
+ 'Параметр "value_compare_func" должен быть функцией.',
52
+ );
53
+ });
54
+
55
+ test('Должна выбрасывать ошибку, если переданное значение для key_compare_func не является функцией', () => {
56
+ expect(() => array_uintersect_uassoc(value_compare_func, 'not a function', {})).toThrow(
57
+ TypeError,
58
+ );
59
+ expect(() => array_uintersect_uassoc(value_compare_func, 'not a function', {})).toThrow(
60
+ 'Параметр "key_compare_func" должен быть функцией.',
61
+ );
62
+ });
63
+
64
+ test('Должна выбрасывать ошибку, если переданное значение для original_array не является массивом', () => {
65
+ expect(() =>
66
+ array_uintersect_uassoc(value_compare_func, key_compare_func, 'not an array'),
67
+ ).toThrow(TypeError);
68
+ expect(() =>
69
+ array_uintersect_uassoc(value_compare_func, key_compare_func, 'not an array'),
70
+ ).toThrow('Параметр "original_array" должен быть массивом.');
71
+ });
72
+
73
+ test('Должна выбрасывать ошибку, если переданное значение для arrays не является массивом', () => {
74
+ expect(() =>
75
+ array_uintersect_uassoc(value_compare_func, key_compare_func, {}, 'not an array'),
76
+ ).toThrow(TypeError);
77
+ expect(() =>
78
+ array_uintersect_uassoc(value_compare_func, key_compare_func, {}, 'not an array'),
79
+ ).toThrow('Параметр "arrays" должен быть массивом.');
80
+ });
81
+
82
+ test('Должна корректно обрабатывать массивы с различными типами данных', () => {
83
+ const original_array = { a: 1, b: '2', c: true };
84
+ const array1 = { a: 1, b: 2, d: false };
85
+ const result = array_uintersect_uassoc(
86
+ value_compare_func,
87
+ key_compare_func,
88
+ original_array,
89
+ array1,
90
+ );
91
+ expect(result).toEqual({ a: 1 });
92
+ });
93
+
94
+ test('Должна корректно обрабатывать несколько массивов для сравнения', () => {
95
+ const original_array = { a: 1, b: 2, c: 3, d: 4 };
96
+ const array1 = { a: 1, b: 2 };
97
+ const array2 = { c: 3 };
98
+ const result = array_uintersect_uassoc(
99
+ value_compare_func,
100
+ key_compare_func,
101
+ original_array,
102
+ array1,
103
+ array2,
104
+ );
105
+ expect(result).toEqual({ a: 1, b: 2, c: 3 });
106
+ });
107
+
108
+ test('Должна корректно обрабатывать массивы с вложенными структурами', () => {
109
+ const original_array = {
110
+ a: { id: 1, data: [1, 2] },
111
+ b: { id: 2, data: [3, 4] },
112
+ };
113
+ const array1 = { a: { id: 1, data: [1, 2] } };
114
+ const result = array_uintersect_uassoc(
115
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
116
+ key_compare_func,
117
+ original_array,
118
+ array1,
119
+ );
120
+ expect(result).toEqual({ a: { id: 1, data: [1, 2] } });
121
+ });
122
+ });
@@ -0,0 +1,27 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_unique } from '../../../index.mjs';
3
+
4
+ describe('Функция array_unique', () => {
5
+ test('Должна удалять дублирующиеся значения из обычного массива', () => {
6
+ const array = [1, 2, 2, 3, 4, 4, 5];
7
+ const result = array_unique(array);
8
+ expect(result).toEqual([1, 2, 3, 4, 5]);
9
+ });
10
+
11
+ test('Должна удалять дублирующиеся значения из ассоциативного массива', () => {
12
+ const array = { a: 1, b: 2, c: 2, d: 3, e: 4, f: 4, g: 5 };
13
+ const result = array_unique(array);
14
+ expect(result).toEqual({ a: 1, b: 2, d: 3, e: 4, g: 5 });
15
+ });
16
+
17
+ test('Должна возвращать пустой массив, если исходный массив пустой', () => {
18
+ const array = [];
19
+ const result = array_unique(array);
20
+ expect(result).toEqual([]);
21
+ });
22
+
23
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
24
+ expect(() => array_unique('not an array')).toThrow(TypeError);
25
+ expect(() => array_unique('not an array')).toThrow('Параметр "arr" должен быть массивом.');
26
+ });
27
+ });
@@ -0,0 +1,31 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_unshift } from '../../../index.mjs';
3
+
4
+ describe('Функция array_unshift', () => {
5
+ test('Должна добавлять элементы в начало обычного массива', () => {
6
+ const array = [2, 3, 4];
7
+ const result = array_unshift(array, 0, 1);
8
+ expect(result).toBe(5);
9
+ expect(array).toEqual([0, 1, 2, 3, 4]);
10
+ });
11
+
12
+ test('Должна добавлять элементы в начало ассоциативного массива', () => {
13
+ const array = { b: 2, c: 3 };
14
+ const result = array_unshift(array, { a: 1 });
15
+ expect(result).toBe(3);
16
+ expect(array).toEqual({ a: 1, b: 2, c: 3 });
17
+ });
18
+
19
+ test('Должна возвращать новую длину массива после добавления элементов', () => {
20
+ const array = [1, 2, 3];
21
+ const result = array_unshift(array, 0);
22
+ expect(result).toBe(4);
23
+ });
24
+
25
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
26
+ expect(() => array_unshift('not an array', 1)).toThrow(TypeError);
27
+ expect(() => array_unshift('not an array', 1)).toThrow(
28
+ 'Параметр "arr" должен быть массивом.',
29
+ );
30
+ });
31
+ });
@@ -0,0 +1,27 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { array_values } from '../../../index.mjs';
3
+
4
+ describe('Функция array_values', () => {
5
+ test('Должна возвращать значения из обычного массива', () => {
6
+ const array = [1, 2, 3];
7
+ const result = array_values(array);
8
+ expect(result).toEqual([1, 2, 3]);
9
+ });
10
+
11
+ test('Должна возвращать значения из ассоциативного массива', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = array_values(array);
14
+ expect(result).toEqual([1, 2, 3]);
15
+ });
16
+
17
+ test('Должна возвращать пустой массив, если исходный массив пустой', () => {
18
+ const array = [];
19
+ const result = array_values(array);
20
+ expect(result).toEqual([]);
21
+ });
22
+
23
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
24
+ expect(() => array_values('not an array')).toThrow(TypeError);
25
+ expect(() => array_values('not an array')).toThrow('Параметр "arr" должен быть массивом.');
26
+ });
27
+ });
@@ -0,0 +1,48 @@
1
+ import { expect, test, describe, jest } from '@jest/globals';
2
+ import { array_walk } from '../../../index.mjs';
3
+
4
+ describe('Функция array_walk', () => {
5
+ test('Должна применять функцию к каждому элементу обычного массива', () => {
6
+ const array = [1, 2, 3];
7
+ const callback = jest.fn();
8
+ array_walk(array, callback);
9
+ expect(callback).toHaveBeenCalledTimes(3);
10
+ expect(callback).toHaveBeenCalledWith(1, '0', null);
11
+ expect(callback).toHaveBeenCalledWith(2, '1', null);
12
+ expect(callback).toHaveBeenCalledWith(3, '2', null);
13
+ });
14
+
15
+ test('Должна применять функцию к каждому элементу ассоциативного массива', () => {
16
+ const array = { a: 1, b: 2, c: 3 };
17
+ const callback = jest.fn();
18
+ array_walk(array, callback);
19
+ expect(callback).toHaveBeenCalledTimes(3);
20
+ expect(callback).toHaveBeenCalledWith(1, 'a', null);
21
+ expect(callback).toHaveBeenCalledWith(2, 'b', null);
22
+ expect(callback).toHaveBeenCalledWith(3, 'c', null);
23
+ });
24
+
25
+ test('Должна передавать дополнительный аргумент в функцию обратного вызова', () => {
26
+ const array = [1, 2, 3];
27
+ const callback = jest.fn();
28
+ array_walk(array, callback, 'дополнительный аргумент');
29
+ expect(callback).toHaveBeenCalledTimes(3);
30
+ expect(callback).toHaveBeenCalledWith(1, '0', 'дополнительный аргумент');
31
+ expect(callback).toHaveBeenCalledWith(2, '1', 'дополнительный аргумент');
32
+ expect(callback).toHaveBeenCalledWith(3, '2', 'дополнительный аргумент');
33
+ });
34
+
35
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
36
+ expect(() => array_walk('not an array', () => {})).toThrow(TypeError);
37
+ expect(() => array_walk('not an array', () => {})).toThrow(
38
+ 'Параметр "arr" должен быть массивом.',
39
+ );
40
+ });
41
+
42
+ test('Должна выбрасывать ошибку, если параметр callback не является функцией', () => {
43
+ expect(() => array_walk([], 'not a function')).toThrow(TypeError);
44
+ expect(() => array_walk([], 'not a function')).toThrow(
45
+ 'Параметр "callback" должен быть функцией.',
46
+ );
47
+ });
48
+ });
@@ -0,0 +1,53 @@
1
+ import { expect, test, describe, jest } from '@jest/globals';
2
+ import { array_walk_recursive } from '../../../index.mjs';
3
+
4
+ describe('Функция array_walk_recursive', () => {
5
+ test('Должна применять функцию к каждому элементу обычного массива рекурсивно', () => {
6
+ const array = [1, 2, [3, 4], 5];
7
+ const callback = jest.fn();
8
+ array_walk_recursive(array, callback);
9
+ expect(callback).toHaveBeenCalledTimes(5);
10
+ expect(callback).toHaveBeenCalledWith(1, '0', null);
11
+ expect(callback).toHaveBeenCalledWith(2, '1', null);
12
+ expect(callback).toHaveBeenCalledWith(3, '0', null);
13
+ expect(callback).toHaveBeenCalledWith(4, '1', null);
14
+ expect(callback).toHaveBeenCalledWith(5, '3', null);
15
+ });
16
+
17
+ test('Должна применять функцию к каждому элементу ассоциативного массива рекурсивно', () => {
18
+ const array = { a: 1, b: { c: 2, d: 3 }, e: 4 };
19
+ const callback = jest.fn();
20
+ array_walk_recursive(array, callback);
21
+ expect(callback).toHaveBeenCalledTimes(4);
22
+ expect(callback).toHaveBeenCalledWith(1, 'a', null);
23
+ expect(callback).toHaveBeenCalledWith(2, 'c', null);
24
+ expect(callback).toHaveBeenCalledWith(3, 'd', null);
25
+ expect(callback).toHaveBeenCalledWith(4, 'e', null);
26
+ });
27
+
28
+ test('Должна передавать дополнительный аргумент в функцию обратного вызова', () => {
29
+ const array = [1, 2, [3, 4], 5];
30
+ const callback = jest.fn();
31
+ array_walk_recursive(array, callback, 'дополнительный аргумент');
32
+ expect(callback).toHaveBeenCalledTimes(5);
33
+ expect(callback).toHaveBeenCalledWith(1, '0', 'дополнительный аргумент');
34
+ expect(callback).toHaveBeenCalledWith(2, '1', 'дополнительный аргумент');
35
+ expect(callback).toHaveBeenCalledWith(3, '0', 'дополнительный аргумент');
36
+ expect(callback).toHaveBeenCalledWith(4, '1', 'дополнительный аргумент');
37
+ expect(callback).toHaveBeenCalledWith(5, '3', 'дополнительный аргумент');
38
+ });
39
+
40
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
41
+ expect(() => array_walk_recursive('not an array', () => {})).toThrow(TypeError);
42
+ expect(() => array_walk_recursive('not an array', () => {})).toThrow(
43
+ 'Параметр "arr" должен быть массивом.',
44
+ );
45
+ });
46
+
47
+ test('Должна выбрасывать ошибку, если параметр callback не является функцией', () => {
48
+ expect(() => array_walk_recursive([], 'not a function')).toThrow(TypeError);
49
+ expect(() => array_walk_recursive([], 'not a function')).toThrow(
50
+ 'Параметр "callback" должен быть функцией.',
51
+ );
52
+ });
53
+ });
@@ -0,0 +1,27 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { count } from '../../../index.mjs';
3
+
4
+ describe('Функция count', () => {
5
+ test('Должна возвращать количество элементов в обычном массиве', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = count(array);
8
+ expect(result).toBe(5);
9
+ });
10
+
11
+ test('Должна возвращать количество элементов в ассоциативном массиве', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = count(array);
14
+ expect(result).toBe(3);
15
+ });
16
+
17
+ test('Должна возвращать 0 для пустого массива', () => {
18
+ const array = [];
19
+ const result = count(array);
20
+ expect(result).toBe(0);
21
+ });
22
+
23
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
24
+ expect(() => count('not an array')).toThrow(TypeError);
25
+ expect(() => count('not an array')).toThrow('Параметр "arr" должен быть массивом.');
26
+ });
27
+ });
@@ -0,0 +1,52 @@
1
+ import { expect, test, describe } from '@jest/globals';
2
+ import { in_array } from '../../../index.mjs';
3
+
4
+ describe('Функция in_array', () => {
5
+ test('Должна возвращать true, если значение существует в обычном массиве', () => {
6
+ const array = [1, 2, 3, 4, 5];
7
+ const result = in_array(array, 3);
8
+ expect(result).toBe(true);
9
+ });
10
+
11
+ test('Должна возвращать true, если значение существует в ассоциативном массиве', () => {
12
+ const array = { a: 1, b: 2, c: 3 };
13
+ const result = in_array(array, 2);
14
+ expect(result).toBe(true);
15
+ });
16
+
17
+ test('Должна возвращать false, если значение не существует в массиве', () => {
18
+ const array = [1, 2, 3];
19
+ const result = in_array(array, 4);
20
+ expect(result).toBe(false);
21
+ });
22
+
23
+ test('Должна возвращать false, если значение не существует в ассоциативном массиве', () => {
24
+ const array = { a: 1, b: 2, c: 3 };
25
+ const result = in_array(array, 4);
26
+ expect(result).toBe(false);
27
+ });
28
+
29
+ test('Должна возвращать true, если значение существует в массиве с использованием строгого сравнения', () => {
30
+ const array = [1, '2', 3];
31
+ const result = in_array(array, '2', true);
32
+ expect(result).toBe(true);
33
+ });
34
+
35
+ test('Должна возвращать false, если значение не существует в массиве с использованием строгого сравнения', () => {
36
+ const array = [1, '2', 3];
37
+ const result = in_array(array, 2, true);
38
+ expect(result).toBe(false);
39
+ });
40
+
41
+ test('Должна выбрасывать ошибку, если параметр не является массивом', () => {
42
+ expect(() => in_array('not an array', 1)).toThrow(TypeError);
43
+ expect(() => in_array('not an array', 1)).toThrow('Параметр "arr" должен быть массивом.');
44
+ });
45
+
46
+ test('Должна выбрасывать ошибку, если параметр strict не является логическим значением', () => {
47
+ expect(() => in_array([1, 2, 3], 1, 'not a boolean')).toThrow(TypeError);
48
+ expect(() => in_array([1, 2, 3], 1, 'not a boolean')).toThrow(
49
+ 'Параметр "strict" должен иметь логический тип.',
50
+ );
51
+ });
52
+ });