diff --git a/test/stdcpp/Makefile b/test/stdcpp/Makefile index e6d665e55a..4875ecfdef 100644 --- a/test/stdcpp/Makefile +++ b/test/stdcpp/Makefile @@ -12,7 +12,7 @@ all: clean: else -all: $(addprefix $(ROOT)/,$(addsuffix .done,$(TESTS))) +all: $(addprefix $(ROOT)/,$(addsuffix .done,$(TESTS))) $(ROOT)/string_view $(ROOT)/%.done : $(ROOT)/% @echo Testing $* @@ -24,6 +24,11 @@ $(ROOT)/%: $(SRC)/%_test.d $(SRC)/%.cpp $(QUIET)$(CXX) $(CXXFLAGS) -c -o $(ROOT)/$*_cpp.o $(SRC)/$*.cpp $(QUIET)$(DMD) $(DFLAGS) -main -unittest -of$@ $< $(ROOT)/$*_cpp.o +$(ROOT)/string_view: $(SRC)/string_view_test.d $(SRC)/string_view.cpp + mkdir -p $(dir $@) + $(QUIET)$(CXX) $(CXXFLAGS) -std=c++17 -c -o $(ROOT)/string_view_cpp.o $(SRC)/string_view.cpp + $(QUIET)$(DMD) $(DFLAGS) -main -unittest -of$@ $< $(ROOT)/string_view_cpp.o + clean: rm -rf $(GENERATED) endif diff --git a/test/stdcpp/src/string_view.cpp b/test/stdcpp/src/string_view.cpp index b27e6dc171..24a192023d 100644 --- a/test/stdcpp/src/string_view.cpp +++ b/test/stdcpp/src/string_view.cpp @@ -1,7 +1,9 @@ #include +#include int fromC_val(std::string_view); int fromC_ref(const std::string_view&); +std::string_view getFromD(); int sumOfElements_ref(const std::string_view& str) { @@ -15,3 +17,9 @@ int sumOfElements_val(std::string_view str) { return sumOfElements_ref(str) + fromC_ref(str) + fromC_val(str); } + +std::string_view getFromC() +{ + assert(getFromD().compare("I'm from D!") == 0); + return std::string_view("I'm from C++!"); +} diff --git a/test/stdcpp/src/string_view_test.d b/test/stdcpp/src/string_view_test.d index d34ce80acf..ddd31569e2 100644 --- a/test/stdcpp/src/string_view_test.d +++ b/test/stdcpp/src/string_view_test.d @@ -16,6 +16,10 @@ unittest assert(str2.length == 0); assert(str2.empty == true); assert(str2[] == []); + + assert(getFromC() == "I'm from C++!"); + + return 0; } @@ -24,6 +28,7 @@ extern(C++): // test the ABI for calls to C++ int sumOfElements_val(string_view); int sumOfElements_ref(ref const(string_view)); +string_view getFromC(); // test the ABI for calls from C++ int fromC_val(string_view str) @@ -48,3 +53,8 @@ int fromC_ref(ref const(string_view) str) r += e; return r; } + +string_view getFromD() +{ + return string_view("I'm from D!"); +}