recipe and pattern validation on Biorad imports

This commit is contained in:
Chase Tucker 2024-12-09 13:52:37 -07:00
parent 95763eb69b
commit 0c2a5770a9
4 changed files with 396 additions and 40 deletions

View File

@ -96,6 +96,7 @@ Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_P
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
Declare function Httpclient_Services, PM_Services, Signature_Services, SRP_Array, Math_Services Declare function Httpclient_Services, PM_Services, Signature_Services, SRP_Array, Math_Services
Declare function Tool_Class_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Metrology' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Metrology'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
@ -608,7 +609,6 @@ end service
Service ImportBioRadData(RunData, FileName) Service ImportBioRadData(RunData, FileName)
Machine = 'BioRad' Machine = 'BioRad'
IsProdTest = False$ IsProdTest = False$
ParseArray = '' ParseArray = ''
@ -685,7 +685,6 @@ Service ImportBioRadData(RunData, FileName)
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe) If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
end end
// ------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------
CassNo = RDSRec<RDS_CASS_NO$> CassNo = RDSRec<RDS_CASS_NO$>
WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$) WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
GoSub ParseWorkOrder GoSub ParseWorkOrder
@ -694,6 +693,12 @@ Service ImportBioRadData(RunData, FileName)
RunDataZone = Metrology_Services('FormatZoneKeyID', RunDataZone) ; // 1, 2 RunDataZone = Metrology_Services('FormatZoneKeyID', RunDataZone) ; // 1, 2
RunDataLayer = Metrology_Services('FormatLayerKeyID', RunDataLayer) ; // L1, L2, 2 RunDataLayer = Metrology_Services('FormatLayerKeyID', RunDataLayer) ; // L1, L2, 2
ZoneForValidation = RunDataZone
LayerForValidation = RunDataLayer
If LayerForValidation EQ '' then
LayerForValidation = 'L1'
end
CalculatedZone = Metrology_Services('GetCalculatedZone', RDSKeyID, IsEpiPro, RunDataZone) CalculatedZone = Metrology_Services('GetCalculatedZone', RDSKeyID, IsEpiPro, RunDataZone)
If RunDataZone NE CalculatedZone then If RunDataZone NE CalculatedZone then
Error_Services('Add', 'Entered Zone [' : RunDataZone : '] and calculated Zone [' : CalculatedZone : '] do not match.') Error_Services('Add', 'Entered Zone [' : RunDataZone : '] and calculated Zone [' : CalculatedZone : '] do not match.')
@ -851,28 +856,51 @@ Service ImportBioRadData(RunData, FileName)
SigProfFound = True$ SigProfFound = True$
UnloadSigned = Signature_Services('GetStageSummary', WoMatKey, 'UNLOAD')<2> UnloadSigned = Signature_Services('GetStageSummary', WoMatKey, 'UNLOAD')<2>
IF (Stage EQ 'UNLOAD' AND UnloadSigned EQ True$) OR Stage NE 'UNLOAD' then IF (Stage EQ 'UNLOAD' AND UnloadSigned EQ True$) OR Stage NE 'UNLOAD' then
If WOMatQARec<WO_MAT_QA_RESULT$, Pos> EQ '' OR IsViewerFile then // verify recipe is correct
WOMatQARec<WO_MAT_QA_RESULT$, Pos> = Average WoMatQaRecipe = WOMatQARec<WO_MAT_QA_RECIPE$, Pos>
WOMatQARec<WO_MAT_QA_MIN_RESULT$, Pos> = Oconv(Iconv(Min, 'MD3'), 'MD3') WoMatQaRecipeMatchesScanRecipe = ScanRecipe _EQC WoMatQaRecipe
WOMatQARec<WO_MAT_QA_MAX_RESULT$, Pos> = Oconv(Iconv(Max, 'MD3'), 'MD3') If WoMatQaRecipeMatchesScanRecipe EQ False$ then
SpecMin = WOMatQARec<WO_MAT_QA_MIN$, Pos> ErrMsg = 'Scan recipe [ ' : ScanRecipe : ' ] does not match WoMatQa recipe [ ' : WoMatQaRecipe : ' ] for RDS [ ' : RDSKeyID : ' ] layer [ ' : CalculatedLayer : ' ].'
SpecMax = WOMatQARec<WO_MAT_QA_MAX$, Pos> Error_Services('Add', ErrMsg)
For each DataPoint in RawDataPoints using @FM setting SubValuePos Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
FormatedData = Oconv(Iconv(DataPoint, 'MD3'), 'MD3') end
If NumDataPoints LT 14 then
If ( ( FormatedData LT SpecMin ) OR ( FormatedData GT SpecMax ) and (SubValuePos LT 10) ) then // verify number of points is correct
WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$, Pos> = True$ WoMatQaToolClass = WOMatQARec<WO_MAT_QA_TOOL_CLASS$, Pos>
WoMatQaRecipePattern = WOMatQARec<WO_MAT_QA_RECIPE_PATTERN$, Pos>
NumDataPointsInSpec = Tool_Class_Services('GetNumberOfPointsForPattern', WoMatQaToolClass, WoMatQaRecipePattern)
WoMatQaRecipePatternNumPointsMatchesScanNumDataPoints = NumDataPointsInSpec EQ NumDataPoints
If WoMatQaRecipePatternNumPointsMatchesScanNumDataPoints EQ False$ then
ErrMsg = 'Scan data point count [ ' : NumDataPoints : ' ] does not match WoMatQa recipe pattern data point count [ ' : NumDataPointsInSpec : ' ] for RDS [ ' : RDSKeyID : ' ] layer [ ' : CalculatedLayer : ' ].'
Error_Services('Add', ErrMsg)
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
If (WOMatQARec<WO_MAT_QA_RESULT$, Pos> EQ '' OR IsViewerFile) then
If WoMatQaRecipeMatchesScanRecipe and WoMatQaRecipePatternNumPointsMatchesScanNumDataPoints then
WOMatQARec<WO_MAT_QA_RESULT$, Pos> = Average
WOMatQARec<WO_MAT_QA_MIN_RESULT$, Pos> = Oconv(Iconv(Min, 'MD3'), 'MD3')
WOMatQARec<WO_MAT_QA_MAX_RESULT$, Pos> = Oconv(Iconv(Max, 'MD3'), 'MD3')
SpecMin = WOMatQARec<WO_MAT_QA_MIN$, Pos>
SpecMax = WOMatQARec<WO_MAT_QA_MAX$, Pos>
For each DataPoint in RawDataPoints using @FM setting SubValuePos
FormatedData = Oconv(Iconv(DataPoint, 'MD3'), 'MD3')
If NumDataPoints LT 14 then
If ( ( FormatedData LT SpecMin ) OR ( FormatedData GT SpecMax ) and (SubValuePos LT 10) ) then
WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$, Pos> = True$
end
end else
If ( FormatedData LT SpecMin ) OR ( FormatedData GT SpecMax ) then
WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$, Pos> = True$
end
end end
end else WOMatQARec<WO_MAT_QA_DATA_POINTS$, Pos, SubValuePos> = FormatedData
If ( FormatedData LT SpecMin ) OR ( FormatedData GT SpecMax ) then Next DataPoint
WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$, Pos> = True$ WOMatQARec<WO_MAT_QA_SIG$, Pos> = ''
end WOMatQARec<WO_MAT_QA_SIG_DTM$, Pos> = ''
end Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
WOMatQARec<WO_MAT_QA_DATA_POINTS$, Pos, SubValuePos> = FormatedData end
Next DataPoint
WOMatQARec<WO_MAT_QA_SIG$, Pos> = ''
WOMatQARec<WO_MAT_QA_SIG_DTM$, Pos> = ''
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAID, WOMatQARec, True$, False$, True$)
end else end else
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : UID001 - Data for this metrology test already exists and is not from the metrology viewer.') Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : UID001 - Data for this metrology test already exists and is not from the metrology viewer.')
end end
@ -890,7 +918,36 @@ Service ImportBioRadData(RunData, FileName)
end end
Case Otherwise$ Case Otherwise$
// If not an above case, then the run is a conventional THICK_ONLY RDS metrology test. // If not an above case, then the run is a conventional THICK_ONLY RDS metrology test.
GoSub LoadRunDataToDatabase
RDSLayerKeyID = RDSKeyID : '*' : LayerForValidation
RDSLayerRec = Database_Services('ReadDataRow', 'RDS_LAYER', RDSLayerKeyID)
If Error_Services('NoError') then
RDSTestKeyIDs = RDSLayerRec<RDS_LAYER_RDS_TEST_KEYS$>
// Verify the scan recipe matches the spec recipe
RecipeMatches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', RDSKeyID, LayerForValidation, ScanRecipe, RDSTestKeyIDs, ZoneForValidation)
If RecipeMatches EQ False$ then
ErrMsg = 'Scan recipe [ ' : ScanRecipe : ' ] does not match RDS Test recipe for RDS [ ' : RDSKeyID : ' ] layer [ ' : CalculatedLayer : ' ] zone [ ' : CalculatedZone : ' ].'
Error_Services('Add', ErrMsg)
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
// Verfiy the scan number of points matches the spec number of points
NumPointsMatches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', RDSKeyID, LayerForValidation, NumDataPoints, RDSTestKeyIDs, 'FTIR', ZoneForValidation)
If NumPointsMatches EQ False$ then
ErrMsg = 'Scan data point count [ ' : NumDataPoints : ' ] does not match RDS Test recipe pattern data point count for RDS [ ' : RDSKeyID : ' ] layer [ ' : CalculatedLayer : ' ] zone [ ' : CalculatedZone : ' ].'
Error_Services('Add', ErrMsg)
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
If RecipeMatches and NumPointsMatches then
GoSub LoadRunDataToDatabase
end
end else
ErrMsg = 'RDS Test scan failed for RDS [' : RDSKeyID : '] layer [' : LayerForValidation : '], because unable to get RDS_LAYER record [' : RDSLayerKeyID : ']'
Error_Services('Add', ErrMsg)
Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
End Case End Case
end else end else
Error_Services('Add', 'Data type / Spec not found for Layer [' : RunDataLayer : '].') Error_Services('Add', 'Data type / Spec not found for Layer [' : RunDataLayer : '].')
@ -2416,6 +2473,88 @@ Service GetIQSViolations()
end end
end service end service
Service ScanRecipeMatchesRdsTestSpecThickMrecipe(RdsNo, RecipeLayer, RecipeInScan, RdsTestKeysFromRdsLayer, Zone='')
If Unassigned(RecipeLayer) or RecipeLayer EQ '' then
RecipeLayer = 'L1'
end
MatchFound = False$
ValidArgs = Assigned(RdsNo) and RdsNo NE '' and Assigned(RecipeInScan) and RecipeInScan NE ''
ValidArgs = ValidArgs and Assigned(RdsTestKeysFromRdsLayer) and Dcount(RdsTestKeysFromRdsLayer, @VM) GT 0
If ValidArgs then
For Each RDSTestKeyID in RdsTestKeysFromRdsLayer using @VM setting mkPos
RdsTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RDSTestKeyID)
If Error_Services('NoError') then
RdsTestRdsNo = RdsTestRec<RDS_TEST_RDS_NO$>
If RdsNo EQ RdsTestRdsNo then
RdsTestRecLayer = RdsTestRec<RDS_TEST_LS_ID$>
If RecipeLayer EQ RdsTestRecLayer then
Continue = True$
If Zone NE '' then
RdsTestRecZone = RdsTestRec<RDS_TEST_ZONE$>
If RdsTestRecZone NE Zone then
Continue = False$
end
end
If Continue then
SpecThickMrecipe = RdsTestRec<RDS_TEST_SPEC_THICK_MRECIPE$>
If RecipeInScan _EQC SpecThickMrecipe then
MatchFound = True$
end
end
end
end
end
Until MatchFound
Next RDSTestKeyID
end
Response = MatchFound
end service
Service ScanNumDataPointsMatchesRdsTestSpecThickMPattern(RdsNo, RecipeLayer, ScanNumDataPoints, RdsTestKeysFromRdsLayer, ToolClass, Zone='')
If Unassigned(RecipeLayer) or RecipeLayer EQ '' then
RecipeLayer = 'L1'
end
MatchFound = False$
ValidArgs = Assigned(RdsNo) and RdsNo NE '' and Assigned(ScanNumDataPoints) and Num(ScanNumDataPoints)
ValidArgs = ValidArgs and Assigned(RdsTestKeysFromRdsLayer) and Dcount(RdsTestKeysFromRdsLayer, @VM) GT 0
ValidArgs = ValidArgs and Assigned(ToolClass) and ToolClass NE ''
If ValidArgs then
For Each RDSTestKeyID in RdsTestKeysFromRdsLayer using @VM setting mkPos
RdsTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RDSTestKeyID)
If Error_Services('NoError') then
RdsTestRdsNo = RdsTestRec<RDS_TEST_RDS_NO$>
If RdsNo EQ RdsTestRdsNo then
RdsTestRecLayer = RdsTestRec<RDS_TEST_LS_ID$>
If RecipeLayer EQ RdsTestRecLayer then
Continue = True$
If Zone NE '' then
RdsTestRecZone = RdsTestRec<RDS_TEST_ZONE$>
If RdsTestRecZone NE Zone then
Continue = False$
end
end
If Continue then
SpecPatternName = RdsTestRec<RDS_TEST_SPEC_THICK_MPATTERN$>
SpecNumDataPoints = Tool_Class_Services('GetNumberOfPointsForPattern', ToolClass, SpecPatternName)
If ScanNumDataPoints EQ SpecNumDataPoints then
MatchFound = True$
end
end
end
end
end
Until MatchFound
Next RDSTestKeyID
end
Response = MatchFound
end service
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs // Internal GoSubs
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -2877,3 +3016,4 @@ return

