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