xref: /aosp_15_r20/external/openscreen/third_party/abseil/src/absl/random/BUILD.bazel (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
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("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
20load(
21    "//absl:copts/configure_copts.bzl",
22    "ABSL_DEFAULT_COPTS",
23    "ABSL_DEFAULT_LINKOPTS",
24    "ABSL_TEST_COPTS",
25)
26
27package(default_visibility = ["//visibility:public"])
28
29licenses(["notice"])
30
31cc_library(
32    name = "random",
33    hdrs = ["random.h"],
34    copts = ABSL_DEFAULT_COPTS,
35    linkopts = ABSL_DEFAULT_LINKOPTS,
36    deps = [
37        ":distributions",
38        ":seed_sequences",
39        "//absl/random/internal:nonsecure_base",
40        "//absl/random/internal:pcg_engine",
41        "//absl/random/internal:pool_urbg",
42        "//absl/random/internal:randen_engine",
43    ],
44)
45
46cc_library(
47    name = "distributions",
48    srcs = [
49        "discrete_distribution.cc",
50        "gaussian_distribution.cc",
51    ],
52    hdrs = [
53        "bernoulli_distribution.h",
54        "beta_distribution.h",
55        "discrete_distribution.h",
56        "distributions.h",
57        "exponential_distribution.h",
58        "gaussian_distribution.h",
59        "log_uniform_int_distribution.h",
60        "poisson_distribution.h",
61        "uniform_int_distribution.h",
62        "uniform_real_distribution.h",
63        "zipf_distribution.h",
64    ],
65    copts = ABSL_DEFAULT_COPTS,
66    linkopts = ABSL_DEFAULT_LINKOPTS,
67    deps = [
68        "//absl/base:base_internal",
69        "//absl/base:config",
70        "//absl/base:core_headers",
71        "//absl/meta:type_traits",
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/container:inlined_vector",
104        "//absl/random/internal:nonsecure_base",
105        "//absl/random/internal:pool_urbg",
106        "//absl/random/internal:salted_seed_seq",
107        "//absl/random/internal:seed_material",
108        "//absl/types:span",
109    ],
110)
111
112cc_library(
113    name = "bit_gen_ref",
114    hdrs = ["bit_gen_ref.h"],
115    copts = ABSL_DEFAULT_COPTS,
116    linkopts = ABSL_DEFAULT_LINKOPTS,
117    deps = [
118        ":random",
119        "//absl/base:core_headers",
120        "//absl/base:fast_type_id",
121        "//absl/meta:type_traits",
122        "//absl/random/internal:distribution_caller",
123        "//absl/random/internal:fast_uniform_bits",
124    ],
125)
126
127cc_library(
128    name = "mock_distributions",
129    testonly = 1,
130    hdrs = ["mock_distributions.h"],
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    deps = [
187        ":distributions",
188        ":random",
189        "//absl/base:raw_logging_internal",
190        "//absl/random/internal:distribution_test_util",
191        "//absl/random/internal:pcg_engine",
192        "//absl/random/internal:sequence_urbg",
193        "//absl/strings",
194        "//absl/strings:str_format",
195        "@com_google_googletest//:gtest_main",
196    ],
197)
198
199cc_test(
200    name = "distributions_test",
201    size = "small",
202    timeout = "moderate",
203    srcs = [
204        "distributions_test.cc",
205    ],
206    copts = ABSL_TEST_COPTS,
207    linkopts = ABSL_DEFAULT_LINKOPTS,
208    deps = [
209        ":distributions",
210        ":random",
211        "//absl/random/internal:distribution_test_util",
212        "@com_google_googletest//:gtest_main",
213    ],
214)
215
216cc_test(
217    name = "generators_test",
218    size = "small",
219    srcs = ["generators_test.cc"],
220    copts = ABSL_TEST_COPTS,
221    linkopts = ABSL_DEFAULT_LINKOPTS,
222    deps = [
223        ":distributions",
224        ":random",
225        "@com_google_googletest//:gtest_main",
226    ],
227)
228
229cc_test(
230    name = "log_uniform_int_distribution_test",
231    size = "medium",
232    srcs = [
233        "log_uniform_int_distribution_test.cc",
234    ],
235    copts = ABSL_TEST_COPTS,
236    linkopts = ABSL_DEFAULT_LINKOPTS,
237    deps = [
238        ":distributions",
239        ":random",
240        "//absl/base:raw_logging_internal",
241        "//absl/random/internal:distribution_test_util",
242        "//absl/random/internal:pcg_engine",
243        "//absl/random/internal:sequence_urbg",
244        "//absl/strings",
245        "//absl/strings:str_format",
246        "@com_google_googletest//:gtest_main",
247    ],
248)
249
250cc_test(
251    name = "discrete_distribution_test",
252    size = "medium",
253    srcs = [
254        "discrete_distribution_test.cc",
255    ],
256    copts = ABSL_TEST_COPTS,
257    linkopts = ABSL_DEFAULT_LINKOPTS,
258    deps = [
259        ":distributions",
260        ":random",
261        "//absl/base:raw_logging_internal",
262        "//absl/random/internal:distribution_test_util",
263        "//absl/random/internal:pcg_engine",
264        "//absl/random/internal:sequence_urbg",
265        "//absl/strings",
266        "@com_google_googletest//:gtest_main",
267    ],
268)
269
270cc_test(
271    name = "poisson_distribution_test",
272    size = "small",
273    timeout = "eternal",  # Android can take a very long time
274    srcs = [
275        "poisson_distribution_test.cc",
276    ],
277    copts = ABSL_TEST_COPTS,
278    linkopts = ABSL_DEFAULT_LINKOPTS,
279    tags = [
280        # Too Slow.
281        "no_test_android_arm",
282        "no_test_loonix",
283    ],
284    deps = [
285        ":distributions",
286        ":random",
287        "//absl/base:core_headers",
288        "//absl/base:raw_logging_internal",
289        "//absl/container:flat_hash_map",
290        "//absl/random/internal:distribution_test_util",
291        "//absl/random/internal:pcg_engine",
292        "//absl/random/internal:sequence_urbg",
293        "//absl/strings",
294        "//absl/strings:str_format",
295        "@com_google_googletest//:gtest_main",
296    ],
297)
298
299cc_test(
300    name = "exponential_distribution_test",
301    size = "small",
302    srcs = ["exponential_distribution_test.cc"],
303    copts = ABSL_TEST_COPTS,
304    linkopts = ABSL_DEFAULT_LINKOPTS,
305    deps = [
306        ":distributions",
307        ":random",
308        "//absl/base:core_headers",
309        "//absl/base:raw_logging_internal",
310        "//absl/random/internal:distribution_test_util",
311        "//absl/random/internal:pcg_engine",
312        "//absl/random/internal:sequence_urbg",
313        "//absl/strings",
314        "//absl/strings:str_format",
315        "@com_google_googletest//:gtest_main",
316    ],
317)
318
319cc_test(
320    name = "gaussian_distribution_test",
321    size = "small",
322    timeout = "eternal",  # Android can take a very long time
323    srcs = [
324        "gaussian_distribution_test.cc",
325    ],
326    copts = ABSL_TEST_COPTS,
327    linkopts = ABSL_DEFAULT_LINKOPTS,
328    deps = [
329        ":distributions",
330        ":random",
331        "//absl/base:core_headers",
332        "//absl/base:raw_logging_internal",
333        "//absl/random/internal:distribution_test_util",
334        "//absl/random/internal:sequence_urbg",
335        "//absl/strings",
336        "//absl/strings:str_format",
337        "@com_google_googletest//:gtest_main",
338    ],
339)
340
341cc_test(
342    name = "uniform_int_distribution_test",
343    size = "medium",
344    timeout = "long",
345    srcs = [
346        "uniform_int_distribution_test.cc",
347    ],
348    copts = ABSL_TEST_COPTS,
349    linkopts = ABSL_DEFAULT_LINKOPTS,
350    deps = [
351        ":distributions",
352        ":random",
353        "//absl/base:raw_logging_internal",
354        "//absl/random/internal:distribution_test_util",
355        "//absl/random/internal:pcg_engine",
356        "//absl/random/internal:sequence_urbg",
357        "//absl/strings",
358        "@com_google_googletest//:gtest_main",
359    ],
360)
361
362cc_test(
363    name = "uniform_real_distribution_test",
364    size = "medium",
365    srcs = [
366        "uniform_real_distribution_test.cc",
367    ],
368    copts = ABSL_TEST_COPTS,
369    linkopts = ABSL_DEFAULT_LINKOPTS,
370    tags = [
371        "no_test_android_arm",
372        "no_test_android_arm64",
373        "no_test_android_x86",
374    ],
375    deps = [
376        ":distributions",
377        ":random",
378        "//absl/base:raw_logging_internal",
379        "//absl/random/internal:distribution_test_util",
380        "//absl/random/internal:pcg_engine",
381        "//absl/random/internal:sequence_urbg",
382        "//absl/strings",
383        "@com_google_googletest//:gtest_main",
384    ],
385)
386
387cc_test(
388    name = "zipf_distribution_test",
389    size = "medium",
390    srcs = [
391        "zipf_distribution_test.cc",
392    ],
393    copts = ABSL_TEST_COPTS,
394    linkopts = ABSL_DEFAULT_LINKOPTS,
395    deps = [
396        ":distributions",
397        ":random",
398        "//absl/base:raw_logging_internal",
399        "//absl/random/internal:distribution_test_util",
400        "//absl/random/internal:pcg_engine",
401        "//absl/random/internal:sequence_urbg",
402        "//absl/strings",
403        "@com_google_googletest//:gtest_main",
404    ],
405)
406
407cc_test(
408    name = "bit_gen_ref_test",
409    size = "small",
410    srcs = ["bit_gen_ref_test.cc"],
411    copts = ABSL_TEST_COPTS,
412    linkopts = ABSL_DEFAULT_LINKOPTS,
413    deps = [
414        ":bit_gen_ref",
415        ":random",
416        "//absl/base:fast_type_id",
417        "//absl/random/internal:sequence_urbg",
418        "@com_google_googletest//:gtest_main",
419    ],
420)
421
422cc_test(
423    name = "mocking_bit_gen_test",
424    size = "small",
425    srcs = ["mocking_bit_gen_test.cc"],
426    copts = ABSL_TEST_COPTS,
427    linkopts = ABSL_DEFAULT_LINKOPTS,
428    deps = [
429        ":bit_gen_ref",
430        ":mock_distributions",
431        ":mocking_bit_gen",
432        ":random",
433        "@com_google_googletest//:gtest_main",
434    ],
435)
436
437cc_test(
438    name = "mock_distributions_test",
439    size = "small",
440    srcs = ["mock_distributions_test.cc"],
441    copts = ABSL_TEST_COPTS,
442    linkopts = ABSL_DEFAULT_LINKOPTS,
443    deps = [
444        ":mock_distributions",
445        ":mocking_bit_gen",
446        ":random",
447        "@com_google_googletest//:gtest_main",
448    ],
449)
450
451cc_test(
452    name = "examples_test",
453    size = "small",
454    srcs = ["examples_test.cc"],
455    copts = ABSL_TEST_COPTS,
456    linkopts = ABSL_DEFAULT_LINKOPTS,
457    deps = [
458        ":random",
459        "@com_google_googletest//:gtest_main",
460    ],
461)
462
463cc_test(
464    name = "seed_sequences_test",
465    size = "small",
466    srcs = ["seed_sequences_test.cc"],
467    copts = ABSL_TEST_COPTS,
468    linkopts = ABSL_DEFAULT_LINKOPTS,
469    deps = [
470        ":random",
471        ":seed_sequences",
472        "//absl/random/internal:nonsecure_base",
473        "@com_google_googletest//:gtest_main",
474    ],
475)
476
477BENCHMARK_TAGS = [
478    "benchmark",
479    "no_test_android_arm",
480    "no_test_android_arm64",
481    "no_test_android_x86",
482    "no_test_darwin_x86_64",
483    "no_test_ios_x86_64",
484    "no_test_loonix",
485    "no_test_msvc_x64",
486    "no_test_wasm",
487]
488
489# Benchmarks for various methods / test utilities
490cc_binary(
491    name = "benchmarks",
492    testonly = 1,
493    srcs = [
494        "benchmarks.cc",
495    ],
496    copts = ABSL_TEST_COPTS,
497    linkopts = ABSL_DEFAULT_LINKOPTS,
498    tags = BENCHMARK_TAGS,
499    deps = [
500        ":distributions",
501        ":random",
502        ":seed_sequences",
503        "//absl/base:core_headers",
504        "//absl/meta:type_traits",
505        "//absl/random/internal:fast_uniform_bits",
506        "//absl/random/internal:randen_engine",
507        "@com_github_google_benchmark//:benchmark_main",
508    ],
509)
510