xref: /aosp_15_r20/external/angle/third_party/abseil-cpp/absl/random/BUILD.bazel (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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/random/internal:distribution_caller",
79        "//absl/random/internal:fast_uniform_bits",
80        "//absl/random/internal:fastmath",
81        "//absl/random/internal:generate_real",
82        "//absl/random/internal:iostream_state_saver",
83        "//absl/random/internal:traits",
84        "//absl/random/internal:uniform_helper",
85        "//absl/random/internal:wide_multiply",
86        "//absl/strings",
87    ],
88)
89
90cc_library(
91    name = "seed_gen_exception",
92    srcs = ["seed_gen_exception.cc"],
93    hdrs = ["seed_gen_exception.h"],
94    copts = ABSL_DEFAULT_COPTS,
95    linkopts = ABSL_DEFAULT_LINKOPTS,
96    deps = ["//absl/base:config"],
97)
98
99cc_library(
100    name = "seed_sequences",
101    srcs = ["seed_sequences.cc"],
102    hdrs = [
103        "seed_sequences.h",
104    ],
105    copts = ABSL_DEFAULT_COPTS,
106    linkopts = ABSL_DEFAULT_LINKOPTS,
107    deps = [
108        ":seed_gen_exception",
109        "//absl/base:config",
110        "//absl/base:nullability",
111        "//absl/random/internal:pool_urbg",
112        "//absl/random/internal:salted_seed_seq",
113        "//absl/random/internal:seed_material",
114        "//absl/strings:string_view",
115        "//absl/types:span",
116    ],
117)
118
119cc_library(
120    name = "bit_gen_ref",
121    hdrs = ["bit_gen_ref.h"],
122    copts = ABSL_DEFAULT_COPTS,
123    linkopts = ABSL_DEFAULT_LINKOPTS,
124    deps = [
125        ":random",
126        "//absl/base:config",
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:fast_type_id",
160        "//absl/container:flat_hash_map",
161        "//absl/meta:type_traits",
162        "//absl/random/internal:mock_helpers",
163        "//absl/utility",
164        "@com_google_googletest//:gtest",
165    ],
166)
167
168cc_test(
169    name = "bernoulli_distribution_test",
170    size = "small",
171    timeout = "eternal",  # Android can take a very long time
172    srcs = ["bernoulli_distribution_test.cc"],
173    copts = ABSL_TEST_COPTS,
174    linkopts = ABSL_DEFAULT_LINKOPTS,
175    deps = [
176        ":distributions",
177        ":random",
178        "//absl/random/internal:pcg_engine",
179        "//absl/random/internal:sequence_urbg",
180        "@com_google_googletest//:gtest",
181        "@com_google_googletest//:gtest_main",
182    ],
183)
184
185cc_test(
186    name = "beta_distribution_test",
187    size = "small",
188    timeout = "eternal",  # Android can take a very long time
189    srcs = ["beta_distribution_test.cc"],
190    copts = ABSL_TEST_COPTS,
191    flaky = 1,
192    linkopts = ABSL_DEFAULT_LINKOPTS,
193    tags = [
194        "no_test_wasm",
195    ],
196    deps = [
197        ":distributions",
198        ":random",
199        "//absl/log",
200        "//absl/numeric:representation",
201        "//absl/random/internal:distribution_test_util",
202        "//absl/random/internal:pcg_engine",
203        "//absl/random/internal:sequence_urbg",
204        "//absl/strings",
205        "//absl/strings:str_format",
206        "@com_google_googletest//:gtest",
207        "@com_google_googletest//:gtest_main",
208    ],
209)
210
211cc_test(
212    name = "distributions_test",
213    size = "small",
214    timeout = "moderate",
215    srcs = [
216        "distributions_test.cc",
217    ],
218    copts = ABSL_TEST_COPTS,
219    linkopts = ABSL_DEFAULT_LINKOPTS,
220    deps = [
221        ":distributions",
222        ":random",
223        "//absl/meta:type_traits",
224        "//absl/numeric:int128",
225        "//absl/random/internal:distribution_test_util",
226        "@com_google_googletest//:gtest",
227        "@com_google_googletest//:gtest_main",
228    ],
229)
230
231cc_test(
232    name = "generators_test",
233    size = "small",
234    srcs = ["generators_test.cc"],
235    copts = ABSL_TEST_COPTS,
236    linkopts = ABSL_DEFAULT_LINKOPTS,
237    deps = [
238        ":distributions",
239        ":random",
240        "@com_google_googletest//:gtest",
241        "@com_google_googletest//:gtest_main",
242    ],
243)
244
245cc_test(
246    name = "log_uniform_int_distribution_test",
247    size = "medium",
248    srcs = [
249        "log_uniform_int_distribution_test.cc",
250    ],
251    copts = ABSL_TEST_COPTS,
252    linkopts = ABSL_DEFAULT_LINKOPTS,
253    tags = [
254        "no_test_wasm",  # Does not converge on WASM.
255    ],
256    deps = [
257        ":distributions",
258        ":random",
259        "//absl/log",
260        "//absl/random/internal:distribution_test_util",
261        "//absl/random/internal:pcg_engine",
262        "//absl/random/internal:sequence_urbg",
263        "//absl/strings",
264        "//absl/strings:str_format",
265        "@com_google_googletest//:gtest",
266        "@com_google_googletest//:gtest_main",
267    ],
268)
269
270cc_test(
271    name = "discrete_distribution_test",
272    size = "medium",
273    srcs = [
274        "discrete_distribution_test.cc",
275    ],
276    copts = ABSL_TEST_COPTS,
277    linkopts = ABSL_DEFAULT_LINKOPTS,
278    deps = [
279        ":distributions",
280        ":random",
281        "//absl/log",
282        "//absl/random/internal:distribution_test_util",
283        "//absl/random/internal:pcg_engine",
284        "//absl/random/internal:sequence_urbg",
285        "//absl/strings",
286        "@com_google_googletest//:gtest",
287        "@com_google_googletest//:gtest_main",
288    ],
289)
290
291cc_test(
292    name = "poisson_distribution_test",
293    size = "small",
294    timeout = "eternal",  # Android can take a very long time
295    srcs = [
296        "poisson_distribution_test.cc",
297    ],
298    copts = ABSL_TEST_COPTS,
299    linkopts = ABSL_DEFAULT_LINKOPTS,
300    tags = [
301        # Too Slow.
302        "no_test_android_arm",
303        "no_test_loonix",
304    ],
305    deps = [
306        ":distributions",
307        ":random",
308        "//absl/base:core_headers",
309        "//absl/container:flat_hash_map",
310        "//absl/log",
311        "//absl/random/internal:distribution_test_util",
312        "//absl/random/internal:pcg_engine",
313        "//absl/random/internal:sequence_urbg",
314        "//absl/strings",
315        "//absl/strings:str_format",
316        "@com_google_googletest//:gtest",
317        "@com_google_googletest//:gtest_main",
318    ],
319)
320
321cc_test(
322    name = "exponential_distribution_test",
323    size = "small",
324    timeout = "moderate",
325    srcs = ["exponential_distribution_test.cc"],
326    copts = ABSL_TEST_COPTS,
327    linkopts = ABSL_DEFAULT_LINKOPTS,
328    deps = [
329        ":distributions",
330        ":random",
331        "//absl/base:core_headers",
332        "//absl/log",
333        "//absl/numeric:representation",
334        "//absl/random/internal:distribution_test_util",
335        "//absl/random/internal:pcg_engine",
336        "//absl/random/internal:sequence_urbg",
337        "//absl/strings",
338        "//absl/strings:str_format",
339        "@com_google_googletest//:gtest",
340        "@com_google_googletest//:gtest_main",
341    ],
342)
343
344cc_test(
345    name = "gaussian_distribution_test",
346    size = "small",
347    timeout = "eternal",  # Android can take a very long time
348    srcs = [
349        "gaussian_distribution_test.cc",
350    ],
351    copts = ABSL_TEST_COPTS,
352    linkopts = ABSL_DEFAULT_LINKOPTS,
353    deps = [
354        ":distributions",
355        ":random",
356        "//absl/base:core_headers",
357        "//absl/log",
358        "//absl/numeric:representation",
359        "//absl/random/internal:distribution_test_util",
360        "//absl/random/internal:sequence_urbg",
361        "//absl/strings",
362        "//absl/strings:str_format",
363        "@com_google_googletest//:gtest",
364        "@com_google_googletest//:gtest_main",
365    ],
366)
367
368cc_test(
369    name = "uniform_int_distribution_test",
370    size = "medium",
371    timeout = "long",
372    srcs = [
373        "uniform_int_distribution_test.cc",
374    ],
375    copts = ABSL_TEST_COPTS,
376    linkopts = ABSL_DEFAULT_LINKOPTS,
377    deps = [
378        ":distributions",
379        ":random",
380        "//absl/log",
381        "//absl/random/internal:distribution_test_util",
382        "//absl/random/internal:pcg_engine",
383        "//absl/random/internal:sequence_urbg",
384        "//absl/strings",
385        "@com_google_googletest//:gtest",
386        "@com_google_googletest//:gtest_main",
387    ],
388)
389
390cc_test(
391    name = "uniform_real_distribution_test",
392    size = "medium",
393    srcs = [
394        "uniform_real_distribution_test.cc",
395    ],
396    copts = ABSL_TEST_COPTS,
397    linkopts = ABSL_DEFAULT_LINKOPTS,
398    tags = [
399        "no_test_android_arm",
400        "no_test_android_arm64",
401        "no_test_android_x86",
402    ],
403    deps = [
404        ":distributions",
405        ":random",
406        "//absl/log",
407        "//absl/numeric:representation",
408        "//absl/random/internal:distribution_test_util",
409        "//absl/random/internal:pcg_engine",
410        "//absl/random/internal:sequence_urbg",
411        "//absl/strings",
412        "@com_google_googletest//:gtest",
413        "@com_google_googletest//:gtest_main",
414    ],
415)
416
417cc_test(
418    name = "zipf_distribution_test",
419    size = "medium",
420    srcs = [
421        "zipf_distribution_test.cc",
422    ],
423    copts = ABSL_TEST_COPTS,
424    linkopts = ABSL_DEFAULT_LINKOPTS,
425    deps = [
426        ":distributions",
427        ":random",
428        "//absl/log",
429        "//absl/random/internal:distribution_test_util",
430        "//absl/random/internal:pcg_engine",
431        "//absl/random/internal:sequence_urbg",
432        "//absl/strings",
433        "@com_google_googletest//:gtest",
434        "@com_google_googletest//:gtest_main",
435    ],
436)
437
438cc_test(
439    name = "bit_gen_ref_test",
440    size = "small",
441    srcs = ["bit_gen_ref_test.cc"],
442    copts = ABSL_TEST_COPTS,
443    linkopts = ABSL_DEFAULT_LINKOPTS,
444    deps = [
445        ":bit_gen_ref",
446        ":random",
447        "//absl/base:fast_type_id",
448        "//absl/random/internal:sequence_urbg",
449        "@com_google_googletest//:gtest",
450        "@com_google_googletest//:gtest_main",
451    ],
452)
453
454cc_test(
455    name = "mocking_bit_gen_test",
456    size = "small",
457    srcs = ["mocking_bit_gen_test.cc"],
458    copts = ABSL_TEST_COPTS,
459    linkopts = ABSL_DEFAULT_LINKOPTS,
460    tags = [
461        "no_test_wasm",
462    ],
463    deps = [
464        ":bit_gen_ref",
465        ":mock_distributions",
466        ":mocking_bit_gen",
467        ":random",
468        "@com_google_googletest//:gtest",
469        "@com_google_googletest//:gtest_main",
470    ],
471)
472
473cc_test(
474    name = "mock_distributions_test",
475    size = "small",
476    timeout = "moderate",
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