View File

@ -1,9 +1,12 @@
Compile function Test_MetrologyServices(@Test) Compile function Test_MetrologyServices(@Test)
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
Declare function Metrology_Services $Insert LOGICAL
// TODO: Code to run before each test goes here Declare subroutine Metrology_Services, Error_Services
Declare function Metrology_Services, Error_Services
Error_Services('Clear')
GotoTest GotoTest
@ -15,44 +18,164 @@ Return TestResult or 1
// TESTS // TESTS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Test GetCalculatedLayerEpiProWithoutWoIsEpiProOrScannedLayerShouldReturnL2 //-----------------------------------------------------------------------------
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer) // GetCalculatedLayer Tests
//-----------------------------------------------------------------------------
Test GetCalculatedLayerEpiProWithoutWoIsEpiProOrScannedLayerShouldReturnL2
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649130, 'BioRad', 2) CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649130, 'BioRad', 2)
Assert CalculatedLayer equals 2 Assert CalculatedLayer equals 2
end test end test
Test GetCalculatedLayerEpiProShouldReturnL2 Test GetCalculatedLayerEpiProShouldReturnL2
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649130, 'BioRad', 2, 1, 1) CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649130, 'BioRad', 2, 1, 1)
Assert CalculatedLayer equals 2 Assert CalculatedLayer equals 2
end test end test
Test GetCalculatedLayerSingleLayerNonEpiProWithoutWoIsEpiProOrScannedLayerShouldReturnL1 Test GetCalculatedLayerSingleLayerNonEpiProWithoutWoIsEpiProOrScannedLayerShouldReturnL1
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 648685, 'BioRad', '') CalculatedLayer = Metrology_Services('GetCalculatedLayer', 648685, 'BioRad', '')
Assert CalculatedLayer equals 'L1' Assert CalculatedLayer equals 'L1'
end test end test
Test GetCalculatedLayerSingleLayerNonEpiProShouldReturnL1 Test GetCalculatedLayerSingleLayerNonEpiProShouldReturnL1
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 648685, 'BioRad', '', 0, 1) CalculatedLayer = Metrology_Services('GetCalculatedLayer', 648685, 'BioRad', '', 0, 1)
Assert CalculatedLayer equals 'L1' Assert CalculatedLayer equals 'L1'
end test end test
Test GetCalculatedLayerMultiLayerNonEpiProWithoutWoIsEpiProOrScannedLayerShouldReturn2 Test GetCalculatedLayerMultiLayerNonEpiProWithoutWoIsEpiProOrScannedLayerShouldReturn2
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649834, 'BioRad', '') CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649834, 'BioRad', '')
Assert CalculatedLayer equals 2 Assert CalculatedLayer equals 2
end test end test
Test GetCalculatedLayerMultiLayerNonEpiProShouldReturnL1 Test GetCalculatedLayerMultiLayerNonEpiProShouldReturnL1
// GetCalculatedLayer(RDSKeyID, Machine, RunDataZone, WoIsEpiPro, ScannedLayer)
CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649834, 'BioRad', '', 0, 'L1') CalculatedLayer = Metrology_Services('GetCalculatedLayer', 649834, 'BioRad', '', 0, 'L1')
Assert CalculatedLayer equals 'L1' Assert CalculatedLayer equals 'L1'
end test end test
//-----------------------------------------------------------------------------
// ScanRecipeMatchesRdsTestSpecThickMrecipe Tests
//-----------------------------------------------------------------------------
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithEmptyRdsNoShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '', 'peach', 'mango', 'banana':@VM:'apple')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithEmptyRecipeLayerShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', 'peach', '', 'mango', 'banana':@VM:'apple')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithEmptyScanRecipeShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', 'peach', 'mango', '', 'banana':@VM:'apple')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithEmptyRdsTestKeysShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', 'peach', 'apple', 'banana', '')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithWrongRdsNoShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', 'peach', 'L2', 'Thin8inch', '1722576')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithWrongLayerShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650214', 'L2', 'Thin8inch', '1722576')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithWrongRecipeShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650214', 'L1', 'banana', '1722576')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithWrongRdsTestKeysShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650214', 'L1', 'Thin8inch', '1722578')
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeWithCorrectArgsShouldReturnTrue
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650214', 'L1', 'Thin8inch', '1722576')
Assert Matches equals True$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeEpiProWithWrongZoneShouldReturnFalse
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650028', '2', '6inTHICK', '1722253':@VM:'1722259', 4)
Assert Matches equals False$
end test
Test ScanRecipeMatchesRdsTestSpecThickMrecipeEpiProWithCorrectArgsShouldReturnTrue
Matches = Metrology_Services('ScanRecipeMatchesRdsTestSpecThickMrecipe', '650028', '2', '6inTHICK', '1722253':@VM:'1722259', 2)
Assert Matches equals True$
end test
//-----------------------------------------------------------------------------
// ScanNumDataPointsMatchesRdsTestSpecThickMPattern Tests
//-----------------------------------------------------------------------------
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithEmptyRdsNoShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '', 'peach', 5, 'banana':@VM:'apple', 'mango')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithEmptyRecipeLayerShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', 'peach', '', 5, 'banana':@VM:'apple', 'mango')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithStringScanNumDataPointsShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', 'peach', 'mango', 'potato', 'banana':@VM:'apple', 'pineapple')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithEmptyRdsTestKeysShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', 'peach', 'apple', 5, '', 'banana')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithEmptyToolClassShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', 'peach', 'apple', 5, 'banana':@VM:'apple', '')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithWrongRdsNoShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', 'peach', 'L2', 10, '1722576', 'FTIR')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithWrongLayerShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650214', 'L2', 10, '1722576', 'FTIR')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithWrongScanNumDataPointsShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650214', 'L1', 5, '1722576', 'FTIR')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithWrongRdsTestKeysShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650214', 'L1', 10, '1722578', 'FTIR')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithWrongToolClassShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650214', 'L1', 10, '1722576', 'banana')
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternWithCorrectArgsShouldReturnTrue
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650214', 'L1', 10, '1722576', 'FTIR')
Assert Matches equals True$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternEpiProWithWrongZoneShouldReturnFalse
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650028', '2', 9, '1722253':@VM:'1722259', 'FTIR', 4)
Assert Matches equals False$
end test
Test ScanNumDataPointsMatchesRdsTestSpecThickMPatternEpiProWithCorrectArgsShouldReturnTrue
Matches = Metrology_Services('ScanNumDataPointsMatchesRdsTestSpecThickMPattern', '650028', '2', 9, '1722253':@VM:'1722259', 'FTIR', 2)
Assert Matches equals True$
end test

