• 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(
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    srcs = ["exponential_distribution_test.cc"],
310    copts = ABSL_TEST_COPTS,
311    linkopts = ABSL_DEFAULT_LINKOPTS,
312    deps = [
313        ":distributions",
314        ":random",
315        "//absl/base:core_headers",
316        "//absl/base:raw_logging_internal",
317        "//absl/numeric:representation",
318        "//absl/random/internal:distribution_test_util",
319        "//absl/random/internal:pcg_engine",
320        "//absl/random/internal:sequence_urbg",
321        "//absl/strings",
322        "//absl/strings:str_format",
323        "@com_google_googletest//:gtest_main",
324    ],
325)
326
327cc_test(
328    name = "gaussian_distribution_test",
329    size = "small",
330    timeout = "eternal",  # Android can take a very long time
331    srcs = [
332        "gaussian_distribution_test.cc",
333    ],
334    copts = ABSL_TEST_COPTS,
335    linkopts = ABSL_DEFAULT_LINKOPTS,
336    deps = [
337        ":distributions",
338        ":random",
339        "//absl/base:core_headers",
340        "//absl/base:raw_logging_internal",
341        "//absl/numeric:representation",
342        "//absl/random/internal:distribution_test_util",
343        "//absl/random/internal:sequence_urbg",
344        "//absl/strings",
345        "//absl/strings:str_format",
346        "@com_google_googletest//:gtest_main",
347    ],
348)
349
350cc_test(
351    name = "uniform_int_distribution_test",
352    size = "medium",
353    timeout = "long",
354    srcs = [
355        "uniform_int_distribution_test.cc",
356    ],
357    copts = ABSL_TEST_COPTS,
358    linkopts = ABSL_DEFAULT_LINKOPTS,
359    deps = [
360        ":distributions",
361        ":random",
362        "//absl/base:raw_logging_internal",
363        "//absl/random/internal:distribution_test_util",
364        "//absl/random/internal:pcg_engine",
365        "//absl/random/internal:sequence_urbg",
366        "//absl/strings",
367        "@com_google_googletest//:gtest_main",
368    ],
369)
370
371cc_test(
372    name = "uniform_real_distribution_test",
373    size = "medium",
374    srcs = [
375        "uniform_real_distribution_test.cc",
376    ],
377    copts = ABSL_TEST_COPTS,
378    linkopts = ABSL_DEFAULT_LINKOPTS,
379    tags = [
380        "no_test_android_arm",
381        "no_test_android_arm64",
382        "no_test_android_x86",
383    ],
384    deps = [
385        ":distributions",
386        ":random",
387        "//absl/base:raw_logging_internal",
388        "//absl/numeric:representation",
389        "//absl/random/internal:distribution_test_util",
390        "//absl/random/internal:pcg_engine",
391        "//absl/random/internal:sequence_urbg",
392        "//absl/strings",
393        "@com_google_googletest//:gtest_main",
394    ],
395)
396
397cc_test(
398    name = "zipf_distribution_test",
399    size = "medium",
400    srcs = [
401        "zipf_distribution_test.cc",
402    ],
403    copts = ABSL_TEST_COPTS,
404    linkopts = ABSL_DEFAULT_LINKOPTS,
405    deps = [
406        ":distributions",
407        ":random",
408        "//absl/base:raw_logging_internal",
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_main",
414    ],
415)
416
417cc_test(
418    name = "bit_gen_ref_test",
419    size = "small",
420    srcs = ["bit_gen_ref_test.cc"],
421    copts = ABSL_TEST_COPTS,
422    linkopts = ABSL_DEFAULT_LINKOPTS,
423    deps = [
424        ":bit_gen_ref",
425        ":random",
426        "//absl/base:fast_type_id",
427        "//absl/random/internal:sequence_urbg",
428        "@com_google_googletest//:gtest_main",
429    ],
430)
431
432cc_test(
433    name = "mocking_bit_gen_test",
434    size = "small",
435    srcs = ["mocking_bit_gen_test.cc"],
436    copts = ABSL_TEST_COPTS,
437    linkopts = ABSL_DEFAULT_LINKOPTS,
438    tags = [
439        "no_test_wasm",
440    ],
441    deps = [
442        ":bit_gen_ref",
443        ":mock_distributions",
444        ":mocking_bit_gen",
445        ":random",
446        "@com_google_googletest//:gtest_main",
447    ],
448)
449
450cc_test(
451    name = "mock_distributions_test",
452    size = "small",
453    srcs = ["mock_distributions_test.cc"],
454    copts = ABSL_TEST_COPTS,
455    linkopts = ABSL_DEFAULT_LINKOPTS,
456    tags = [
457        "no_test_wasm",
458    ],
459    deps = [
460        ":mock_distributions",
461        ":mocking_bit_gen",
462        ":random",
463        "@com_google_googletest//:gtest_main",
464    ],
465)
466
467cc_test(
468    name = "examples_test",
469    size = "small",
470    srcs = ["examples_test.cc"],
471    copts = ABSL_TEST_COPTS,
472    linkopts = ABSL_DEFAULT_LINKOPTS,
473    tags = [
474        "no_test_wasm",
475    ],
476    deps = [
477        ":random",
478        "@com_google_googletest//:gtest_main",
479    ],
480)
481
482cc_test(
483    name = "seed_sequences_test",
484    size = "small",
485    srcs = ["seed_sequences_test.cc"],
486    copts = ABSL_TEST_COPTS,
487    linkopts = ABSL_DEFAULT_LINKOPTS,
488    deps = [
489        ":random",
490        ":seed_sequences",
491        "//absl/random/internal:nonsecure_base",
492        "@com_google_googletest//:gtest_main",
493    ],
494)
495
496BENCHMARK_TAGS = [
497    "benchmark",
498    "no_test_android_arm",
499    "no_test_android_arm64",
500    "no_test_android_x86",
501    "no_test_darwin_x86_64",
502    "no_test_ios_x86_64",
503    "no_test_loonix",
504    "no_test_msvc_x64",
505    "no_test_wasm",
506]
507
508# Benchmarks for various methods / test utilities
509cc_binary(
510    name = "benchmarks",
511    testonly = 1,
512    srcs = [
513        "benchmarks.cc",
514    ],
515    copts = ABSL_TEST_COPTS,
516    linkopts = ABSL_DEFAULT_LINKOPTS,
517    tags = BENCHMARK_TAGS,
518    deps = [
519        ":distributions",
520        ":random",
521        ":seed_sequences",
522        "//absl/base:core_headers",
523        "//absl/meta:type_traits",
524        "//absl/random/internal:fast_uniform_bits",
525        "//absl/random/internal:randen_engine",
526        "@com_github_google_benchmark//:benchmark_main",
527    ],
528)
529