| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S -enzyme-loose-types | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | |
| // RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | |
| #include "../test_utils.h" | |
| #include <fstream> | |
| #include <iostream> | |
| #include <sstream> | |
| #include <utility> | |
| extern double __enzyme_autodiff(void *, double); | |
| double fn(double vec) { | |
| std::string s("many more tests"); | |
| std::ifstream ifs(s.c_str(), std::ios_base::binary | std::ios_base::in); | |
| std::ifstream ifs1(s.c_str(), std::ios_base::binary | std::ios_base::out); | |
| std::ifstream ifs2(s.c_str(), std::ios_base::binary | std::ios_base::app); | |
| std::ifstream ifs3(s.c_str(), std::ios_base::binary | std::ios_base::trunc); | |
| std::ifstream ifs4(s.c_str(), std::ios_base::binary | std::ios_base::binary); | |
| std::ifstream ifs5(s.c_str(), std::ios_base::binary | std::ios_base::ate); | |
| if (ifs) { | |
| char buffer[20]; | |
| if (!ifs.read(buffer, 20)) { | |
| // Handle error | |
| } | |
| std::ifstream &ignore(int n = 1, int delim = EOF); | |
| } | |
| std::filebuf fb; | |
| fb.open("%S/Inputs/input.txt", std::ios::out); | |
| std::ostream os(&fb); | |
| os << "Test sentence\n"; | |
| vec *= 2; | |
| fb.close(); | |
| std::ifstream is; | |
| std::filebuf *fb2 = is.rdbuf(); | |
| // construct output string stream (buffer) - need <sstream> header | |
| std::ostringstream sout; | |
| // Write into string buffer | |
| sout << "apple" << std::endl; | |
| sout << "orange" << std::endl; | |
| sout << "banana" << std::endl; | |
| // Get contents | |
| std::cout << sout.str() << std::endl; | |
| std::string filename = "test.bin"; | |
| // Write to File | |
| std::ofstream fout(filename.c_str(), std::ios::out | std::ios::binary); | |
| if (!fout.is_open()) { | |
| std::cerr << "error: open file for output failed!" << std::endl; | |
| abort(); | |
| } | |
| int i = 1234; | |
| double d = 12.34; | |
| fout.write((char *)&i, sizeof(int)); | |
| fout.write((char *)&d, sizeof(double)); | |
| fout.close(); | |
| // Read from file | |
| std::ifstream fin(filename.c_str(), std::ios::in | std::ios::binary); | |
| if (!fin.is_open()) { | |
| std::cerr << "error: open file for input failed!" << std::endl; | |
| abort(); | |
| } | |
| int i_in; | |
| double d_in; | |
| fin.read((char *)&i_in, sizeof(int)); | |
| std::cout << i_in << std::endl; | |
| fin.read((char *)&d_in, sizeof(double)); | |
| std::cout << d_in << std::endl; | |
| fin.close(); | |
| char mybuffer[512]; | |
| std::filebuf *optr = new std::filebuf(); | |
| optr->pubsetbuf(mybuffer, 512); | |
| const char sentence[] = "Sample sentence"; | |
| auto ptr = | |
| optr->open("bd.bin", std::ios::binary | std::ios::trunc | std::ios::out); | |
| if (ptr) { | |
| float fx = 13; | |
| auto n = optr->sputn(sentence, sizeof(sentence) - 1); | |
| n += optr->sputn(reinterpret_cast<const char *>(&fx), sizeof(fx)); | |
| optr->pubsync(); | |
| } | |
| optr->close(); | |
| if (optr) { | |
| delete optr; | |
| } | |
| return vec * vec; | |
| } | |
| int main() { | |
| double x = 2.1; | |
| double dsq = __enzyme_autodiff((void*)fn, x); | |
| APPROX_EQ(dsq, 2.1 * 2 * 2 * x, 1e-7); | |
| } |