| 2550 | |
| 2551 | template <typename T, int NDimension> |
| 2552 | int SolveLinearSystem() |
| 2553 | { |
| 2554 | int status = 0; |
| 2555 | |
| 2556 | for (int n = 0; n < 100; ++n) |
| 2557 | { |
| 2558 | // Generate a Random Matrix |
| 2559 | T** mat = new T*[NDimension]; |
| 2560 | T* lhs = new T[NDimension]; |
| 2561 | T* rhs = new T[NDimension]; |
| 2562 | |
| 2563 | for (int i = 0; i < NDimension; ++i) |
| 2564 | { |
| 2565 | mat[i] = new T[NDimension]; |
| 2566 | lhs[i] = vtkMath::Random(-1.0, 1.0); |
| 2567 | for (int j = 0; j < NDimension; ++j) |
| 2568 | { |
| 2569 | *(mat[i] + j) = vtkMath::Random(-1.0, 1.0); |
| 2570 | } |
| 2571 | } |
| 2572 | |
| 2573 | for (int i = 0; i < NDimension; ++i) |
| 2574 | { |
| 2575 | rhs[i] = 0.0; |
| 2576 | for (int j = 0; j < NDimension; ++j) |
| 2577 | { |
| 2578 | rhs[i] += (*(mat[i] + j) * lhs[j]); |
| 2579 | } |
| 2580 | } |
| 2581 | vtkMath::SolveLinearSystem(mat, rhs, NDimension); |
| 2582 | |
| 2583 | for (int i = 0; i < NDimension; ++i) |
| 2584 | { |
| 2585 | if (!vtkMathUtilities::FuzzyCompare( |
| 2586 | lhs[i], rhs[i], std::numeric_limits<double>::epsilon() * 32768.0)) |
| 2587 | { |
| 2588 | std::cout << " SolveLinearSystem(double) expected " << lhs[i] << " but got " << rhs[i]; |
| 2589 | std::cout << " eps ratio is: " << (lhs[i] - rhs[i]) / std::numeric_limits<T>::epsilon() |
| 2590 | << std::endl; |
| 2591 | ++status; |
| 2592 | } |
| 2593 | } |
| 2594 | |
| 2595 | if (NDimension == 1 || NDimension == 2) |
| 2596 | { |
| 2597 | for (int i = 0; i < NDimension; ++i) |
| 2598 | { |
| 2599 | for (int j = 0; j < NDimension; ++j) |
| 2600 | { |
| 2601 | *(mat[i] + j) = 0.0; |
| 2602 | } |
| 2603 | } |
| 2604 | if (vtkMath::SolveLinearSystem(mat, rhs, NDimension) != 0.0) |
| 2605 | { |
| 2606 | std::cout << " SolveLinearSystem for a zero matrix expected " << 0 << " but got 1"; |
| 2607 | ++status; |
| 2608 | } |
| 2609 | } |
no test coverage detected