about summary refs log blame commit diff
path: root/third_party/abseil_cpp/absl/random/BUILD.bazel
blob: 694331c2080d8a26ed4107b78d5325f1a5a2af02 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16















                                                                          

                                          
                                                                    



                                       




                                                     
                    

























                                                












                                         
                             

                                   
                                                     

                                                   
                                               


                                                      
                                               
                         






                                     

                                     





















                                                 





                                     
                  
                                   
                                   


                                                     


















                                                   





                                     

                                   


                                                     







                                         









                                                             
                                            










                                                             
              



                                     
                                           
                                                        
                                            














































                                                        
                                           
                                                        
                                            

















                                               
                                           
                                                        
                                            






















                                                             
                                   
                                           

                                                        
                                            















                                                
                                   
                                           
                                                        
                                            


















                                                             
                                   
                                           



















                                                        
                                           
                                                        
                                            





















                                               
                                           
                                                        
                                            
















                                               
                                           
                                                        
                                            






                                               







                                     
                                   








                                               
                            













                                              

                                     








                                              





































                                                 
          
                        
                 
















                                                        
#
# Copyright 2019 The Abseil Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# ABSL random-number generation libraries.

load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
load(
    "//absl:copts/configure_copts.bzl",
    "ABSL_DEFAULT_COPTS",
    "ABSL_DEFAULT_LINKOPTS",
    "ABSL_TEST_COPTS",
)

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

cc_library(
    name = "random",
    hdrs = ["random.h"],
    copts = ABSL_DEFAULT_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":seed_sequences",
        "//absl/random/internal:nonsecure_base",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:pool_urbg",
        "//absl/random/internal:randen_engine",
    ],
)

cc_library(
    name = "distributions",
    srcs = [
        "discrete_distribution.cc",
        "gaussian_distribution.cc",
    ],
    hdrs = [
        "bernoulli_distribution.h",
        "beta_distribution.h",
        "discrete_distribution.h",
        "distributions.h",
        "exponential_distribution.h",
        "gaussian_distribution.h",
        "log_uniform_int_distribution.h",
        "poisson_distribution.h",
        "uniform_int_distribution.h",
        "uniform_real_distribution.h",
        "zipf_distribution.h",
    ],
    copts = ABSL_DEFAULT_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        "//absl/base:base_internal",
        "//absl/base:config",
        "//absl/base:core_headers",
        "//absl/meta:type_traits",
        "//absl/random/internal:distribution_caller",
        "//absl/random/internal:fast_uniform_bits",
        "//absl/random/internal:fastmath",
        "//absl/random/internal:generate_real",
        "//absl/random/internal:iostream_state_saver",
        "//absl/random/internal:traits",
        "//absl/random/internal:uniform_helper",
        "//absl/random/internal:wide_multiply",
        "//absl/strings",
    ],
)

cc_library(
    name = "seed_gen_exception",
    srcs = ["seed_gen_exception.cc"],
    hdrs = ["seed_gen_exception.h"],
    copts = ABSL_DEFAULT_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = ["//absl/base:config"],
)

cc_library(
    name = "seed_sequences",
    srcs = ["seed_sequences.cc"],
    hdrs = [
        "seed_sequences.h",
    ],
    copts = ABSL_DEFAULT_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":seed_gen_exception",
        "//absl/container:inlined_vector",
        "//absl/random/internal:nonsecure_base",
        "//absl/random/internal:pool_urbg",
        "//absl/random/internal:salted_seed_seq",
        "//absl/random/internal:seed_material",
        "//absl/types:span",
    ],
)

cc_library(
    name = "bit_gen_ref",
    hdrs = ["bit_gen_ref.h"],
    copts = ABSL_DEFAULT_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":random",
        "//absl/base:core_headers",
        "//absl/base:fast_type_id",
        "//absl/meta:type_traits",
        "//absl/random/internal:distribution_caller",
        "//absl/random/internal:fast_uniform_bits",
    ],
)

cc_library(
    name = "mock_distributions",
    testonly = 1,
    hdrs = ["mock_distributions.h"],
    deps = [
        ":distributions",
        ":mocking_bit_gen",
        "//absl/meta:type_traits",
        "//absl/random/internal:mock_overload_set",
        "@com_google_googletest//:gtest",
    ],
)

