2 * Copyright 2017 Facebook, Inc.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 #include <folly/io/async/AsyncTransport.h>
18 //#include <folly/io/async/test/MockAsyncTransport.h>
19 #include <folly/portability/GTest.h>
21 using namespace testing;
25 TEST(WriteFlagsTest, isSet) {
26 WriteFlags flags = WriteFlags::NONE;
27 ASSERT_FALSE(isSet(flags, WriteFlags::CORK));
28 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
30 flags = WriteFlags::CORK;
31 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
32 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
34 flags = static_cast<WriteFlags>(
35 static_cast<uint32_t>(WriteFlags::CORK) |
36 static_cast<uint32_t>(WriteFlags::EOR));
37 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
38 ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
41 TEST(WriteFlagsTest, unionOperator) {
42 WriteFlags flags = WriteFlags::CORK | WriteFlags::NONE;
43 ASSERT_EQ(flags, WriteFlags::CORK);
45 flags = static_cast<WriteFlags>(
46 static_cast<uint32_t>(WriteFlags::CORK) |
47 static_cast<uint32_t>(WriteFlags::EOR));
48 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
51 TEST(WriteFlagsTest, intersectionOperator) {
52 ASSERT_EQ(WriteFlags::NONE & WriteFlags::CORK, WriteFlags::NONE);
55 WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
56 ASSERT_EQ(flags & WriteFlags::CORK, WriteFlags::CORK);
57 ASSERT_EQ(flags & WriteFlags::EOR, WriteFlags::EOR);
58 ASSERT_EQ(flags & WriteFlags::WRITE_SHUTDOWN, WriteFlags::WRITE_SHUTDOWN);
61 TEST(WriteFlagsTest, exclusionOperator) {
62 ASSERT_FALSE(isSet(~WriteFlags::CORK, WriteFlags::CORK));
63 ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::EOR));
64 ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::WRITE_SHUTDOWN));
66 ASSERT_FALSE(isSet(~WriteFlags::EOR, WriteFlags::EOR));
67 ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::CORK));
68 ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::WRITE_SHUTDOWN));
71 TEST(WriteFlagsTest, unsetOperator) {
73 WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
74 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
75 ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
76 ASSERT_TRUE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
78 flags = WriteFlags::CORK;
79 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
80 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
81 ASSERT_FALSE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
84 TEST(WriteFlagsTest, compoundAssignmentUnionOperator) {
85 WriteFlags flags = WriteFlags::NONE;
86 flags |= WriteFlags::CORK;
87 ASSERT_EQ(flags, WriteFlags::CORK);
89 flags = WriteFlags::CORK;
90 flags |= WriteFlags::EOR;
91 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
93 flags = WriteFlags::CORK | WriteFlags::EOR;
94 flags |= WriteFlags::CORK;
95 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
98 TEST(WriteFlagsTest, compoundAssignmentIntersectionOperator) {
99 WriteFlags flags = WriteFlags::CORK | WriteFlags::EOR;
100 flags &= WriteFlags::CORK;
101 ASSERT_EQ(flags, WriteFlags::CORK);
103 flags = WriteFlags::CORK | WriteFlags::EOR;
104 flags &= WriteFlags::EOR;
105 ASSERT_EQ(flags, WriteFlags::EOR);
107 flags = WriteFlags::NONE;
108 flags &= WriteFlags::EOR;
109 ASSERT_EQ(flags, WriteFlags::NONE);