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