cc_library(
    name = "mocking_bit_gen",
    testonly = 1,
    hdrs = [
        "mocking_bit_gen.h",
    ],
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:fast_type_id",
        "//absl/container:flat_hash_map",
        "//absl/meta:type_traits",
        "//absl/random/internal:distribution_caller",
        "//absl/strings",
        "//absl/types:span",
        "//absl/types:variant",
        "//absl/utility",
        "@com_google_googletest//:gtest",
    ],
)

cc_test(
    name = "bernoulli_distribution_test",
    size = "small",
    timeout = "eternal",  # Android can take a very long time
    srcs = ["bernoulli_distribution_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "beta_distribution_test",
    size = "small",
    timeout = "eternal",  # Android can take a very long time
    srcs = ["beta_distribution_test.cc"],
    copts = ABSL_TEST_COPTS,
    flaky = 1,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "//absl/strings:str_format",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "distributions_test",
    size = "small",
    srcs = [
        "distributions_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/random/internal:distribution_test_util",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "generators_test",
    size = "small",
    srcs = ["generators_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "log_uniform_int_distribution_test",
    size = "medium",
    srcs = [
        "log_uniform_int_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "//absl/strings:str_format",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "discrete_distribution_test",
    size = "medium",
    srcs = [
        "discrete_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "poisson_distribution_test",
    size = "small",
    timeout = "eternal",  # Android can take a very long time
    srcs = [
        "poisson_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    tags = [
        # Too Slow.
        "no_test_android_arm",
        "no_test_loonix",
    ],
    deps = [
        ":distributions",
        ":random",
        "//absl/base:core_headers",
        "//absl/base:raw_logging_internal",
        "//absl/container:flat_hash_map",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "//absl/strings:str_format",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "exponential_distribution_test",
    size = "small",
    srcs = ["exponential_distribution_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:core_headers",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "//absl/strings:str_format",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "gaussian_distribution_test",
    size = "small",
    timeout = "eternal",  # Android can take a very long time
    srcs = [
        "gaussian_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:core_headers",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "//absl/strings:str_format",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "uniform_int_distribution_test",
    size = "medium",
    timeout = "long",
    srcs = [
        "uniform_int_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "uniform_real_distribution_test",
    size = "medium",
    srcs = [
        "uniform_real_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    tags = [
        "no_test_android_arm",
        "no_test_android_arm64",
        "no_test_android_x86",
    ],
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "zipf_distribution_test",
    size = "medium",
    srcs = [
        "zipf_distribution_test.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":distributions",
        ":random",
        "//absl/base:raw_logging_internal",
        "//absl/random/internal:distribution_test_util",
        "//absl/random/internal:pcg_engine",
        "//absl/random/internal:sequence_urbg",
        "//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "bit_gen_ref_test",
    size = "small",
    srcs = ["bit_gen_ref_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":bit_gen_ref",
        ":random",
        "//absl/base:fast_type_id",
        "//absl/random/internal:sequence_urbg",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "mocking_bit_gen_test",
    size = "small",
    srcs = ["mocking_bit_gen_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":bit_gen_ref",
        ":mock_distributions",
        ":mocking_bit_gen",
        ":random",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "mock_distributions_test",
    size = "small",
    srcs = ["mock_distributions_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":mock_distributions",
        ":mocking_bit_gen",
        ":random",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "examples_test",
    size = "small",
    srcs = ["examples_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":random",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "seed_sequences_test",
    size = "small",
    srcs = ["seed_sequences_test.cc"],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    deps = [
        ":random",
        ":seed_sequences",
        "//absl/random/internal:nonsecure_base",
        "@com_google_googletest//:gtest_main",
    ],
)

BENCHMARK_TAGS = [
    "benchmark",
    "no_test_android_arm",
    "no_test_android_arm64",
    "no_test_android_x86",
    "no_test_darwin_x86_64",
    "no_test_ios_x86_64",
    "no_test_loonix",
    "no_test_msvc_x64",
    "no_test_wasm",
]

# Benchmarks for various methods / test utilities
cc_binary(
    name = "benchmarks",
    testonly = 1,
    srcs = [
        "benchmarks.cc",
    ],
    copts = ABSL_TEST_COPTS,
    linkopts = ABSL_DEFAULT_LINKOPTS,
    tags = BENCHMARK_TAGS,
    deps = [
        ":distributions",
        ":random",
        ":seed_sequences",
        "//absl/base:core_headers",
        "//absl/meta:type_traits",
        "//absl/random/internal:fast_uniform_bits",
        "//absl/random/internal:randen_engine",
        "@com_github_google_benchmark//:benchmark_main",
    ],
)