# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

visibility = [ "$cobalt_root/*" ]

group("tests") {
  testonly = true

  deps = [
    ":count_min_test",
    ":hash_test",
    ":numeric_encoding_test",
    ":rappor_test",
  ]
}

source_set("rappor") {
  sources = [
    "rappor.cc",
    "rappor.h",
  ]

  deps = [
    "$cobalt_root/src/algorithms/random:distributions",
    "$cobalt_root/src/algorithms/random:random",
  ]

  public_configs = [ "$cobalt_root:cobalt_config" ]
}

source_set("rappor_test") {
  testonly = true
  sources = [ "rappor_test.cc" ]

  deps = [
    ":rappor",
    "$cobalt_root/src/algorithms/random:test_secure_random",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

source_set("numeric_encoding") {
  sources = [
    "numeric_encoding.cc",
    "numeric_encoding.h",
  ]

  deps = [
    "$cobalt_root/src/algorithms/random:distributions",
    "$cobalt_root/src/algorithms/random:random",
  ]

  public_configs = [ "$cobalt_root:cobalt_config" ]
}

source_set("numeric_encoding_test") {
  testonly = true
  sources = [ "numeric_encoding_test.cc" ]

  deps = [
    ":numeric_encoding",
    "$cobalt_root/src/algorithms/random",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]

  public_configs = [
    "$cobalt_root:cobalt_config",
    "//build/config:Wno-conversion",
  ]
}

source_set("count_min") {
  sources = [ "count_min.h" ]

  configs += [ "$cobalt_root:cobalt_config" ]

  deps = [
    ":hash",
    "$cobalt_root/src/lib/statusor",
    "$cobalt_root/src/lib/util:status",
  ]
}

source_set("count_min_test") {
  testonly = true
  sources = [ "count_min_test.cc" ]

  deps = [
    ":count_min",
    "$cobalt_root/src/lib/statusor",
    "//third_party/gflags",
    "//third_party/googletest:gtest",
  ]

  configs += [ "$cobalt_root:cobalt_config" ]
}

source_set("hash") {
  sources = [
    "hash.cc",
    "hash.h",
  ]

  configs += [ "$cobalt_root:cobalt_config" ]

  deps = [ "//third_party/github.com/google/farmhash" ]
}

source_set("hash_test") {
  testonly = true
  sources = [ "hash_test.cc" ]

  deps = [
    ":hash",
    "//third_party/gflags",
    "//third_party/googletest:gtest",
  ]

  configs += [ "$cobalt_root:cobalt_config" ]
}
