static void test_title(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleW(NULL); U(psp).pszTemplate = "prop_page1"; U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = sizeof(psh); psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; psh.pfnCallback = sheet_callback; hdlg = (HWND)PropertySheetA(&psh); DestroyWindow(hdlg); }
bool TTetrahedron::IsInner(const TPoint& P) const { TVector N, U1(X1, X2), U2(X1, X3), U3(X1, X4), U4(X2, X3), U5(X2, X4), U6(X2, X1); TVector Up1(X1, P), Up2(X2, P); N = Cross(U1, U2); //X4 is on opposite side of plain X1,X2,X3 than P if (Dot(N, U3) * Dot(N, Up1) < 0) { return false; } N = Cross(U1, U3); //X3 x P if (Dot(N, U2) * Dot(N, Up1) < 0) { return false; } N = Cross(U2, U3); //X2 x P if (Dot(N, U1) * Dot(N, Up1) < 0) { return false; } N = Cross(U4, U5); //X1 x P if (Dot(N, U6) * Dot(N, Up2) < 0) { return false; } return true; }
static void test_disableowner(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; register_parent_wnd_class(); parent = CreateWindowA("parent class", "", WS_CAPTION | WS_SYSMENU | WS_VISIBLE, 100, 100, 100, 100, GetDesktopWindow(), NULL, GetModuleHandleA(NULL), 0); memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleW(NULL); U(psp).pszTemplate = "prop_page1"; U2(psp).pszIcon = NULL; psp.pfnDlgProc = NULL; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = sizeof(psh); psh.dwFlags = PSH_USECALLBACK; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = parent; U3(psh).phpage = hpsp; psh.pfnCallback = disableowner_callback; PropertySheetA(&psh); ok(IsWindowEnabled(parent) != 0, "parent window should be enabled\n"); DestroyWindow(parent); }
void rubikStep(char *step) { u8 m=0; for(m=0;step[m]!=0;m++) { switch(step[m]) { case 7:allright90();break; case 11:F1();break; case 12:F2();break; case 13:F3();break; case 21:B1();break; case 22:B2();break; case 23:B3();break; case 31:R1();break; case 32:R2();break; case 33:R3();break; case 41:L1();break; case 42:L2();break; case 43:L3();break; case 51:U1();break; case 52:U2();break; case 53:U3();break; case 61:D1();break; case 62:D2();break; case 63:D3();break; default:break; } } }
static void test_buttons(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg; HWND button; RECT rc; int prevRight, top; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleA(NULL); U(psp).pszTemplate = "prop_page1"; U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; psh.pfnCallback = sheet_callback; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got null handle\n"); /* OK button */ button = GetDlgItem(hdlg, IDOK); GetWindowRect(button, &rc); prevRight = rc.right; top = rc.top; /* Cancel button */ button = GetDlgItem(hdlg, IDCANCEL); GetWindowRect(button, &rc); ok(rc.top == top, "Cancel button should have same top as OK button\n"); ok(rc.left > prevRight, "Cancel button should be to the right of OK button\n"); prevRight = rc.right; button = GetDlgItem(hdlg, IDC_APPLY_BUTTON); GetWindowRect(button, &rc); ok(rc.top == top, "Apply button should have same top as OK button\n"); ok(rc.left > prevRight, "Apply button should be to the right of Cancel button\n"); prevRight = rc.right; button = GetDlgItem(hdlg, IDHELP); GetWindowRect(button, &rc); ok(rc.top == top, "Help button should have same top as OK button\n"); ok(rc.left > prevRight, "Help button should be to the right of Apply button\n"); DestroyWindow(hdlg); }
void SubInv(double *v) { double temp1 = U1(v[0],v[1],v[2],v[3]); double temp2 = U2(v[0],v[1],v[2],v[3]); double temp3 = U3(v[0],v[1],v[2],v[3]); double temp4 = U4(v[0],v[1],v[2],v[3]); v[0] = temp1; v[1] = temp2; v[2] = temp3; v[3] = temp4; }
void SubInv(int *v, int m) { int temp1 = U1(v[0],v[1],v[2],v[3], m); int temp2 = U2(v[0],v[1],v[2],v[3], m); int temp3 = U3(v[0],v[1],v[2],v[3], m); int temp4 = U4(v[0],v[1],v[2],v[3], m); v[0] = temp1; v[1] = temp2; v[2] = temp3; v[3] = temp4; }
static void test_nopage(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg, hpage; MSG msg; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleA(NULL); U(psp).pszTemplate = "prop_page1"; U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; psh.pfnCallback = sheet_callback; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); ShowWindow(hdlg,SW_NORMAL); SendMessageA(hdlg, PSM_REMOVEPAGE, 0, 0); hpage = /* PropSheet_GetCurrentPageHwnd(hdlg); */ (HWND)SendMessageA(hdlg, PSM_GETCURRENTPAGEHWND, 0, 0); active_page = /* PropSheet_HwndToIndex(hdlg, hpage)); */ (int)SendMessageA(hdlg, PSM_HWNDTOINDEX, (WPARAM)hpage, 0); ok(hpage == NULL, "expected no current page, got %p, index=%d\n", hpage, active_page); flush_events(); RedrawWindow(hdlg,NULL,NULL,RDW_UPDATENOW|RDW_ERASENOW); /* Check that the property sheet was fully redrawn */ ok(!PeekMessageA(&msg, 0, WM_PAINT, WM_PAINT, PM_NOREMOVE), "expected no pending WM_PAINT messages\n"); DestroyWindow(hdlg); }
static void offscreen_test(void) { IDirectDrawSurface7 *overlay = create_overlay(64, 64, MAKEFOURCC('U','Y','V','Y')), *offscreen = NULL; HRESULT hr; DDSURFACEDESC2 ddsd; /* Try to overlay a NULL surface */ hr = IDirectDrawSurface7_UpdateOverlay(overlay, NULL, NULL, NULL, DDOVER_SHOW, NULL); ok(hr == DDERR_INVALIDPARAMS, "IDirectDrawSurface7_UpdateOverlay failed with hr=0x%08x\n", hr); hr = IDirectDrawSurface7_UpdateOverlay(overlay, NULL, NULL, NULL, DDOVER_HIDE, NULL); ok(hr == DDERR_INVALIDPARAMS, "IDirectDrawSurface7_UpdateOverlay failed with hr=0x%08x\n", hr); /* Try to overlay an offscreen surface */ memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; ddsd.dwWidth = 64; ddsd.dwHeight = 64; U4(ddsd).ddpfPixelFormat.dwSize = sizeof(U4(ddsd).ddpfPixelFormat); U4(ddsd).ddpfPixelFormat.dwFlags = DDPF_RGB; U4(ddsd).ddpfPixelFormat.dwFourCC = 0; U1(U4(ddsd).ddpfPixelFormat).dwRGBBitCount = 16; U2(U4(ddsd).ddpfPixelFormat).dwRBitMask = 0xF800; U3(U4(ddsd).ddpfPixelFormat).dwGBitMask = 0x07e0; U4(U4(ddsd).ddpfPixelFormat).dwBBitMask = 0x001F; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; hr = IDirectDraw7_CreateSurface(ddraw, &ddsd, &offscreen, NULL); ok(hr == DD_OK, "IDirectDraw7_CreateSurface failed with hr=0x%08x\n", hr); hr = IDirectDrawSurface7_UpdateOverlay(overlay, NULL, offscreen, NULL, DDOVER_SHOW, NULL); ok(hr == DD_OK || broken(hr == E_NOTIMPL), "IDirectDrawSurface7_UpdateOverlay failed with hr=0x%08x\n", hr); /* Try to overlay the primary with a non-overlay surface */ hr = IDirectDrawSurface7_UpdateOverlay(offscreen, NULL, primary, NULL, DDOVER_SHOW, NULL); ok(hr == DDERR_NOTAOVERLAYSURFACE, "IDirectDrawSurface7_UpdateOverlay failed with hr=0x%08x\n", hr); IDirectDrawSurface7_Release(offscreen); IDirectDrawSurface7_Release(overlay); }
static void test_messages(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg; init_msg_sequences(sequences, NUM_MSG_SEQUENCES); memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleA(NULL); U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_MESSAGE_TEST); U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc_messages; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_NOAPPLYNOW | PSH_WIZARD | PSH_USECALLBACK | PSH_MODELESS | PSH_USEICONID; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; psh.pfnCallback = sheet_callback_messages; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ShowWindow(hdlg,SW_NORMAL); ok_sequence(sequences, PROPSHEET_SEQ_INDEX, property_sheet_seq, "property sheet with custom window proc", TRUE); DestroyWindow(hdlg); }
static void test_title(void) { HPROPSHEETPAGE hpsp[1]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg; DWORD style; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleA(NULL); U(psp).pszTemplate = "prop_page1"; U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc; psp.lParam = 0; hpsp[0] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; psh.pfnCallback = sheet_callback; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); style = GetWindowLongA(hdlg, GWL_STYLE); ok(style == (WS_POPUP|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CAPTION|WS_SYSMENU| DS_CONTEXTHELP|DS_MODALFRAME|DS_SETFONT|DS_3DLOOK), "got unexpected style: %x\n", style); DestroyWindow(hdlg); }
void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { bool writeResults = !args.optionFound("noWrite"); IOobject Uheader ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ); if (Uheader.headerOk()) { Info<< " Reading U" << endl; volVectorField U(Uheader, mesh); Info<< " Calculating U^2" << endl; volVectorField U2 ( IOobject ( "U2", runTime.timeName(), mesh, IOobject::NO_READ ), mesh, dimensionedVector("U2",dimensionSet(0, 2, -2, 0, 0, 0, 0),vector::zero) ); Info<< " Calculating U^3" << endl; volVectorField U3 ( IOobject ( "U3", runTime.timeName(), mesh, IOobject::NO_READ ), mesh, dimensionedVector("U3",dimensionSet(0, 3, -3, 0, 0, 0, 0),vector::zero) ); /* only the internal */ //U2.internalField().replace(vector::Z, Ux.internalField()); /* include the boundary */ /* U2.replace(vector::X, U.component(vector::X)*U.component(vector::X)); U2.replace(vector::Y, U.component(vector::Y)*U.component(vector::Y)); U2.replace(vector::Z, U.component(vector::Z)*U.component(vector::Z)); */ U2.replace(vector::X, pow(U.component(vector::X), 2)); U2.replace(vector::Y, pow(U.component(vector::Y), 2)); U2.replace(vector::Z, pow(U.component(vector::Z), 2)); U3.replace(vector::X, pow(U.component(vector::X), 3)); U3.replace(vector::Y, pow(U.component(vector::Y), 3)); U3.replace(vector::Z, pow(U.component(vector::Z), 3)); /* Info<< "vorticity max/min : " << max(magVorticity).value() << " " << min(magVorticity).value() << endl; */ if (writeResults) { // vorticity.write(); // magVorticity.write(); U2.write(); U3.write(); } } else { Info<< " No U" << endl; } Info<< "\nEnd\n" << endl; }
static void test_PSM_INSERTPAGE(void) { HPROPSHEETPAGE hpsp[5]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psh; HWND hdlg, tab; BOOL ret; DWORD r; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = GetModuleHandleA(NULL); U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_MESSAGE_TEST); U2(psp).pszIcon = NULL; psp.pfnDlgProc = page_dlg_proc_messages; psp.lParam = 0; /* multiple pages with the same data */ hpsp[0] = CreatePropertySheetPageA(&psp); hpsp[1] = CreatePropertySheetPageA(&psp); hpsp[2] = CreatePropertySheetPageA(&psp); U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR); hpsp[3] = CreatePropertySheetPageA(&psp); psp.dwFlags = PSP_PREMATURE; hpsp[4] = CreatePropertySheetPageA(&psp); memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_MODELESS; psh.pszCaption = "test caption"; psh.nPages = 1; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); /* add pages one by one */ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]); ok(ret == TRUE, "got %d\n", ret); /* try with invalid values */ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0); ok(ret == FALSE, "got %d\n", ret); if (0) { /* crashes on native */ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)INVALID_HANDLE_VALUE); } ret = SendMessageA(hdlg, PSM_INSERTPAGE, (LPARAM)INVALID_HANDLE_VALUE, (LPARAM)hpsp[2]); ok(ret == FALSE, "got %d\n", ret); /* check item count */ tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); ok(r == 2, "got %d\n", r); ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]); ok(ret == TRUE, "got %d\n", ret); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); ok(r == 3, "got %d\n", r); /* add property sheet page that can't be created */ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]); ok(ret == TRUE, "got %d\n", ret); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); ok(r == 4, "got %d\n", r); /* select page that can't be created */ ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0); ok(ret == TRUE, "got %d\n", ret); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); ok(r == 3, "got %d\n", r); /* test PSP_PREMATURE flag with incorrect property sheet page */ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]); ok(ret == FALSE, "got %d\n", ret); r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0); ok(r == 3, "got %d\n", r); DestroyPropertySheetPage(hpsp[4]); DestroyWindow(hdlg); }
static void test_custom_default_button(void) { HWND hdlg, page; PROPSHEETPAGEA psp[1]; PROPSHEETHEADERA psh; MSG msg; LRESULT result; psp[0].dwSize = sizeof (PROPSHEETPAGEA); psp[0].dwFlags = PSP_USETITLE; psp[0].hInstance = GetModuleHandleA(NULL); U(psp[0]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_WITH_CUSTOM_DEFAULT_BUTTON); U2(psp[0]).pszIcon = NULL; psp[0].pfnDlgProc = page_with_custom_default_button_dlg_proc; psp[0].pszTitle = "Page1"; psp[0].lParam = 0; psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_PROPSHEETPAGE | PSH_MODELESS; psh.hwndParent = GetDesktopWindow(); psh.hInstance = GetModuleHandleA(NULL); U(psh).pszIcon = NULL; psh.pszCaption = "PropertySheet1"; psh.nPages = 1; U3(psh).ppsp = psp; U2(psh).nStartPage = 0; /* The goal of the test is to make sure that the Add button is pressed * when the ENTER key is pressed and a different control, a combobox, * has the keyboard focus. */ add_button_has_been_pressed = FALSE; /* Create the modeless property sheet. */ hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "Cannot create the property sheet\n"); /* Set the Add button as the default button. */ SendMessageA(hdlg, DM_SETDEFID, (WPARAM)IDC_PS_PUSHBUTTON1, 0); /* Make sure the default button is the Add button. */ result = SendMessageA(hdlg, DM_GETDEFID, 0, 0); ok(DC_HASDEFID == HIWORD(result), "The property sheet does not have a default button\n"); ok(IDC_PS_PUSHBUTTON1 == LOWORD(result), "The default button is not the Add button\n"); /* At this point, the combobox should have keyboard focus, so we press ENTER. * Pull the lever, Kronk! */ page = (HWND)SendMessageW(hdlg, PSM_GETCURRENTPAGEHWND, 0, 0); PostMessageW(GetDlgItem(page, IDC_PS_COMBO1), WM_KEYDOWN, VK_RETURN, 0); /* Process all the messages in the queue for this thread. */ while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) { /* (!PropSheet_IsDialogMessage(hdlg, &msg)) */ if (!((BOOL)SendMessageA(hdlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)&msg))) { TranslateMessage(&msg); DispatchMessageA(&msg); } } ok(add_button_has_been_pressed, "The Add button has not been pressed!\n"); DestroyWindow(hdlg); }
void invertMatrix(Int_t msize=6) { #ifdef __CINT__ gSystem->Load("libMatrix"); #endif if (msize < 2 || msize > 10) { cout << "2 <= msize <= 10" <<endl; return; } cout << "--------------------------------------------------------" <<endl; cout << "Inversion results for a ("<<msize<<","<<msize<<") matrix" <<endl; cout << "For each inversion procedure we check the maximum size " <<endl; cout << "of the off-diagonal elements of Inv(A) * A " <<endl; cout << "--------------------------------------------------------" <<endl; TMatrixD H_square = THilbertMatrixD(msize,msize); // 1. InvertFast(Double_t *det=0) // It is identical to Invert() for sizes > 6 x 6 but for smaller sizes, the // inversion is performed according to Cramer's rule by explicitly calculating // all Jacobi's sub-determinants . For instance for a 6 x 6 matrix this means: // # of 5 x 5 determinant : 36 // # of 4 x 4 determinant : 75 // # of 3 x 3 determinant : 80 // # of 2 x 2 determinant : 45 (see TMatrixD/FCramerInv.cxx) // // The only "quality" control in this process is to check whether the 6 x 6 // determinant is unequal 0 . But speed gains are significant compared to Invert() , // up to an order of magnitude for sizes <= 4 x 4 // // The inversion is done "in place", so the original matrix will be overwritten // If a pointer to a Double_t is supplied the determinant is calculated // cout << "1. Use .InvertFast(&det)" <<endl; if (msize > 6) cout << " for ("<<msize<<","<<msize<<") this is identical to .Invert(&det)" <<endl; Double_t det1; TMatrixD H1 = H_square; H1.InvertFast(&det1); // Get the maximum off-diagonal matrix value . One way to do this is to set the // diagonal to zero . TMatrixD U1(H1,TMatrixD::kMult,H_square); TMatrixDDiag diag1(U1); diag1 = 0.0; const Double_t U1_max_offdiag = (U1.Abs()).Max(); cout << " Maximum off-diagonal = " << U1_max_offdiag << endl; cout << " Determinant = " << det1 <<endl; // 2. Invert(Double_t *det=0) // Again the inversion is performed in place . // It consists out of a sequence of calls to the decomposition classes . For instance // for the general dense matrix TMatrixD the LU decomposition is invoked: // - The matrix is decomposed using a scheme according to Crout which involves // "implicit partial pivoting", see for instance Num. Recip. (we have also available // a decomposition scheme that does not the scaling and is therefore even slightly // faster but less stable) // With each decomposition, a tolerance has to be specified . If this tolerance // requirement is not met, the matrix is regarded as being singular. The value // passed to this decomposition, is the data member fTol of the matrix . Its // default value is DBL_EPSILON, which is defined as the smallest number so that // 1+DBL_EPSILON > 1 // - The last step is a standard forward/backward substitution . // // It is important to realize that both InvertFast() and Invert() are "one-shot" deals , speed // comes at a price . If something goes wrong because the matrix is (near) singular, you have // overwritten your original matrix and no factorization is available anymore to get more // information like condition number or change the tolerance number . // // All other calls in the matrix classes involving inversion like the ones with the "smart" // constructors (kInverted,kInvMult...) use this inversion method . // cout << "2. Use .Invert(&det)" <<endl; Double_t det2; TMatrixD H2 = H_square; H2.Invert(&det2); TMatrixD U2(H2,TMatrixD::kMult,H_square); TMatrixDDiag diag2(U2); diag2 = 0.0; const Double_t U2_max_offdiag = (U2.Abs()).Max(); cout << " Maximum off-diagonal = " << U2_max_offdiag << endl; cout << " Determinant = " << det2 <<endl; // 3. Inversion through LU decomposition // The (default) algorithms used are similar to 2. (Not identical because in 2, the whole // calculation is done "in-place". Here the original matrix is copied (so more memory // management => slower) and several operations can be performed without having to repeat // the decomposition step . // Inverting a matrix is nothing else than solving a set of equations where the rhs is given // by the unit matrix, so the steps to take are identical to those solving a linear equation : // cout << "3. Use TDecompLU" <<endl; TMatrixD H3 = H_square; TDecompLU lu(H_square); // Any operation that requires a decomposition will trigger it . The class keeps // an internal state so that following operations will not perform the decomposition again // unless the matrix is changed through SetMatrix(..) // One might want to proceed more cautiously by invoking first Decompose() and check its // return value before proceeding.... lu.Invert(H3); Double_t d1_lu; Double_t d2_lu; lu.Det(d1_lu,d2_lu); Double_t det3 = d1_lu*TMath::Power(2.,d2_lu); TMatrixD U3(H3,TMatrixD::kMult,H_square); TMatrixDDiag diag3(U3); diag3 = 0.0; const Double_t U3_max_offdiag = (U3.Abs()).Max(); cout << " Maximum off-diagonal = " << U3_max_offdiag << endl; cout << " Determinant = " << det3 <<endl; // 4. Inversion through SVD decomposition // For SVD and QRH, the (n x m) matrix does only have to fulfill n >=m . In case n > m // a pseudo-inverse is calculated cout << "4. Use TDecompSVD on non-square matrix" <<endl; TMatrixD H_nsquare = THilbertMatrixD(msize,msize-1); TDecompSVD svd(H_nsquare); TMatrixD H4 = svd.Invert(); Double_t d1_svd; Double_t d2_svd; svd.Det(d1_svd,d2_svd); Double_t det4 = d1_svd*TMath::Power(2.,d2_svd); TMatrixD U4(H4,TMatrixD::kMult,H_nsquare); TMatrixDDiag diag4(U4); diag4 = 0.0; const Double_t U4_max_offdiag = (U4.Abs()).Max(); cout << " Maximum off-diagonal = " << U4_max_offdiag << endl; cout << " Determinant = " << det4 <<endl; }
static void test_wiznavigation(void) { HPROPSHEETPAGE hpsp[4]; PROPSHEETPAGEA psp[4]; PROPSHEETHEADERA psh; HWND hdlg, control; LONG_PTR controlID; DWORD style; LRESULT defidres; BOOL hwndtoindex_supported = TRUE; const INT nextID = 12324; const INT backID = 12323; HHOOK hook; /* set up a hook proc in order to subclass the main dialog early on */ hook = SetWindowsHookExW( WH_CBT, hook_proc, NULL, GetCurrentThreadId() ); /* create the property sheet pages */ memset(psp, 0, sizeof(PROPSHEETPAGEA) * 4); psp[0].dwSize = sizeof(PROPSHEETPAGEA); psp[0].hInstance = GetModuleHandleA(NULL); U(psp[0]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_INTRO); psp[0].pfnDlgProc = nav_page_proc; hpsp[0] = CreatePropertySheetPageA(&psp[0]); psp[1].dwSize = sizeof(PROPSHEETPAGEA); psp[1].hInstance = GetModuleHandleA(NULL); U(psp[1]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EDIT); psp[1].pfnDlgProc = nav_page_proc; hpsp[1] = CreatePropertySheetPageA(&psp[1]); psp[2].dwSize = sizeof(PROPSHEETPAGEA); psp[2].hInstance = GetModuleHandleA(NULL); U(psp[2]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_RADIO); psp[2].pfnDlgProc = nav_page_proc; hpsp[2] = CreatePropertySheetPageA(&psp[2]); psp[3].dwSize = sizeof(PROPSHEETPAGEA); psp[3].hInstance = GetModuleHandleA(NULL); U(psp[3]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EXIT); psp[3].pfnDlgProc = nav_page_proc; hpsp[3] = CreatePropertySheetPageA(&psp[3]); /* set up the property sheet dialog */ memset(&psh, 0, sizeof(psh)); psh.dwSize = PROPSHEETHEADERA_V1_SIZE; psh.dwFlags = PSH_MODELESS | PSH_WIZARD; psh.pszCaption = "A Wizard"; psh.nPages = 4; psh.hwndParent = GetDesktopWindow(); U3(psh).phpage = hpsp; hdlg = (HWND)PropertySheetA(&psh); ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg); ok(active_page == 0, "Active page should be 0. Is: %d\n", active_page); style = GetWindowLongA(hdlg, GWL_STYLE) & ~(DS_CONTEXTHELP|WS_SYSMENU); ok(style == (WS_POPUP|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CAPTION| DS_MODALFRAME|DS_SETFONT|DS_3DLOOK), "got unexpected style: %x\n", style); control = GetFocus(); controlID = GetWindowLongPtrA(control, GWLP_ID); ok(controlID == nextID, "Focus should have been set to the Next button. Expected: %d, Found: %ld\n", nextID, controlID); /* simulate pressing the Next button */ SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_NEXT, 0); if (!active_page) hwndtoindex_supported = FALSE; if (hwndtoindex_supported) ok(active_page == 1, "Active page should be 1 after pressing Next. Is: %d\n", active_page); control = GetFocus(); controlID = GetWindowLongPtrA(control, GWLP_ID); ok(controlID == IDC_PS_EDIT1, "Focus should be set to the first item on the second page. Expected: %d, Found: %ld\n", IDC_PS_EDIT1, controlID); defidres = SendMessageA(hdlg, DM_GETDEFID, 0, 0); ok(defidres == MAKELRESULT(nextID, DC_HASDEFID), "Expected default button ID to be %d, is %d\n", nextID, LOWORD(defidres)); /* set the focus to the second edit box on this page */ SetFocus(GetNextDlgTabItem(hdlg, control, FALSE)); /* press next again */ SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_NEXT, 0); if (hwndtoindex_supported) ok(active_page == 2, "Active page should be 2 after pressing Next. Is: %d\n", active_page); control = GetFocus(); controlID = GetWindowLongPtrA(control, GWLP_ID); ok(controlID == IDC_PS_RADIO1, "Focus should have been set to item on third page. Expected: %d, Found %ld\n", IDC_PS_RADIO1, controlID); /* back button */ SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_BACK, 0); if (hwndtoindex_supported) ok(active_page == 1, "Active page should be 1 after pressing Back. Is: %d\n", active_page); control = GetFocus(); controlID = GetWindowLongPtrA(control, GWLP_ID); ok(controlID == IDC_PS_EDIT1, "Focus should have been set to the first item on second page. Expected: %d, Found %ld\n", IDC_PS_EDIT1, controlID); defidres = SendMessageA(hdlg, DM_GETDEFID, 0, 0); ok(defidres == MAKELRESULT(backID, DC_HASDEFID), "Expected default button ID to be %d, is %d\n", backID, LOWORD(defidres)); /* press next twice */ SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_NEXT, 0); if (hwndtoindex_supported) ok(active_page == 2, "Active page should be 2 after pressing Next. Is: %d\n", active_page); SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_NEXT, 0); if (hwndtoindex_supported) ok(active_page == 3, "Active page should be 3 after pressing Next. Is: %d\n", active_page); else active_page = 3; control = GetFocus(); controlID = GetWindowLongPtrA(control, GWLP_ID); ok(controlID == nextID, "Focus should have been set to the Next button. Expected: %d, Found: %ld\n", nextID, controlID); /* try to navigate away, but shouldn't be able to */ SendMessageA(hdlg, PSM_PRESSBUTTON, PSBTN_BACK, 0); ok(active_page == 3, "Active page should still be 3 after pressing Back. Is: %d\n", active_page); defidres = SendMessageA(hdlg, DM_GETDEFID, 0, 0); ok(defidres == MAKELRESULT(nextID, DC_HASDEFID), "Expected default button ID to be %d, is %d\n", nextID, LOWORD(defidres)); DestroyWindow(hdlg); UnhookWindowsHookEx( hook ); }
void VectorTest::testAll() { double UData[2] = {1.5, 1.}; double VData[2] = {4., 3.}; vector<bool> v; v.push_back(true); v.push_back(false); for(unsigned int i = 0; i < v.size(); i++) { bool line = v[i]; // constructeurs Vector<double> U(UData, 2, line); Vector<double> U2(2, line); Vector<double> V(VData, 2, line); // getM(), getN() CPPUNIT_ASSERT(U.getM() == (line ? 1 : 2)); CPPUNIT_ASSERT(U.getN() == (line ? 2 : 1)); // getData() CPPUNIT_ASSERT(U.getData() == UData); // getDataAllocation() CPPUNIT_ASSERT(!U.getDataAllocation()); CPPUNIT_ASSERT(!V.getDataAllocation()); CPPUNIT_ASSERT(U2.getDataAllocation()); // operator== CPPUNIT_ASSERT(U == U); CPPUNIT_ASSERT(!(U == U2)); CPPUNIT_ASSERT(!(U == V)); // operator= (IMatrix<double>&) U2 = (IMatrix<double>&) V; CPPUNIT_ASSERT(U2 == V); CPPUNIT_ASSERT(!(U == U2)); // operator() CPPUNIT_ASSERT(U(1) == 1.5); CPPUNIT_ASSERT(U(2) == 1.); U2(1) = 1.5; U2(2) = 1.; CPPUNIT_ASSERT(U2(1) == 1.5); CPPUNIT_ASSERT(U2(2) == 1.); CPPUNIT_ASSERT(U == U2); // distance() CPPUNIT_ASSERT(U.distance(U) == 0); CPPUNIT_ASSERT(U.distance(U2) == 0); CPPUNIT_ASSERT(U2.distance(U) == 0); CPPUNIT_ASSERT(U.distance(V) == 2); CPPUNIT_ASSERT(V.distance(U) == 2); U2(2) = 0.; CPPUNIT_ASSERT(U.distance(U2) == 1); CPPUNIT_ASSERT(U2.distance(U) == 1); // weight() CPPUNIT_ASSERT(U.weight() == 2); CPPUNIT_ASSERT(U2.weight() == 1); CPPUNIT_ASSERT(V.weight() == 2); // toString() CPPUNIT_ASSERT(U.toString().compare(line ? "[\n1.5 1 \n]\n" : "[\n1.5 \n1 \n]\n") == 0); // locationId() for(int i = 1; i <= U.getM(); i++){ for(int j = 1; j <= U.getN(); j++){ for(int k = 1; k <= U.getM(); k++){ for(int l = 1; l <= U.getN(); l++){ if(!(i == k && j == l)) CPPUNIT_ASSERT(U.locationId(i, j) != U.locationId(k, l)); } } } } // Contructeur par recopie Vector<double> U3(U2); CPPUNIT_ASSERT(U3.getDataAllocation()); CPPUNIT_ASSERT(U3 == U2); U3(1) = 5.; CPPUNIT_ASSERT(U3(1) == 5. && U2(1) == 1.5); U3(1) = 1.5; CPPUNIT_ASSERT(U3 == U2); Vector<double> U4(V); CPPUNIT_ASSERT(!U4.getDataAllocation()); CPPUNIT_ASSERT(U4 == V); U4(1) = 5.; CPPUNIT_ASSERT(U4 == V); CPPUNIT_ASSERT(U4(1) == 5. && V(1) == 5.); U4(1) = 1.; CPPUNIT_ASSERT(U4 == V); } }
void PieceBezier_1D(int nspect, int mu, bool_t to_obs, double *chi, double *S, double *I, double *Psi) { const char routineName[] = "PieceBezier_1D"; register int k; int k_start, k_end, dk, Ndep = geometry.Ndep; double dtau_uw, dtau_dw, dS_uw, I_uw, dS_dw, U[3], zmu, Bnu[2], psi_uw, psi_0, psi_dw, Sc; zmu = 0.5 / geometry.muz[mu]; /* --- Distinguish between rays going from BOTTOM to TOP (to_obs == TRUE), and vice versa -- -------------- */ if (to_obs) { dk = -1; k_start = Ndep-1; k_end = 0; } else { dk = 1; k_start = 0; k_end = Ndep-1; } /* --- Boundary conditions -- -------------- */ if (to_obs) { switch (geometry.vboundary[BOTTOM]) { case ZERO: I_uw = 0.0; break; case THERMALIZED: Planck(2, &atmos.T[Ndep-2], spectrum.lambda[nspect], Bnu); I_uw = Bnu[1] - (Bnu[0] - Bnu[1]) / dtau_uw; break; case IRRADIATED: I_uw = geometry.Ibottom[nspect][mu]; break; } } else { switch (geometry.vboundary[TOP]) { case ZERO: I_uw = 0.0; break; case THERMALIZED: Planck(2, &atmos.T[0], spectrum.lambda[nspect], Bnu); I_uw = Bnu[0] - (Bnu[1] - Bnu[0]) / dtau_uw; break; case IRRADIATED: I_uw = geometry.Itop[nspect][mu]; break; } } dtau_uw = zmu * (chi[k_start] + chi[k_start+dk]) * fabs(geometry.height[k_start] - geometry.height[k_start+dk]); dS_uw = (S[k_start] - S[k_start+dk]) / dtau_uw; I[k_start] = I_uw; if (Psi) Psi[k_start] = 0.0; /* --- Solve transfer along ray -- -------------- */ for (k = k_start+dk; k != k_end; k += dk) { U3(dtau_uw, U); dtau_dw = zmu * (chi[k] + chi[k+dk]) * fabs(geometry.height[k] - geometry.height[k+dk]); dS_dw = (S[k] - S[k+dk]) / dtau_dw; if (dS_uw * dS_dw < 0.0) { psi_uw = U[0] + (U[2] - 2.0*dtau_uw * U[1]) / (dtau_uw * dtau_uw); psi_0 = (2.0*dtau_uw * U[1] - U[2]) / SQ(dtau_uw); I[k] = (1.0 - U[0]) * I_uw + psi_uw*S[k-dk] + psi_0*S[k]; } else { Sc = S[k] - dtau_uw/2.0 * (dtau_dw*dS_uw + dtau_uw*dS_dw) / (dtau_dw + dtau_uw); if (Sc < MIN(S[k-dk], S[k]) || Sc > MAX(S[k-dk], S[k])) { psi_uw = U[0] - U[2] / (dtau_uw * dtau_uw); psi_0 = U[2] / (dtau_uw * dtau_uw); I[k] = (1.0 - U[0]) * I_uw + psi_uw*S[k-dk] + psi_0*S[k]; } else { psi_uw = U[0] + (U[2] - (dtau_dw + 2.0*dtau_uw) * U[1]) / (dtau_uw * (dtau_uw + dtau_dw)); psi_0 = ((dtau_dw + dtau_uw) * U[1] - U[2]) / (dtau_dw * dtau_uw); psi_dw = (U[2] - dtau_uw * U[1]) / (dtau_dw * (dtau_dw + dtau_uw)); I[k] = (1.0 - U[0]) * I_uw + psi_uw*S[k-dk] + psi_0*S[k] + psi_dw*S[k+dk]; } } /* --- Re-use downwind quantities for next upwind position -- --- */ I_uw = I[k]; dtau_uw = dtau_dw; dS_uw = dS_dw; /* --- Diagonal operator -- -------------- */ if (Psi) Psi[k] = psi_0; } /* --- Far boundary -- -------------- */ U3(dtau_uw, U); psi_uw = U[0] + (U[2] - 2.0*dtau_uw * U[1]) / SQ(dtau_uw); psi_0 = (2.0*dtau_uw * U[1] - U[2]) / SQ(dtau_uw); I[k_end] = (1.0 - U[0]) * I_uw + psi_uw*S[k_end-dk] + psi_0*S[k_end]; if (Psi) Psi[k_end] = psi_0; }
KJG_GENO_PACK(a, b, c, 2), \ KJG_GENO_PACK(a, b, c, 3) } #define P2(a, b) { P1(a, b, 0), P1(a, b, 1), P1(a, b, 2), P1(a, b, 3) } #define P3(a) { P2(a, 0), P2(a, 1), P2(a, 2), P2(a, 3) } const uint8_t KJG_GENO_PACK_LOOKUP[4][4][4][4] = { P3(0), P3(1), P3(2), P3(3) }; #define U1(p) \ KJG_GENO_UNPACK(p), \ KJG_GENO_UNPACK(p + 1), \ KJG_GENO_UNPACK(p + 2), \ KJG_GENO_UNPACK(p + 3) #define U2(p) U1(p), U1(p + 4), U1(p + 8), U1(p + 12) #define U3(p) U2(p), U2(p + 16), U2(p + 32), U2(p + 48) const uint8_t KJG_GENO_UNPACK_LOOKUP[256][4] = { U3(0), U3(64), U3(128), U3(192) }; #define A1(p) \ KJG_GENO_SUM_ALT(p), \ KJG_GENO_SUM_ALT(p + 1), \ KJG_GENO_SUM_ALT(p + 2), \ KJG_GENO_SUM_ALT(p + 3) #define A2(p) A1(p), A1(p + 4), A1(p + 8), A1(p + 12) #define A3(p) A2(p), A2(p + 16), A2(p + 32), A2(p + 48) const uint8_t KJG_GENO_SUM_ALT_LOOKUP[256] = { A3(0), A3(64), A3(128), A3(192) }; #define C1(p) \ KJG_GENO_COUNT(p), \ KJG_GENO_COUNT(p + 1), \
static void test_clipper_blt(void) { IDirectDrawSurface7 *src_surface, *dst_surface; RECT client_rect, src_rect, *rect; IDirectDrawClipper *clipper; DDSURFACEDESC2 surface_desc; unsigned int i, j, x, y; IDirectDraw7 *ddraw; RGNDATA *rgn_data; D3DCOLOR color; HRGN r1, r2; HWND window; DDBLTFX fx; HRESULT hr; DWORD ret; static const D3DCOLOR expected1[] = { 0x000000ff, 0x0000ff00, 0x00000000, 0x00000000, 0x000000ff, 0x0000ff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ff0000, 0x00ffffff, 0x00000000, 0x00000000, 0x00ff0000, 0x00ffffff, }; static const D3DCOLOR expected2[] = { 0x000000ff, 0x000000ff, 0x00000000, 0x00000000, 0x000000ff, 0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000ff, 0x000000ff, 0x00000000, 0x00000000, 0x000000ff, 0x000000ff, }; window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, 10, 10, 640, 480, 0, 0, 0, 0); ShowWindow(window, SW_SHOW); if (!(ddraw = create_ddraw())) { skip("Failed to create a ddraw object, skipping test.\n"); DestroyWindow(window); return; } ret = GetClientRect(window, &client_rect); ok(ret, "Failed to get client rect.\n"); ret = MapWindowPoints(window, NULL, (POINT *)&client_rect, 2); ok(ret, "Failed to map client rect.\n"); hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); hr = IDirectDraw7_CreateClipper(ddraw, 0, &clipper, NULL); ok(SUCCEEDED(hr), "Failed to create clipper, hr %#x.\n", hr); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(hr == DDERR_NOCLIPLIST, "Got unexpected hr %#x.\n", hr); hr = IDirectDrawClipper_SetHWnd(clipper, 0, window); ok(SUCCEEDED(hr), "Failed to set clipper window, hr %#x.\n", hr); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(SUCCEEDED(hr), "Failed to get clip list size, hr %#x.\n", hr); rgn_data = HeapAlloc(GetProcessHeap(), 0, ret); hr = IDirectDrawClipper_GetClipList(clipper, NULL, rgn_data, &ret); ok(SUCCEEDED(hr), "Failed to get clip list, hr %#x.\n", hr); ok(rgn_data->rdh.dwSize == sizeof(rgn_data->rdh), "Got unexpected structure size %#x.\n", rgn_data->rdh.dwSize); ok(rgn_data->rdh.iType == RDH_RECTANGLES, "Got unexpected type %#x.\n", rgn_data->rdh.iType); ok(rgn_data->rdh.nCount == 1, "Got unexpected count %u.\n", rgn_data->rdh.nCount); ok(rgn_data->rdh.nRgnSize == 16, "Got unexpected region size %u.\n", rgn_data->rdh.nRgnSize); ok(EqualRect(&rgn_data->rdh.rcBound, &client_rect), "Got unexpected bounding rect {%d, %d, %d, %d}, expected {%d, %d, %d, %d}.\n", rgn_data->rdh.rcBound.left, rgn_data->rdh.rcBound.top, rgn_data->rdh.rcBound.right, rgn_data->rdh.rcBound.bottom, client_rect.left, client_rect.top, client_rect.right, client_rect.bottom); rect = (RECT *)&rgn_data->Buffer[0]; ok(EqualRect(rect, &client_rect), "Got unexpected clip rect {%d, %d, %d, %d}, expected {%d, %d, %d, %d}.\n", rect->left, rect->top, rect->right, rect->bottom, client_rect.left, client_rect.top, client_rect.right, client_rect.bottom); HeapFree(GetProcessHeap(), 0, rgn_data); r1 = CreateRectRgn(0, 0, 320, 240); ok(!!r1, "Failed to create region.\n"); r2 = CreateRectRgn(320, 240, 640, 480); ok(!!r2, "Failed to create region.\n"); CombineRgn(r1, r1, r2, RGN_OR); ret = GetRegionData(r1, 0, NULL); rgn_data = HeapAlloc(GetProcessHeap(), 0, ret); ret = GetRegionData(r1, ret, rgn_data); ok(!!ret, "Failed to get region data.\n"); DeleteObject(r2); DeleteObject(r1); hr = IDirectDrawClipper_SetClipList(clipper, rgn_data, 0); ok(hr == DDERR_CLIPPERISUSINGHWND, "Got unexpected hr %#x.\n", hr); hr = IDirectDrawClipper_SetHWnd(clipper, 0, NULL); ok(SUCCEEDED(hr), "Failed to set clipper window, hr %#x.\n", hr); hr = IDirectDrawClipper_SetClipList(clipper, rgn_data, 0); ok(SUCCEEDED(hr), "Failed to set clip list, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, rgn_data); memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; surface_desc.dwWidth = 640; surface_desc.dwHeight = 480; U4(surface_desc).ddpfPixelFormat.dwSize = sizeof(U4(surface_desc).ddpfPixelFormat); U4(surface_desc).ddpfPixelFormat.dwFlags = DDPF_RGB; U1(U4(surface_desc).ddpfPixelFormat).dwRGBBitCount = 32; U2(U4(surface_desc).ddpfPixelFormat).dwRBitMask = 0x00ff0000; U3(U4(surface_desc).ddpfPixelFormat).dwGBitMask = 0x0000ff00; U4(U4(surface_desc).ddpfPixelFormat).dwBBitMask = 0x000000ff; hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &src_surface, NULL); ok(SUCCEEDED(hr), "Failed to create source surface, hr %#x.\n", hr); hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &dst_surface, NULL); ok(SUCCEEDED(hr), "Failed to create destination surface, hr %#x.\n", hr); memset(&fx, 0, sizeof(fx)); fx.dwSize = sizeof(fx); hr = IDirectDrawSurface7_Blt(src_surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx); ok(SUCCEEDED(hr), "Failed to clear source surface, hr %#x.\n", hr); hr = IDirectDrawSurface7_Blt(dst_surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx); ok(SUCCEEDED(hr), "Failed to clear destination surface, hr %#x.\n", hr); hr = IDirectDrawSurface7_Lock(src_surface, NULL, &surface_desc, 0, NULL); ok(SUCCEEDED(hr), "Failed to lock source surface, hr %#x.\n", hr); ((DWORD *)surface_desc.lpSurface)[0] = 0xff0000ff; ((DWORD *)surface_desc.lpSurface)[1] = 0xff00ff00; ((DWORD *)surface_desc.lpSurface)[2] = 0xffff0000; ((DWORD *)surface_desc.lpSurface)[3] = 0xffffffff; hr = IDirectDrawSurface7_Unlock(src_surface, NULL); ok(SUCCEEDED(hr), "Failed to unlock source surface, hr %#x.\n", hr); hr = IDirectDrawSurface7_SetClipper(dst_surface, clipper); ok(SUCCEEDED(hr), "Failed to set clipper, hr %#x.\n", hr); SetRect(&src_rect, 0, 0, 4, 1); hr = IDirectDrawSurface7_Blt(dst_surface, NULL, src_surface, &src_rect, DDBLT_WAIT, NULL); ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) { x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); ok(compare_color(color, expected1[i * 4 + j], 1), "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); } } U5(fx).dwFillColor = 0xff0000ff; hr = IDirectDrawSurface7_Blt(dst_surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx); ok(SUCCEEDED(hr), "Failed to clear destination surface, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) { x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); ok(compare_color(color, expected2[i * 4 + j], 1), "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected2[i * 4 + j], x, y, color); } } hr = IDirectDrawSurface7_BltFast(dst_surface, 0, 0, src_surface, NULL, DDBLTFAST_WAIT); ok(hr == DDERR_BLTFASTCANTCLIP, "Got unexpected hr %#x.\n", hr); hr = IDirectDrawClipper_SetHWnd(clipper, 0, window); ok(SUCCEEDED(hr), "Failed to set clipper window, hr %#x.\n", hr); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(SUCCEEDED(hr), "Failed to get clip list size, hr %#x.\n", hr); DestroyWindow(window); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr); hr = IDirectDrawClipper_SetHWnd(clipper, 0, NULL); ok(SUCCEEDED(hr), "Failed to set clipper window, hr %#x.\n", hr); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(SUCCEEDED(hr), "Failed to get clip list size, hr %#x.\n", hr); hr = IDirectDrawClipper_SetClipList(clipper, NULL, 0); ok(SUCCEEDED(hr), "Failed to set clip list, hr %#x.\n", hr); hr = IDirectDrawClipper_GetClipList(clipper, NULL, NULL, &ret); ok(hr == DDERR_NOCLIPLIST, "Got unexpected hr %#x.\n", hr); hr = IDirectDrawSurface7_Blt(dst_surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &fx); ok(hr == DDERR_NOCLIPLIST, "Got unexpected hr %#x.\n", hr); IDirectDrawSurface7_Release(dst_surface); IDirectDrawSurface7_Release(src_surface); IDirectDrawClipper_Release(clipper); IDirectDraw7_Release(ddraw); }
static void enumdisplaymodes(void) { DDSURFACEDESC ddsd; HRESULT rc; int count, refresh_count; ZeroMemory(&ddsd, sizeof(DDSURFACEDESC)); ddsd.dwSize = sizeof(DDSURFACEDESC); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; /* Flags parameter is reserved in very old ddraw versions (3 and older?) and must be 0 */ rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback); ok(rc==DD_OK, "EnumDisplayModes returned: %x\n",rc); count = modes16bpp_cnt; modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT; ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 16; U2(ddsd.ddpfPixelFormat).dwRBitMask = 0xf800; U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x07e0; U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x001F; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK, "EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x0000; U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000; U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x0000; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK, "EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; U2(ddsd.ddpfPixelFormat).dwRBitMask = 0xF0F0; U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0F00; U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000F; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK, "EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.ddpfPixelFormat.dwFlags = DDPF_YUV; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.ddpfPixelFormat.dwFlags = DDPF_PALETTEINDEXED8; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT; ddsd.ddpfPixelFormat.dwFlags = 0; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.dwFlags = 0; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_count); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == modes_cnt, "Expected %d modes got %d\n", modes_cnt, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_PITCH; U1(ddsd).lPitch = 123; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == count, "Expected %d modes got %d\n", count, modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_REFRESHRATE; U2(ddsd).dwRefreshRate = 1; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == 0, "Expected 0 modes got %d\n", modes16bpp_cnt); modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT; rc = IDirectDraw_EnumDisplayModes(lpDD, DDEDM_REFRESHRATES, &ddsd, 0, enummodescallback_16bit); if(rc == DDERR_INVALIDPARAMS) { skip("Ddraw version too old. Skipping.\n"); return; } ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); refresh_count = refresh_rate_cnt; if(refresh_rate) { modes16bpp_cnt = 0; ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_REFRESHRATE; U2(ddsd).dwRefreshRate = refresh_rate; rc = IDirectDraw_EnumDisplayModes(lpDD, 0, &ddsd, 0, enummodescallback_16bit); ok(rc==DD_OK,"EnumDisplayModes returned: %x\n",rc); ok(modes16bpp_cnt == refresh_count, "Expected %d modes got %d\n", refresh_count, modes16bpp_cnt); } rc = IDirectDraw_EnumDisplayModes(lpDD, 0, NULL, 0, enummodescallback); ok(rc==DD_OK, "EnumDisplayModes returned: %x\n",rc); }
/* * U2. [Signal and wait.] (The purpose of this step is to call for the elevator; some * special cases arise if the elevator is already on the right floor.) */ void U2(struct user_info * p) { /* xlog_node(p, 'Q'); */ xlog(LOG_U, "U2(). %s (%d->%d).\n", p->name, p->IN, p->OUT); /* If FLOOR == IN and if the elevator's next action is step E6 below * (that is, if the elevator doors are now closing), * send the elevator immediately to its step E3 and cancel its activity E6. * (This means that the doors will open again before the elevator moves.) */ int next_is_E6 = 0; WAIT_NODE * w = current_step->WR; for (; w != &WAIT; w = w->WR) { const char * p = get_func_info(w->inst, GET_FUNC_NAME); xlog(LOG_U, "U2(). traversing - %s.\n", p); if (p[0] == 'E') { if (p[1] == '6') { /* E6 */ next_is_E6 = 1; break; } else { /* E[1-5,7-9] */ assert(!next_is_E6); break; } } else { /* not the elevator's action */ continue; } } if ((p->IN == FLOOR) && next_is_E6) { in_WAIT(TIME, E3, NO_ARG); /** cancel E6. these two lines will work: * w->WL->WR = w->WR; * w->WR->WL = w->WL; * however, to keep uniformity, out_WAIT() is used instead: */ out_WAIT(E6, 0); xlog(LOG_U, "U2(). Doors will open again.\n"); } /* If FLOOR == IN and if D3 != 0, set D3 <-- 0, set D1 to a nonzero value, * and start up the elevator's activity E4 again. (This means that the elevator * doors are open on this floor, but everyone else has already gotten on or * off. Elevator step E4 is a sequencing step that grants people permission to * enter the elevator according to normal laws of courtesy; therefore, restarting * E4 gives this user a chance to get in before the doors close.) */ else if ((p->IN == FLOOR) && (D3 != 0)) { D3 = 0; D1 = 1; in_WAIT(TIME, E4, NO_ARG); } /* In all other * cases, the user sets CALLUP[IN] <-- 1 or CALLDOWN[IN] <-- 1, according as * OUT > IN or OUT < IN; and if D2 == 0 or the elevator is in its ``dormant'' * position E1, the DECISION subroutine specified below is performed. (The * DECISION subroutine is used to take the elevator out of NEUTRAL state at * certain critical times.) */ else { if (p->OUT > p->IN) { CALLUP[p->IN] = 1; xlog(LOG_U, "U2(). %s pressed button UP.\n", p->name); } else if (p->OUT < p->IN) { CALLDOWN[p->IN] = 1; xlog(LOG_U, "U2(). %s pressed button Down.\n", p->name); } else { xlog(LOG_U, "U2(). No elevator is needed since %d==%d. " "%s is stupid.\n", p->IN, p->OUT, p->name); return; } if ((D2 == 0) || (current_elevator_step == 0xE1)) { D(); } } U3(p); }