Changeset 15985 for trunk/psModules/test/objects/tap_pmSource.c
- Timestamp:
- Jan 2, 2008, 10:45:23 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/test/objects/tap_pmSource.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/test/objects/tap_pmSource.c
r15726 r15985 7 7 /* 8 8 Tested: 9 pmSourceAlloc() 10 psMemCheckSource() 11 pmSourceCopy() 12 pmSourceDefinePixels() 13 pmSourceRedefinePixels() 14 pmSourcePSFClump() 15 pmSourceGetModel() 16 Must Test: 17 pmSourceFreePixels() 18 pmSourceTest() 19 pmSourceRoughClass() 20 pmSourceMoments() 21 pmSourceAdd() 22 pmSourceSub() 23 pmSourceAddWithOffset() 24 pmSourceSubWithOffset() 25 pmSourceOp() 26 pmSourceCacheModel() 27 pmSourceCachePSF() 9 Tested 10 pmSourceAlloc() 11 pmSourceCopy() 12 pmSourceDefinePixels() 13 pmSourceRedefinePixels() 14 pmSourcePSFClump() 15 pmSourceGetModel() 16 pmSourceAdd() 17 pmSourceSub() 18 pmSourceAddWithOffset() 19 pmSourceSubWithOffset() 20 pmSourceOp() 21 pmSourceCacheModel() 22 pmSourceCachePSF() 23 pmSourceSortBySN() (COMPILER ERRORS) 24 pmSourceSortByY() (COMPILER ERRORS) 25 Must test 26 pmSourceMoments() 27 pmSourceRoughClass() 28 28 29 */ 29 30 … … 32 33 #define MISC_NAME "META00" 33 34 #define NUM_BIAS_DATA 10 34 #define TEST_NUM_ROWS ( 8+1)35 #define TEST_NUM_COLS ( 8+1)35 #define TEST_NUM_ROWS (4+1) 36 #define TEST_NUM_COLS (4+1) 36 37 #define VERBOSE 0 37 38 #define ERR_TRACE_LEVEL 0 39 #define TEST_FLOATS_EQUAL(X, Y) (abs(X - Y) < 0.01) 38 40 39 41 /****************************************************************************** … … 63 65 psLogSetLevel(PS_LOG_INFO); 64 66 psTraceSetLevel("err", ERR_TRACE_LEVEL); 65 plan_tests(1 );67 plan_tests(128); 66 68 67 69 // ---------------------------------------------------------------------- … … 494 496 psFree(src); 495 497 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 496 }497 498 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 499 } 498 500 499 501 // Call pmSourceGetModel() with acceptable input parameters … … 534 536 ok(false == isPDF, "pmSourceGetModel() set isPDF to FALSE"); 535 537 536 537 538 src->modelPSF = NULL; 538 539 src->modelConv = NULL; … … 558 559 } 559 560 561 562 // call pmSourceOp() with acceptable parameters 563 // We only test with a single Gaussian model, with no residuals or masks. 564 // For completeness, additional tests should be added. 565 // We should also set mode &= PM_MODEL_OP_NOISE to test that the src->weights are added. 566 { 567 psMemId id = psMemGetId(); 568 pmSource *src = pmSourceAlloc(); 569 src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32); 570 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 571 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 572 src->pixels->data.F32[i][j] = 0.0; 573 } 574 } 575 src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE); 576 src->type = PM_SOURCE_TYPE_STAR; 577 src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS")); 578 psF32 *PAR = src->modelPSF->params->data.F32; 579 PAR[PM_PAR_I0] = 5.0; 580 PAR[PM_PAR_XPOS] = 0.0; 581 PAR[PM_PAR_YPOS] = 0.0; 582 PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2); 583 PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2); 584 PAR[PM_PAR_SXX] = 10.0; 585 PAR[PM_PAR_SYY] = 10.0; 586 587 bool rc = pmSourceOp(src, PM_SOURCE_MODE_PSFMODEL, true, 0, 0, 0); 588 ok(rc == true, "pmSourceOp() returned TRUE with acceptable input parameters"); 589 psVector *x = psVectorAlloc(2, PS_TYPE_F32); 590 bool errorFlag = false; 591 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 592 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 593 x->data.F32[0] = (float) j; 594 x->data.F32[1] = (float) i; 595 psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x); 596 psF32 imgF = src->pixels->data.F32[i][j]; 597 if (!TEST_FLOATS_EQUAL(modF, imgF)) { 598 diag("ERROR: src->pixels[%d][%d] is %.2f, should be %.2f", i, j, src->pixels->data.F32[i][j], modF); 599 errorFlag = true; 600 } 601 } 602 } 603 ok(!errorFlag, "pmSourceOp() set the image pixels correctly (PSF function)"); 604 psFree(x); 605 psFree(src); 606 pmModelClassCleanup(); 607 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 608 } 609 610 611 // call pmSourceOp() with acceptable parameters 612 // Test source->modelFlux 613 // We should also set mode &= PM_MODEL_OP_NOISE to test that the src->weights are added. 614 { 615 psMemId id = psMemGetId(); 616 pmSource *src = pmSourceAlloc(); 617 src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32); 618 src->modelFlux = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32); 619 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 620 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 621 src->pixels->data.F32[i][j] = 0.0; 622 src->modelFlux->data.F32[i][j] = (float) (i + j); 623 } 624 } 625 src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE); 626 src->type = PM_SOURCE_TYPE_STAR; 627 src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS")); 628 psF32 *PAR = src->modelPSF->params->data.F32; 629 PAR[PM_PAR_I0] = 1.0; 630 PAR[PM_PAR_XPOS] = 0.0; 631 PAR[PM_PAR_YPOS] = 0.0; 632 PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2); 633 PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2); 634 PAR[PM_PAR_SXX] = 10.0; 635 PAR[PM_PAR_SYY] = 10.0; 636 637 bool rc = pmSourceOp(src, PM_SOURCE_MODE_PSFMODEL, true, 0, 0, 0); 638 ok(rc == true, "pmSourceOp() returned TRUE with acceptable input parameters"); 639 psVector *x = psVectorAlloc(2, PS_TYPE_F32); 640 bool errorFlag = false; 641 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 642 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 643 x->data.F32[0] = (float) j; 644 x->data.F32[1] = (float) i; 645 psF32 modF = src->modelFlux->data.F32[i][j]; 646 psF32 imgF = src->pixels->data.F32[i][j]; 647 if (!TEST_FLOATS_EQUAL(modF, imgF)) { 648 diag("ERROR: src->pixels[%d][%d] is %.2f, should be %.2f", i, j, src->pixels->data.F32[i][j], modF); 649 errorFlag = true; 650 } 651 } 652 } 653 ok(!errorFlag, "pmSourceOp() set the image pixels correctly (src->modelFlux cache image)"); 654 psFree(x); 655 psFree(src); 656 pmModelClassCleanup(); 657 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 658 } 659 660 661 // ---------------------------------------------------------------------- 662 // pmSourceCacheModel() tests 663 // call pmSourceCacheModel() with NULL pmSource input parameter 664 { 665 psMemId id = psMemGetId(); 666 bool rc = pmSourceCacheModel(NULL, 0); 667 ok(rc == false, "pmSourceCacheModel() returned FALSE with NULL pmSource input parameter"); 668 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 669 } 670 671 672 // ---------------------------------------------------------------------- 673 // pmSourceCacheModel() tests 674 // bool pmSourceCacheModel (pmSource *source, psMaskType maskVal) { 675 // call pmSourceCacheModel() with acceptable parameters 676 { 677 psMemId id = psMemGetId(); 678 pmSource *src = pmSourceAlloc(); 679 src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32); 680 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 681 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 682 src->pixels->data.F32[i][j] = 0.0; 683 } 684 } 685 src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE); 686 src->type = PM_SOURCE_TYPE_STAR; 687 src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS")); 688 psF32 *PAR = src->modelPSF->params->data.F32; 689 PAR[PM_PAR_I0] = 1.0; 690 PAR[PM_PAR_XPOS] = 0.0; 691 PAR[PM_PAR_YPOS] = 0.0; 692 PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2); 693 PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2); 694 PAR[PM_PAR_SXX] = 10.0; 695 PAR[PM_PAR_SYY] = 10.0; 696 697 bool rc = pmSourceCacheModel(src, 0); 698 ok(rc == true, "pmSourceCacheModel() returned TRUE with acceptable input parameters"); 699 700 psVector *x = psVectorAlloc(2, PS_TYPE_F32); 701 bool errorFlag = false; 702 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 703 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 704 x->data.F32[0] = (float) j; 705 x->data.F32[1] = (float) i; 706 psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x); 707 psF32 imgF = src->modelFlux->data.F32[i][j]; 708 if (!TEST_FLOATS_EQUAL(modF, imgF)) { 709 diag("ERROR: src->modelFlux[%d][%d] is %.2f, should be %.2f", i, j, src->modelFlux->data.F32[i][j], modF); 710 errorFlag = true; 711 } 712 } 713 } 714 ok(!errorFlag, "pmSourceCacheModel() set the src->modelFlux correctly (PSF function)"); 715 psFree(x); 716 psFree(src); 717 pmModelClassCleanup(); 718 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 719 } 720 721 722 // ---------------------------------------------------------------------- 723 // pmSourceCachePSF() tests 724 // bool pmSourceCachePSF (pmSource *source, psMaskType maskVal) { 725 // call pmSourceCachePSF() with NULL pmSource input parameter 726 { 727 psMemId id = psMemGetId(); 728 bool rc = pmSourceCachePSF(NULL, 0); 729 ok(rc == false, "pmSourceCachePSF() returned FALSE with NULL pmSource input parameter"); 730 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 731 } 732 733 734 // call pmSourceCachePSF() with acceptable parameters 735 { 736 psMemId id = psMemGetId(); 737 pmSource *src = pmSourceAlloc(); 738 src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32); 739 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 740 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 741 src->pixels->data.F32[i][j] = 0.0; 742 } 743 } 744 src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE); 745 src->type = PM_SOURCE_TYPE_STAR; 746 src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS")); 747 psF32 *PAR = src->modelPSF->params->data.F32; 748 PAR[PM_PAR_I0] = 1.0; 749 PAR[PM_PAR_XPOS] = 0.0; 750 PAR[PM_PAR_YPOS] = 0.0; 751 PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2); 752 PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2); 753 PAR[PM_PAR_SXX] = 10.0; 754 PAR[PM_PAR_SYY] = 10.0; 755 756 bool rc = pmSourceCachePSF(src, 0); 757 ok(rc == true, "pmSourceCachePSF() returned TRUE with acceptable input parameters"); 758 759 psVector *x = psVectorAlloc(2, PS_TYPE_F32); 760 bool errorFlag = false; 761 for (int i = 0 ; i < TEST_NUM_ROWS ; i++) { 762 for (int j = 0 ; j < TEST_NUM_COLS ; j++) { 763 x->data.F32[0] = (float) j; 764 x->data.F32[1] = (float) i; 765 psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x); 766 psF32 imgF = src->psfFlux->data.F32[i][j]; 767 if (!TEST_FLOATS_EQUAL(modF, imgF)) { 768 diag("ERROR: src->psfFlux[%d][%d] is %.2f, should be %.2f", i, j, src->psfFlux->data.F32[i][j], modF); 769 errorFlag = true; 770 } 771 } 772 } 773 ok(!errorFlag, "pmSourceCachePSF() set the src->psfFlux correctly (PSF function)"); 774 psFree(x); 775 psFree(src); 776 pmModelClassCleanup(); 777 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 778 } 779 780 781 // ---------------------------------------- 782 // pmSourceSortBySN() tests 783 // int pmSourceSortBySN (const void **a, const void **b) 784 // Call pmSourceSortBySN() with acceptable input parameters. 785 // XXX: We don't test with NULL input parameters since this function has no PS_ASSERTS to protect 786 // against that. 787 /* XXXX: Compiler errors: fix this 788 { 789 psMemId id = psMemGetId(); 790 pmSource *src1 = pmSourceAlloc(); 791 src1->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE); 792 src1->peak->SN = 10.0; 793 pmSource *src2 = pmSourceAlloc(); 794 src2->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE); 795 src2->peak->SN = 20.0; 796 797 int rc = pmSourceSortBySN((const void **) &src1, (const void **) &src2); 798 ok(rc == 1, "pmSourceSortBySN() returned correct result (source1 < source2) (%d)", rc); 799 rc = pmSourceSortBySN((const void **) &src2, (const void **) &src1); 800 ok(rc == -1, "pmSourceSortBySN() returned correct result (source2 < source1) (%d)", rc); 801 rc = pmSourceSortBySN((const void **) &src1, (const void **) &src1); 802 ok(rc == 0, "pmSourceSortBySN() returned correct result (source1 == source2) (%d)", rc); 803 804 psFree(src1); 805 psFree(src2); 806 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 807 } 808 809 810 // ---------------------------------------- 811 // pmSourceSortByY() tests 812 // int pmSourceSortByY (const void **a, const void **b) 813 // Call pmSourceSortByY() with acceptable input parameters. 814 // XXX: We don't test with NULL input parameters since this function has no PS_ASSERTS to protect 815 // against that. 816 { 817 psMemId id = psMemGetId(); 818 pmSource *src1 = pmSourceAlloc(); 819 src1->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE); 820 src1->peak->y = 10.0; 821 pmSource *src2 = pmSourceAlloc(); 822 src2->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE); 823 src2->peak->y = 20.0; 824 825 int rc = pmSourceSortByY((const void **) &src1, (const void **) &src2); 826 ok(rc == -1, "pmSourceSortByY() returned correct result (source1 < source2) (%d)", rc); 827 rc = pmSourceSortByY((const void **) &src2, (const void **) &src1); 828 ok(rc == 1, "pmSourceSortByY() returned correct result (source2 < source1) (%d)", rc); 829 rc = pmSourceSortByY((const void **) &src1, (const void **) &src1); 830 ok(rc == 0, "pmSourceSortByY() returned correct result (source1 == source2) (%d)", rc); 831 832 psFree(src1); 833 psFree(src2); 834 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 835 } 836 */ 837 560 838 }
Note:
See TracChangeset
for help on using the changeset viewer.
