test_python_call_cpp.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import pytest
  2. import ray
  3. import ray.cluster_utils
  4. from ray.exceptions import CrossLanguageError, RayActorError
  5. def test_cross_language_cpp():
  6. ray.init(
  7. job_config=ray.job_config.JobConfig(
  8. code_search_path=["../../plus.so:../../counter.so"]
  9. )
  10. )
  11. obj = ray.cross_language.cpp_function("Plus1").remote(1)
  12. assert 2 == ray.get(obj)
  13. obj1 = ray.cross_language.cpp_function("ThrowTask").remote()
  14. with pytest.raises(CrossLanguageError):
  15. ray.get(obj1)
  16. obj = ray.cross_language.cpp_function("Plus1").remote("invalid arg")
  17. with pytest.raises(CrossLanguageError):
  18. ray.get(obj)
  19. obj = ray.cross_language.cpp_function("Plus1").remote(1, 2)
  20. with pytest.raises(CrossLanguageError):
  21. ray.get(obj)
  22. obj = ray.cross_language.cpp_function("Plus1").remote()
  23. with pytest.raises(CrossLanguageError):
  24. ray.get(obj)
  25. obj2 = ray.cross_language.cpp_function("NotExsitTask").remote()
  26. with pytest.raises(CrossLanguageError):
  27. ray.get(obj2)
  28. obj3 = ray.cross_language.cpp_function("Echo").remote("hello")
  29. assert "hello" == ray.get(obj3)
  30. list = [0] * 100000
  31. obj4 = ray.cross_language.cpp_function("ReturnLargeArray").remote(list)
  32. assert list == ray.get(obj4)
  33. map = {0: "hello"}
  34. obj5 = ray.cross_language.cpp_function("GetMap").remote(map)
  35. assert {0: "hello", 1: "world"} == ray.get(obj5)
  36. v = ["hello", "world"]
  37. obj6 = ray.cross_language.cpp_function("GetList").remote(v)
  38. assert v == ray.get(obj6)
  39. obj6 = ray.cross_language.cpp_function("GetArray").remote(v)
  40. assert v == ray.get(obj6)
  41. tuple = [1, "hello"]
  42. obj7 = ray.cross_language.cpp_function("GetTuple").remote(tuple)
  43. assert tuple == ray.get(obj7)
  44. student = ["tom", 20]
  45. obj8 = ray.cross_language.cpp_function("GetStudent").remote(student)
  46. assert student == ray.get(obj8)
  47. students = {0: ["tom", 20], 1: ["jerry", 10]}
  48. obj9 = ray.cross_language.cpp_function("GetStudents").remote(students)
  49. assert students == ray.get(obj9)
  50. def test_cross_language_cpp_actor():
  51. actor = ray.cross_language.cpp_actor_class(
  52. "RAY_FUNC(Counter::FactoryCreate)", "Counter"
  53. ).remote()
  54. obj = actor.Plus1.remote()
  55. assert 1 == ray.get(obj)
  56. actor1 = ray.cross_language.cpp_actor_class(
  57. "RAY_FUNC(Counter::FactoryCreate)", "Counter"
  58. ).remote("invalid arg")
  59. obj = actor1.Plus1.remote()
  60. with pytest.raises(RayActorError):
  61. ray.get(obj)
  62. actor1 = ray.cross_language.cpp_actor_class(
  63. "RAY_FUNC(Counter::FactoryCreate)", "Counter"
  64. ).remote()
  65. obj = actor1.Plus1.remote()
  66. assert 1 == ray.get(obj)
  67. obj = actor1.Add.remote(2)
  68. assert 3 == ray.get(obj)
  69. obj2 = actor1.ExceptionFunc.remote()
  70. with pytest.raises(CrossLanguageError):
  71. ray.get(obj2)
  72. obj3 = actor1.NotExistFunc.remote()
  73. with pytest.raises(CrossLanguageError):
  74. ray.get(obj3)
  75. if __name__ == "__main__":
  76. import sys
  77. sys.exit(pytest.main(["-v", __file__]))