xref: /aosp_15_r20/external/webrtc/third_party/abseil-cpp/absl/random/BUILD.bazel (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1#
2# Copyright 2019 The Abseil Authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17# ABSL random-number generation libraries.
18
19load(
20    "//absl:copts/configure_copts.bzl",
21    "ABSL_DEFAULT_COPTS",
22    "ABSL_DEFAULT_LINKOPTS",
23    "ABSL_TEST_COPTS",
24)
25
26package(default_visibility = ["//visibility:public"])
27
28licenses(["notice"])
29
30cc_library(
31    name = "random",
32    hdrs = ["random.h"],
33    copts = ABSL_DEFAULT_COPTS,
34    linkopts = ABSL_DEFAULT_LINKOPTS,
35    deps = [
36        ":distributions",
37        ":seed_sequences",
38        "//absl/random/internal:nonsecure_base",
39        "//absl/random/internal:pcg_engine",
40        "//absl/random/internal:pool_urbg",
41        "//absl/random/internal:randen_engine",
42    ],
43)
44
45cc_library(
46    name = "distributions",
47    srcs = [
48        "discrete_distribution.cc",
49        "gaussian_distribution.cc",
50    ],
51    hdrs = [
52        "bernoulli_distribution.h",
53        "beta_distribution.h",
54        "discrete_distribution.h",
55        "distributions.h",
56        "exponential_distribution.h",
57        "gaussian_distribution.h",
58        "log_uniform_int_distribution.h",
59        "poisson_distribution.h",
60        "uniform_int_distribution.h",
61        "uniform_real_distribution.h",
62        "zipf_distribution.h",
63    ],
64    copts = ABSL_DEFAULT_COPTS,
65    linkopts = ABSL_DEFAULT_LINKOPTS,
66    deps = [
67        "//absl/base:base_internal",
68        "//absl/base:config",
69        "//absl/base:core_headers",
70        "//absl/meta:type_traits",
71        "//absl/numeric:bits",
72        "//absl/random/internal:distribution_caller",
73        "//absl/random/internal:fast_uniform_bits",
74        "//absl/random/internal:fastmath",
75        "//absl/random/internal:generate_real",
76        "//absl/random/internal:iostream_state_saver",
77        "//absl/random/internal:traits",
78        "//absl/random/internal:uniform_helper",
79        "//absl/random/internal:wide_multiply",
80        "//absl/strings",
81    ],
82)
83
84cc_library(
85    name = "seed_gen_exception",
86    srcs = ["seed_gen_exception.cc"],
87    hdrs = ["seed_gen_exception.h"],
88    copts = ABSL_DEFAULT_COPTS,
89    linkopts = ABSL_DEFAULT_LINKOPTS,
90    deps = ["//absl/base:config"],
91)
92
93cc_library(
94    name = "seed_sequences",
95    srcs = ["seed_sequences.cc"],
96    hdrs = [
97        "seed_sequences.h",
98    ],
99    copts = ABSL_DEFAULT_COPTS,
100    linkopts = ABSL_DEFAULT_LINKOPTS,
101    deps = [
102        ":seed_gen_exception",
103        "//absl/base:config",
104        "//absl/random/internal:pool_urbg",
105        "//absl/random/internal:salted_seed_seq",
106        "//absl/random/internal:seed_material",
107        "//absl/types:span",
108    ],
109)
110
111cc_library(
112    name = "bit_gen_ref",
113    hdrs = ["bit_gen_ref.h"],
114    copts = ABSL_DEFAULT_COPTS,
115    linkopts = ABSL_DEFAULT_LINKOPTS,
116    deps = [
117        ":random",
118        "//absl/base:core_headers",
119        "//absl/base:fast_type_id",
120        "//absl/meta:type_traits",
121        "//absl/random/internal:distribution_caller",
122        "//absl/random/internal:fast_uniform_bits",
123    ],
124)
125
126cc_library(
127    name = "mock_distributions",
128    testonly = 1,
129    hdrs = ["mock_distributions.h"],
130    linkopts = ABSL_DEFAULT_LINKOPTS,
131    deps = [
132        ":distributions",
133        ":mocking_bit_gen",
134        "//absl/meta:type_traits",
135        "//absl/random/internal:mock_overload_set",
136        "@com_google_googletest//:gtest",
137    ],
138)
139
140cc_library(
141    name = "mocking_bit_gen",
142    testonly = 1,
143    hdrs = [
144        "mocking_bit_gen.h",
145    ],
146    linkopts = ABSL_DEFAULT_LINKOPTS,
147    deps = [
148        ":distributions",
149        ":random",
150        "//absl/base:fast_type_id",
151        "//absl/container:flat_hash_map",
152        "//absl/meta:type_traits",
153        "//absl/random/internal:distribution_caller",
154        "//absl/strings",
155        "//absl/types:span",
156        "//absl/types:variant",
157        "//absl/utility",
158        "@com_google_googletest//:gtest",
159    ],
160)
161
162cc_test(
163    name = "bernoulli_distribution_test",
164    size = "small",
165    timeout = "eternal",  # Android can take a very long time
166    srcs = ["bernoulli_distribution_test.cc"],
167    copts = ABSL_TEST_COPTS,
168    linkopts = ABSL_DEFAULT_LINKOPTS,
169    deps = [
170        ":distributions",
171        ":random",
172        "//absl/random/internal:pcg_engine",
173        "//absl/random/internal:sequence_urbg",
174        "@com_google_googletest//:gtest_main",
175    ],
176)
177
178cc_test(
179    name = "beta_distribution_test",
180    size = "small",
181    timeout = "eternal",  # Android can take a very long time
182    srcs = ["beta_distribution_test.cc"],
183    copts = ABSL_TEST_COPTS,
184    flaky = 1,
185    linkopts = ABSL_DEFAULT_LINKOPTS,
186    tags = [
187        "no_test_wasm",
188    ],
189    deps = [
190        ":distributions",
191        ":random",
192        "//absl/base:raw_logging_internal",
193        "//absl/numeric:representation",
194        "//absl/random/internal:distribution_test_util",
195        "//absl/random/internal:pcg_engine",
196        "//absl/random/internal:sequence_urbg",
197        "//absl/strings",
198        "//absl/strings:str_format",
199        "@com_google_googletest//:gtest_main",
200    ],
201)
202
203cc_test(
204    name = "distributions_test",
205    size = "small",
206    timeout = "moderate",
207    srcs = [
208        "distributions_test.cc",
209    ],
210    copts = ABSL_TEST_COPTS,
211    linkopts = ABSL_DEFAULT_LINKOPTS,
212    deps = [
213        ":distributions",
214        ":random",
215        "//absl/random/internal:distribution_test_util",
216        "@com_google_googletest//:gtest_main",
217    ],
218)
219
220cc_test(
221    name = "generators_test",
222    size = "small",
223    srcs = ["generators_test.cc"],
224    copts = ABSL_TEST_COPTS,
225    linkopts = ABSL_DEFAULT_LINKOPTS,
226    deps = [
227        ":distributions",
228        ":random",
229        "@com_google_googletest//:gtest_main",
230    ],
231)
232
233cc_test(
234    name = "log_uniform_int_distribution_test",
235    size = "medium",
236    srcs = [
237        "log_uniform_int_distribution_test.cc",
238    ],
239    copts = ABSL_TEST_COPTS,
240    linkopts = ABSL_DEFAULT_LINKOPTS,
241    tags = [
242        "no_test_wasm",  # Does not converge on WASM.
243    ],
244    deps = [
245        ":distributions",
246        ":random",
247        "//absl/base:raw_logging_internal",
248        "//absl/random/internal:distribution_test_util",
249        "//absl/random/internal:pcg_engine",
250        "//absl/random/internal:sequence_urbg",
251        "//absl/strings",
252        "//absl/strings:str_format",
253        "@com_google_googletest//:gtest_main",
254    ],
255)
256
257cc_test(
258    name = "discrete_distribution_test",
259    size = "medium",
260    srcs = [
261        "discrete_distribution_test.cc",
262    ],
263    copts = ABSL_TEST_COPTS,
264    linkopts = ABSL_DEFAULT_LINKOPTS,
265    deps = [
266        ":distributions",
267        ":random",
268        "//absl/base:raw_logging_internal",
269        "//absl/random/internal:distribution_test_util",
270        "//absl/random/internal:pcg_engine",
271        "//absl/random/internal:sequence_urbg",
272        "//absl/strings",
273        "@com_google_googletest//:gtest_main",
274    ],
275)
276
277cc_test(
278    name = "poisson_distribution_test",
279    size = "small",
280    timeout = "eternal",  # Android can take a very long time
281    srcs = [
282        "poisson_distribution_test.cc",
283    ],
284    copts = ABSL_TEST_COPTS,
285    linkopts = ABSL_DEFAULT_LINKOPTS,
286    tags = [
287        # Too Slow.
288        "no_test_android_arm",
289        "no_test_loonix",
290    ],
291    deps = [
292        ":distributions",
293        ":random",
294        "//absl/base:core_headers",
295        "//absl/base:raw_logging_internal",
296        "//absl/container:flat_hash_map",
297        "//absl/random/internal:distribution_test_util",
298        "//absl/random/internal:pcg_engine",
299        "//absl/random/internal:sequence_urbg",
300        "//absl/strings",
301        "//absl/strings:str_format",
302        "@com_google_googletest//:gtest_main",
303    ],
304)
305
306cc_test(
307    name = "exponential_distribution_test",
308    size = "small",
309    timeout = "moderate",
310    srcs = ["exponential_distribution_test.cc"],
311    copts = ABSL_TEST_COPTS,
312    linkopts = ABSL_DEFAULT_LINKOPTS,
313    deps = [
314        ":distributions",
315        ":random",
316        "//absl/base:core_headers",
317        "//absl/base:raw_logging_internal",
318        "//absl/numeric:representation",
319        "//absl/random/internal:distribution_test_util",
320        "//absl/random/internal:pcg_engine",
321        "//absl/random/internal:sequence_urbg",
322        "//absl/strings",
323        "//absl/strings:str_format",
324        "@com_google_googletest//:gtest_main",
325    ],
326)
327
328cc_test(
329    name = "gaussian_distribution_test",
330    size = "small",
331    timeout = "eternal",  # Android can take a very long time
332    srcs = [
333        "gaussian_distribution_test.cc",
334    ],
335    copts = ABSL_TEST_COPTS,
336    linkopts = ABSL_DEFAULT_LINKOPTS,
337    deps = [
338        ":distributions",
339        ":random",
340        "//absl/base:core_headers",
341        "//absl/base:raw_logging_internal",
342        "//absl/numeric:representation",
343        "//absl/random/internal:distribution_test_util",
344        "//absl/random/internal:sequence_urbg",
345        "//absl/strings",
346        "//absl/strings:str_format",
347        "@com_google_googletest//:gtest_main",
348    ],
349)
350
351cc_test(
352    name = "uniform_int_distribution_test",
353    size = "medium",
354    timeout = "long",
355    srcs = [
356        "uniform_int_distribution_test.cc",
357    ],
358    copts = ABSL_TEST_COPTS,
359    linkopts = ABSL_DEFAULT_LINKOPTS,
360    deps = [
361        ":distributions",
362        ":random",
363        "//absl/base:raw_logging_internal",
364        "//absl/random/internal:distribution_test_util",
365        "//absl/random/internal:pcg_engine",
366        "//absl/random/internal:sequence_urbg",
367        "//absl/strings",
368        "@com_google_googletest//:gtest_main",
369    ],
370)
371
372cc_test(
373    name = "uniform_real_distribution_test",
374    size = "medium",
375    srcs = [
376        "uniform_real_distribution_test.cc",
377    ],
378    copts = ABSL_TEST_COPTS,
379    linkopts = ABSL_DEFAULT_LINKOPTS,
380    tags = [
381        "no_test_android_arm",
382        "no_test_android_arm64",
383        "no_test_android_x86",
384    ],
385    deps = [
386        ":distributions",
387        ":random",
388        "//absl/base:raw_logging_internal",
389        "//absl/numeric:representation",
390        "//absl/random/internal:distribution_test_util",
391        "//absl/random/internal:pcg_engine",
392        "//absl/random/internal:sequence_urbg",
393        "//absl/strings",
394        "@com_google_googletest//:gtest_main",
395    ],
396)
397
398cc_test(
399    name = "zipf_distribution_test",
400    size = "medium",
401    srcs = [
402        "zipf_distribution_test.cc",
403    ],
404    copts = ABSL_TEST_COPTS,
405    linkopts = ABSL_DEFAULT_LINKOPTS,
406    deps = [
407        ":distributions",
408        ":random",
409        "//absl/base:raw_logging_internal",
410        "//absl/random/internal:distribution_test_util",
411        "//absl/random/internal:pcg_engine",
412        "//absl/random/internal:sequence_urbg",
413        "//absl/strings",
414        "@com_google_googletest//:gtest_main",
415    ],
416)
417
418cc_test(
419    name = "bit_gen_ref_test",
420    size = "small",
421    srcs = ["bit_gen_ref_test.cc"],
422    copts = ABSL_TEST_COPTS,
423    linkopts = ABSL_DEFAULT_LINKOPTS,
424    deps = [
425        ":bit_gen_ref",
426        ":random",
427        "//absl/base:fast_type_id",
428        "//absl/random/internal:sequence_urbg",
429        "@com_google_googletest//:gtest_main",
430    ],
431)
432
433cc_test(
434    name = "mocking_bit_gen_test",
435    size = "small",
436    srcs = ["mocking_bit_gen_test.cc"],
437    copts = ABSL_TEST_COPTS,
438    linkopts = ABSL_DEFAULT_LINKOPTS,
439    tags = [
440        "no_test_wasm",
441    ],
442    deps = [
443        ":bit_gen_ref",
444        ":mock_distributions",
445        ":mocking_bit_gen",
446        ":random",
447        "@com_google_googletest//:gtest_main",
448    ],
449)
450
451cc_test(
452    name = "mock_distributions_test",
453    size = "small",
454    srcs = ["mock_distributions_test.cc"],
455    copts = ABSL_TEST_COPTS,
456    linkopts = ABSL_DEFAULT_LINKOPTS,
457    tags = [
458        "no_test_wasm",
459    ],
460    deps = [
461        ":mock_distributions",
462        ":mocking_bit_gen",
463        ":random",
464        "@com_google_googletest//:gtest_main",
465    ],
466)
467
468cc_test(
469    name = "examples_test",
470    size = "small",
471    srcs = ["examples_test.cc"],
472    copts = ABSL_TEST_COPTS,
473    linkopts = ABSL_DEFAULT_LINKOPTS,
474    tags = [
475        "no_test_wasm",
476    ],
477    deps = [
478        ":random",
479        "@com_google_googletest//:gtest_main",
480    ],
481)
482
483cc_test(
484    name = "seed_sequences_test",
485    size = "small",
486    srcs = ["seed_sequences_test.cc"],
487    copts = ABSL_TEST_COPTS,
488    linkopts = ABSL_DEFAULT_LINKOPTS,
489    deps = [
490        ":random",
491        ":seed_sequences",
492        "//absl/random/internal:nonsecure_base",
493        "@com_google_googletest//:gtest_main",
494    ],
495)
496
497BENCHMARK_TAGS = [
498    "benchmark",
499    "no_test_android_arm",
500    "no_test_android_arm64",
501    "no_test_android_x86",
502    "no_test_darwin_x86_64",
503    "no_test_ios_x86_64",
504    "no_test_loonix",
505    "no_test_msvc_x64",
506    "no_test_wasm",
507]
508
509# Benchmarks for various methods / test utilities
510cc_binary(
511    name = "benchmarks",
512    testonly = 1,
513    srcs = [
514        "benchmarks.cc",
515    ],
516    copts = ABSL_TEST_COPTS,
517    linkopts = ABSL_DEFAULT_LINKOPTS,
518    tags = BENCHMARK_TAGS,
519    deps = [
520        ":distributions",
521        ":random",
522        ":seed_sequences",
523        "//absl/base:core_headers",
524        "//absl/meta:type_traits",
525        "//absl/random/internal:fast_uniform_bits",
526        "//absl/random/internal:randen_engine",
527        "@com_github_google_benchmark//:benchmark_main",
528    ],
529)
530