1 /*
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17 #include <folly/io/async/AsyncTransport.h>
18
19 //#include <folly/io/async/test/MockAsyncTransport.h>
20 #include <folly/portability/GTest.h>
21
22 namespace folly {
23
TEST(WriteFlagsTest,isSet)24 TEST(WriteFlagsTest, isSet) {
25 WriteFlags flags = WriteFlags::NONE;
26 ASSERT_FALSE(isSet(flags, WriteFlags::CORK));
27 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
28
29 flags = WriteFlags::CORK;
30 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
31 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
32
33 flags = static_cast<WriteFlags>(
34 static_cast<uint32_t>(WriteFlags::CORK) |
35 static_cast<uint32_t>(WriteFlags::EOR));
36 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
37 ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
38 }
39
TEST(WriteFlagsTest,unionOperator)40 TEST(WriteFlagsTest, unionOperator) {
41 WriteFlags flags = WriteFlags::CORK | WriteFlags::NONE;
42 ASSERT_EQ(flags, WriteFlags::CORK);
43
44 flags = static_cast<WriteFlags>(
45 static_cast<uint32_t>(WriteFlags::CORK) |
46 static_cast<uint32_t>(WriteFlags::EOR));
47 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
48 }
49
TEST(WriteFlagsTest,intersectionOperator)50 TEST(WriteFlagsTest, intersectionOperator) {
51 ASSERT_EQ(WriteFlags::NONE & WriteFlags::CORK, WriteFlags::NONE);
52
53 WriteFlags flags =
54 WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
55 ASSERT_EQ(flags & WriteFlags::CORK, WriteFlags::CORK);
56 ASSERT_EQ(flags & WriteFlags::EOR, WriteFlags::EOR);
57 ASSERT_EQ(flags & WriteFlags::WRITE_SHUTDOWN, WriteFlags::WRITE_SHUTDOWN);
58 }
59
TEST(WriteFlagsTest,exclusionOperator)60 TEST(WriteFlagsTest, exclusionOperator) {
61 ASSERT_FALSE(isSet(~WriteFlags::CORK, WriteFlags::CORK));
62 ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::EOR));
63 ASSERT_TRUE(isSet(~WriteFlags::CORK, WriteFlags::WRITE_SHUTDOWN));
64
65 ASSERT_FALSE(isSet(~WriteFlags::EOR, WriteFlags::EOR));
66 ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::CORK));
67 ASSERT_TRUE(isSet(~WriteFlags::EOR, WriteFlags::WRITE_SHUTDOWN));
68 }
69
TEST(WriteFlagsTest,unsetOperator)70 TEST(WriteFlagsTest, unsetOperator) {
71 WriteFlags flags =
72 WriteFlags::CORK | WriteFlags::EOR | WriteFlags::WRITE_SHUTDOWN;
73 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
74 ASSERT_TRUE(isSet(flags, WriteFlags::EOR));
75 ASSERT_TRUE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
76
77 flags = WriteFlags::CORK;
78 ASSERT_TRUE(isSet(flags, WriteFlags::CORK));
79 ASSERT_FALSE(isSet(flags, WriteFlags::EOR));
80 ASSERT_FALSE(isSet(flags, WriteFlags::WRITE_SHUTDOWN));
81 }
82
TEST(WriteFlagsTest,compoundAssignmentUnionOperator)83 TEST(WriteFlagsTest, compoundAssignmentUnionOperator) {
84 WriteFlags flags = WriteFlags::NONE;
85 flags |= WriteFlags::CORK;
86 ASSERT_EQ(flags, WriteFlags::CORK);
87
88 flags = WriteFlags::CORK;
89 flags |= WriteFlags::EOR;
90 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
91
92 flags = WriteFlags::CORK | WriteFlags::EOR;
93 flags |= WriteFlags::CORK;
94 ASSERT_EQ(flags, WriteFlags::CORK | WriteFlags::EOR);
95 }
96
TEST(WriteFlagsTest,compoundAssignmentIntersectionOperator)97 TEST(WriteFlagsTest, compoundAssignmentIntersectionOperator) {
98 WriteFlags flags = WriteFlags::CORK | WriteFlags::EOR;
99 flags &= WriteFlags::CORK;
100 ASSERT_EQ(flags, WriteFlags::CORK);
101
102 flags = WriteFlags::CORK | WriteFlags::EOR;
103 flags &= WriteFlags::EOR;
104 ASSERT_EQ(flags, WriteFlags::EOR);
105
106 flags = WriteFlags::NONE;
107 flags &= WriteFlags::EOR;
108 ASSERT_EQ(flags, WriteFlags::NONE);
109 }
110
111 } // namespace folly
112