MCPcopy Create free account
hub / github.com/DISTORTEC/distortos / phase2

Function phase2

test/Signals/SignalCatchingOperationsTestCase.cpp:154–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152 */
153
154bool phase2()
155{
156 for (auto signalNumber = SignalSet::Bitset{}.size(); signalNumber <= UINT8_MAX; ++signalNumber)
157 {
158 int ret;
159 std::tie(ret, std::ignore) = ThisThread::Signals::getSignalAction(signalNumber);
160 if (ret != EINVAL)
161 return false;
162 std::tie(ret, std::ignore) = ThisThread::Signals::setSignalAction(signalNumber, SignalAction{});
163 if (ret != EINVAL)
164 return false;
165 }
166
167 auto testThreadLambda =
168 [](int& getSignalActionRet, SignalSet& signalMask, int& setSignalActionRet, int& setSignalMaskRet)
169 {
170 std::tie(getSignalActionRet, std::ignore) = ThisThread::Signals::getSignalAction({});
171 signalMask = ThisThread::Signals::getSignalMask();
172 std::tie(setSignalActionRet, std::ignore) = ThisThread::Signals::setSignalAction({}, SignalAction{});
173 setSignalMaskRet = ThisThread::Signals::setSignalMask(SignalSet{SignalSet::full});
174 };
175
176 {
177 int getSignalActionRet {};
178 SignalSet signalMask {SignalSet::empty};
179 int setSignalActionRet {};
180 int setSignalMaskRet {};
181 auto testThread = makeAndStartDynamicThread({testThreadStackSize, false, 0, 0, UINT8_MAX}, testThreadLambda,
182 std::ref(getSignalActionRet), std::ref(signalMask), std::ref(setSignalActionRet),
183 std::ref(setSignalMaskRet));
184 testThread.join();
185 if (getSignalActionRet != ENOTSUP)
186 return false;
187 if (signalMask.getBitset() != SignalSet{SignalSet::full}.getBitset())
188 return false;
189 if (setSignalActionRet != ENOTSUP)
190 return false;
191 if (setSignalMaskRet != ENOTSUP)
192 return false;
193 }
194
195 {
196 int getSignalActionRet {};
197 SignalSet signalMask {SignalSet::empty};
198 int setSignalActionRet {};
199 int setSignalMaskRet {};
200 auto testThread = makeAndStartDynamicThread({testThreadStackSize, true, 0, 0, UINT8_MAX}, testThreadLambda,
201 std::ref(getSignalActionRet), std::ref(signalMask), std::ref(setSignalActionRet),
202 std::ref(setSignalMaskRet));
203 testThread.join();
204 if (getSignalActionRet != ENOTSUP)
205 return false;
206 if (signalMask.getBitset() != SignalSet{SignalSet::full}.getBitset())
207 return false;
208 if (setSignalActionRet != ENOTSUP)
209 return false;
210 if (setSignalMaskRet != ENOTSUP)
211 return false;

Callers

nothing calls this directly

Calls 8

getSignalActionFunction · 0.85
setSignalActionFunction · 0.85
setSignalMaskFunction · 0.85
getBitsetMethod · 0.80
getSignalMaskFunction · 0.70
sizeMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected