mirror of https://github.com/grpc/grpc.git
[channel_args] Optimize UnionWith (#33154)
<!-- If you know who should review your pull request, please assign it to that person, otherwise the pull request would get assigned randomly. If your pull request is for a specific language, please add the appropriate lang label. --> --------- Co-authored-by: ctiller <ctiller@users.noreply.github.com>pull/33150/head^2
parent
41b66b4859
commit
cc3d034948
9 changed files with 211 additions and 35 deletions
@ -0,0 +1,27 @@ |
||||
# Copyright 2023 gRPC 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 |
||||
# |
||||
# http://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. |
||||
|
||||
load("//fuzztest:grpc_fuzz_test.bzl", "grpc_fuzz_test") |
||||
|
||||
grpc_fuzz_test( |
||||
name = "union_with_test", |
||||
srcs = ["union_with_test.cc"], |
||||
external_deps = [ |
||||
"fuzztest", |
||||
"fuzztest_main", |
||||
], |
||||
deps = [ |
||||
"//src/core:channel_args", |
||||
], |
||||
) |
@ -0,0 +1,47 @@ |
||||
// Copyright 2023 gRPC 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
|
||||
//
|
||||
// http://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.
|
||||
|
||||
// Test to verify Fuzztest integration
|
||||
|
||||
#include "fuzztest/fuzztest.h" |
||||
|
||||
#include "gtest/gtest.h" |
||||
|
||||
#include "src/core/lib/channel/channel_args.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
using IntOrString = absl::variant<int, std::string>; |
||||
using VectorOfArgs = std::vector<std::pair<std::string, IntOrString>>; |
||||
|
||||
ChannelArgs ChannelArgsFromVector(VectorOfArgs va) { |
||||
ChannelArgs result; |
||||
for (auto& [key, value] : va) { |
||||
if (absl::holds_alternative<int>(value)) { |
||||
result = result.Set(key, absl::get<int>(value)); |
||||
} else { |
||||
result = result.Set(key, absl::get<std::string>(value)); |
||||
} |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
void UnionWithIsCorrect(VectorOfArgs va, VectorOfArgs vb) { |
||||
auto a = ChannelArgsFromVector(std::move(va)); |
||||
auto b = ChannelArgsFromVector(std::move(vb)); |
||||
EXPECT_EQ(a.UnionWith(b), a.FuzzingReferenceUnionWith(b)); |
||||
} |
||||
FUZZ_TEST(MyTestSuite, UnionWithIsCorrect); |
||||
|
||||
} |
Loading…
Reference in new issue