View File

@ -0,0 +1,43 @@
Compile function Test_Tool_Class_Services(@Test)
#pragma precomp SRP_PreCompiler
$Insert LOGICAL
Declare function Tool_Class_Services, Error_Services
Declare subroutine Tool_Class_Services, Error_Services
Error_Services('Clear')
GotoTest
Return TestResult or 1
//-----------------------------------------------------------------------------
// TESTS
//-----------------------------------------------------------------------------
Test GetNumberOfPointsForPatternWithEmptyToolClassShouldThrowError
Tool_Class_Services('GetNumberOfPointsForPattern', '' , 'super cool pattern')
Assert Error_Services('HasError') equals True$
End Test
Test GetNumberOfPointsForPatternWithEmptyPatternNameShouldThrowError
Tool_Class_Services('GetNumberOfPointsForPattern', 'best tool class ever' , '')
Assert Error_Services('HasError') equals True$
End Test
Test GetNumberOfPointsForPatternWithInvalidToolClassShouldThrowError
Tool_Class_Services('GetNumberOfPointsForPattern', 'bestToolClassEver' , '10PT_5mm')
Assert Error_Services('HasError') equals True$
End Test
Test GetNumberOfPointsForPatternWithInvalidPatternNameShouldThrowError
Tool_Class_Services('GetNumberOfPointsForPattern', 'FTIR' , 'superCoolPattern')
Assert Error_Services('HasError') equals True$
End Test
Test GetNumberOfPointsForPatternWithValidArgsShouldReturnCorrectNumberOfPoints
ExpectedNumberOfPoints = 10
ActualNumberOfPoints = Tool_Class_Services('GetNumberOfPointsForPattern', 'FTIR' , '10PT_5mm')
Assert ActualNumberOfPoints equals ExpectedNumberOfPoints
End Test

