test_python_call_cpp.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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("CreateCounter", "Counter").remote()
  52. obj = actor.Plus1.remote()
  53. assert 1 == ray.get(obj)
  54. actor1 = ray.cross_language.cpp_actor_class(
  55. "RAY_FUNC(Counter::FactoryCreate)", "Counter"
  56. ).remote("invalid arg")
  57. obj = actor1.Plus1.remote()
  58. with pytest.raises(RayActorError):
  59. ray.get(obj)
  60. actor1 = ray.cross_language.cpp_actor_class(
  61. "RAY_FUNC(Counter::FactoryCreate)", "Counter"
  62. ).remote()
  63. obj = actor1.Plus1.remote()
  64. assert 1 == ray.get(obj)
  65. obj = actor1.Add.remote(2)
  66. assert 3 == ray.get(obj)
  67. obj2 = actor1.ExceptionFunc.remote()
  68. with pytest.raises(CrossLanguageError):
  69. ray.get(obj2)
  70. obj3 = actor1.NotExistFunc.remote()
  71. with pytest.raises(CrossLanguageError):
  72. ray.get(obj3)
  73. if __name__ == "__main__":
  74. import sys
  75. sys.exit(pytest.main(["-v", __file__]))