virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef intptr_t (*Func0)(); typedef intptr_t (*Func1)(int); typedef intptr_t (*Func2)(int, int); typedef intptr_t (*Func3)(int, int, int); intptr_t resultRet = 0; intptr_t expectedRet = 0; switch (_argsCount) { case 0: resultRet = asmjit_cast<Func0>(_func)(); break; case 1: resultRet = asmjit_cast<Func1>(_func)(1); break; case 2: resultRet = asmjit_cast<Func2>(_func)(1, 2); break; case 3: resultRet = asmjit_cast<Func3>(_func)(1, 2, 3); break; } result.setFormat("%i", static_cast<int>(resultRet)); expected.setFormat("%i", static_cast<int>(expectedRet)); return resultRet == expectedRet; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef int (*Func)(void); Func func = asmjit_cast<Func>(_func); int resultRet = func(); int expectedRet = 1 + 2 + 3 + 4; result.setFormat("ret=%d", resultRet); expected.setFormat("ret=%d", expectedRet); return resultRet == expectedRet; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(void*, void*, size_t); Func func = asmjit_cast<Func>(_func); char dst[20]; char src[20] = "Hello AsmJit!"; func(dst, src, strlen(src) + 1); result.setFormat("ret=\"%s\"", dst); expected.setFormat("ret=\"%s\"", src); return ::memcmp(dst, src, strlen(src) + 1) == 0; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef int (*Func)(int*); Func func = asmjit_cast<Func>(_func); int buffer[4] = { 127, 87, 23, 17 }; int resultRet = func(buffer); int expectedRet = 0; result.setFormat("ret=%d", resultRet); expected.setFormat("ret=%d", expectedRet); return resultRet == expectedRet; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(int*, const int*); Func func = asmjit_cast<Func>(_func); int src[2] = { 4, 9 }; int resultRet[2] = { 0, 0 }; int expectedRet[2] = { 0, (4 * 9) * 4 }; func(resultRet, src); result.setFormat("ret={%d, %d}", resultRet[0], resultRet[1]); expected.setFormat("ret={%d, %d}", expectedRet[0], expectedRet[1]); return resultRet[0] == expectedRet[0] && resultRet[1] == expectedRet[1]; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef int (*Func)(void); Func func = asmjit_cast<Func>(_func); int resultRet = func(); int expectedRet = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32; result.setFormat("ret=%d", resultRet); expected.setFormat("ret=%d", expectedRet); return resultRet == expectedRet; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(int*, int, int, int); Func func = asmjit_cast<Func>(_func); int v0 = 0x000000FF; int resultRet; int expectedRet = 0x0000FF00; func(&resultRet, v0, 16, 8); result.setFormat("ret=%d", resultRet); expected.setFormat("ret=%d", expectedRet); return resultRet == expectedRet; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(int*, int*); Func func = asmjit_cast<Func>(_func); int resultX; int resultY; int expectedX = 36; int expectedY = -36; func(&resultX, &resultY); result.setFormat("x=%d, y=%d", resultX, resultY); expected.setFormat("x=%d, y=%d", expectedX, expectedY); return resultX == expectedX && resultY == expectedY; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef int (*Func)(int, int, int); Func func = asmjit_cast<Func>(_func); int arg1 = 4; int arg2 = 8; int resultAdd = func(arg1, arg2, 0); int expectedAdd = calledFuncAdd(arg1, arg2); int resultMul = func(arg1, arg2, 1); int expectedMul = calledFuncMul(arg1, arg2); result.setFormat("add=%d, mul=%d", resultAdd, resultMul); expected.setFormat("add=%d, mul=%d", expectedAdd, expectedMul); return (resultAdd == expectedAdd) && (resultMul == expectedMul); }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(int, int, char*); Func func = asmjit_cast<Func>(_func); char resultBuf[4]; char expectedBuf[4] = { 1, 0, 0, 1 }; func(0, 0, &resultBuf[0]); // We are expecting 1 (0 == 0). func(0, 1, &resultBuf[1]); // We are expecting 0 (0 != 1). func(1, 0, &resultBuf[2]); // We are expecting 0 (1 != 0). func(1, 1, &resultBuf[3]); // We are expecting 1 (1 == 1). result.setFormat("out={%d, %d, %d, %d}", resultBuf[0], resultBuf[1], resultBuf[2], resultBuf[3]); expected.setFormat("out={%d, %d, %d, %d}", expectedBuf[0], expectedBuf[1], expectedBuf[2], expectedBuf[3]); return resultBuf[0] == expectedBuf[0] && resultBuf[1] == expectedBuf[1] && resultBuf[2] == expectedBuf[2] && resultBuf[3] == expectedBuf[3] ; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(int*, int*, int, int); Func func = asmjit_cast<Func>(_func); int v0 = 4; int v1 = 4; int resultHi; int resultLo; int expectedHi = 0; int expectedLo = v0 * v1; func(&resultHi, &resultLo, v0, v1); result.setFormat("hi=%d, lo=%d", resultHi, resultLo); expected.setFormat("hi=%d, lo=%d", expectedHi, expectedLo); return resultHi == expectedHi && resultLo == expectedLo; }
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected) { typedef void (*Func)(void*, void*, void*, void*, void*, void*, void*, void*); Func func = asmjit_cast<Func>(_func); uint8_t resultBuf[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; uint8_t expectedBuf[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; func(resultBuf, resultBuf, resultBuf, resultBuf, resultBuf, resultBuf, resultBuf, resultBuf); result.setFormat("buf={%d, %d, %d, %d, %d, %d, %d, %d, %d}", resultBuf[0], resultBuf[1], resultBuf[2], resultBuf[3], resultBuf[4], resultBuf[5], resultBuf[6], resultBuf[7], resultBuf[8]); expected.setFormat("buf={%d, %d, %d, %d, %d, %d, %d, %d, %d}", expectedBuf[0], expectedBuf[1], expectedBuf[2], expectedBuf[3], expectedBuf[4], expectedBuf[5], expectedBuf[6], expectedBuf[7], expectedBuf[8]); return memcmp(resultBuf, expectedBuf, 9) == 0; }
void Pops::setTo( const WorkSpace& _WSpace, PopsMode _Mode ) { m_WSpace = &_WSpace; m_Mode = _Mode; m_AtomIndexes.clear(); m_Atoms.clear(); switch( m_Mode ) { case AllAtom: { m_CurrentDat = &m_Atomic; if( m_Atomic.atoms.size() == 0 ) { throw ProcedureException("POPS: No data has yet been loaded for AllAtom mode."); } for( size_t i = 0; i < _WSpace.nAtoms(); i++ ) { if( _WSpace.atom[i].isHydrogen() ) { m_AtomIndexes.push_back(SIZE_T_FAIL); continue; } else { m_AtomIndexes.push_back(m_Atoms.size()); } bool found = false; for( size_t j = 0; j < m_Atomic.atoms.size(); j++ ) { if( 0 == m_Atomic.atoms[j].atomName.compare( _WSpace.atom[i].pdbname ) && 0 == m_Atomic.atoms[j].resName.compare( _WSpace.atom[i].parentl3name ) ) { m_Atoms.push_back( PopsAtom( m_Atomic.atoms[j], i, &_WSpace.atomxyz(i)) ); found = true; break; } } if( !found ) { for( size_t j = 0; j < m_Atomic.atoms.size(); j++ ) { if( 0 == m_Atomic.atoms[j].resName.compare( "*" ) && 0 == m_Atomic.atoms[j].atomName.compare( _WSpace.atom[i].pdbname ) ) { m_Atoms.push_back( PopsAtom( m_Atomic.atoms[j], i, &_WSpace.atomxyz(i)) ); found = true; break; } } } if( !found ) { StringBuilder sb; sb.setFormat("POPS: Cannot find atom type %s %s in the database.\n") (_WSpace.atom[i].pdbname) (_WSpace.atom[i].parentl3name); throw ProcedureException(sb.toString()); } } break; } case Coarse: { m_CurrentDat = &m_Coarse; if( m_Coarse.atoms.size() == 0 ) { throw ProcedureException("POPS: No data has yet been loaded for AllAtom mode."); } for( size_t i = 0; i < _WSpace.nAtoms(); i++ ) { if( !_WSpace.atom[i].isCAlpha() ) { m_AtomIndexes.push_back(SIZE_T_FAIL); continue; } else { m_AtomIndexes.push_back(m_Atoms.size()); } bool found = false; for( size_t j = 0; j < m_Coarse.atoms.size(); j++ ) { if( 0 == m_Coarse.atoms[j].atomName.compare( _WSpace.atom[i].pdbname ) && 0 == m_Coarse.atoms[j].resName.compare( _WSpace.atom[i].parentl3name ) ) { m_Atoms.push_back( PopsAtom( m_Coarse.atoms[j], i, &_WSpace.atomxyz(i)) ); found = true; break; } } if( !found ) { for( size_t j = 0; j < m_Coarse.atoms.size(); j++ ) { if( 0 == m_Coarse.atoms[j].resName.compare( "*" ) && 0 == m_Coarse.atoms[j].atomName.compare( _WSpace.atom[i].pdbname ) ) { m_Atoms.push_back( PopsAtom( m_Coarse.atoms[j], i, &_WSpace.atomxyz(i) ) ); found = true; break; } } } if( !found ) { StringBuilder sb; sb.setFormat("POPS: Cannot find atom type %s %s in the database.\n") (_WSpace.atom[i].pdbname) (_WSpace.atom[i].parentl3name); throw ProcedureException(sb.toString()); } } break; } default: { THROW( CodeException, "Unknown PopsMode encountered!"); } } }