Skip to content

Commit 41df734

Browse files
committed
Add test for C++ + OpenMP kernels
1 parent cc954a4 commit 41df734

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

test/test_xcpp_kernel.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_continuation(self) -> None:
6363
self.assertEqual(str(reply["content"]["indent"]), "")
6464
self.assertEqual(reply["content"]["status"], "complete")
6565

66-
kernel_names = ['xcpp17', 'xcpp20', 'xcpp23']
66+
kernel_names = ['xcpp17', 'xcpp20', 'xcpp23','xcpp17-omp', 'xcpp20-omp', 'xcpp23-omp']
6767

6868
for name in kernel_names:
6969
class_name = f"XCppCompleteTests_{name}"
@@ -225,5 +225,58 @@ class BaseXCppTests2(jupyter_kernel_test.KernelTests):
225225
}
226226
)
227227

228+
if platform.system() != 'Windows':
229+
class BaseXCppOpenMPTests(jupyter_kernel_test.KernelTests):
230+
__test__ = False
231+
232+
# language_info.name in a kernel_info_reply should match this
233+
language_name = 'C++'
234+
235+
# OpenMP test that creates 2 threads, and gets them to output their thread
236+
# number in descending order
237+
code_omp="""
238+
#include <omp.h>
239+
#include <iostream>
240+
"""
241+
242+
code_omp_2="""
243+
int main() {
244+
omp_set_num_threads(2);
245+
#pragma omp parallel
246+
{
247+
if (omp_get_thread_num() == 1) {
248+
printf("1");
249+
#pragma omp barrier
250+
}
251+
else if (omp_get_thread_num() == 0) {
252+
#pragma omp barrier
253+
printf("0");
254+
}
255+
}
256+
}
257+
main();
258+
"""
259+
260+
def test_xcpp_omp(self):
261+
self.flush_channels()
262+
reply, output_msgs = self.execute_helper(code=self.code_omp,timeout=20)
263+
reply, output_msgs = self.execute_helper(code=self.code_omp_2,timeout=20)
264+
self.assertEqual(output_msgs[0]['msg_type'], 'stream')
265+
self.assertEqual(output_msgs[0]['content']['text'], '10')
266+
self.assertEqual(output_msgs[0]['content']['name'], 'stdout')
267+
268+
kernel_names = ['xcpp17-omp', 'xcpp20-omp', 'xcpp23-omp']
269+
270+
for name in kernel_names:
271+
class_name = f"XCppOpenMPTests_{name}"
272+
globals()[class_name] = type(
273+
class_name,
274+
(BaseXCppOpenMPTests,),
275+
{
276+
'kernel_name': name,
277+
'__test__': True
278+
}
279+
)
280+
228281
if __name__ == '__main__':
229282
unittest.main()

0 commit comments

Comments
 (0)