View File

@ -0,0 +1,50 @@
Compile function Tool_Class_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler
$insert LOGICAL
$Insert SERVICE_SETUP
$Insert TOOL_CLASS_EQUATES
Declare subroutine Error_Services
Declare function Error_Services, Database_Services
GoToService
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service GetNumberOfPointsForPattern(ToolClass, PatternName)
If Unassigned(ToolClass) or ToolClass EQ '' then
Error_Services('Add', 'invalid tool class')
end
If Error_Services('NoError') then
If Unassigned(PatternName) or PatternName EQ '' then
Error_Services('Add', 'invalid pattern name')
end
end
If Error_Services('NoError') then
ToolClassRecord = Database_Services('ReadDataRow', 'TOOL_CLASS', ToolClass)
If Error_Services('HasError') then
Error_Services('Add', 'tool class record not found')
end
If Error_Services('NoError') then
Locate PatternName in ToolClassRecord<TOOL_CLASS_PATTERN$> using @VM Setting idx then
Response = ToolClassRecord<TOOL_CLASS_PATTERN_SIZE$, idx>
end
NumberOfPatterns = DCount(ToolClassRecord<TOOL_CLASS_PATTERN$>, @VM)
If idx GT NumberOfPatterns then
Error_Services('Add', 'pattern name not found')
end
PatternSizeCount = DCount(ToolClassRecord<TOOL_CLASS_PATTERN_SIZE$>, @VM)
If idx GT PatternSizeCount then
Error_Services('Add', 'number of points not found')
end
end
end
End Service