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