-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathScript_Teste.sql
More file actions
96 lines (85 loc) · 4.22 KB
/
Script_Teste.sql
File metadata and controls
96 lines (85 loc) · 4.22 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
DECLARE
vresultado VARCHAR2(200);
vtotal INT := 0;
vok INT := 0;
PROCEDURE testar(p_descricao IN VARCHAR2, p_entrada IN VARCHAR2, p_esperado IN VARCHAR2) IS
BEGIN
vtotal := vtotal + 1;
vresultado := pkg_util.foneticabr(str1 => p_entrada);
IF vresultado = p_esperado THEN
vok := vok + 1;
DBMS_OUTPUT.put_line('OK [' || p_descricao || '] ' || p_entrada || ' => ' || vresultado);
ELSE
DBMS_OUTPUT.put_line('FALHA[' || p_descricao || '] ' || p_entrada || ' => ' || vresultado || ' (esperado: ' || p_esperado || ')');
END IF;
END;
BEGIN
DBMS_OUTPUT.put_line('=== TESTES BASICOS ===');
testar('basico', 'JOAO DA SILVA E OLIVEIRA', 'JO DA SIRVA E ORIVEIRA');
testar('acento-a', 'JOSE', 'JOSE');
testar('duplicata', 'ANNA', 'ANA');
DBMS_OUTPUT.put_line('');
DBMS_OUTPUT.put_line('=== REGRAS ORIGINAIS ===');
testar('LH->L', 'FILHO', 'FIRO');
testar('NH->N (fix)', 'NINHO', 'NINO');
testar('NG->G (fix)', 'ANGOLA', 'AGORA');
testar('Z->S (fix)', 'FAZENDA', 'FASEMDA');
testar('PH->F', 'PHELIPE', 'FERIPE');
testar('W->U', 'WILSON', 'UIRSO');
testar('Y->I', 'YURI', 'IURI');
testar('CH->S', 'CHAVE', 'SAVE');
testar('GE->J', 'GENTE', 'JEMTE');
testar('CE->S', 'CESAR', 'SESA');
DBMS_OUTPUT.put_line('');
DBMS_OUTPUT.put_line('=== NOVAS REGRAS (fontes: BuscaBR / Metaphone-ptBR) ===');
-- QUE/QUI: U silencioso antes de E/I após Q (dígrafo)
-- Fonte: ortografia portuguesa - QU antes de E/I o U não é pronunciado
testar('QUE->KE', 'QUEIJO', 'KEIO');
testar('QUI->KI', 'QUILOMBO', 'KIROMBO');
testar('QUE->KE (meio)', 'ESQUEMA', 'ESKEMA');
-- SCE/SCI: SC antes de E/I tem som de S simples (o C é silencioso)
-- Fonte: dígrafos do português - "nascer" soa como "naser"
testar('SCE->SE', 'NASCER', 'NASE');
testar('SCI->SI', 'DESCIDA', 'DESIDA');
testar('SCE->SE (exc)', 'EXCEPCIONAL', 'ESEOSIONAR');
-- TH: regra para palavras históricas e estrangeiras
-- Fonte: BuscaBR / Metaphone-ptBR - TH tem som de T em português
testar('TH->T', 'THEATRO', 'TEATRO');
testar('TH->T (nome)', 'THOMAS', 'TOMA');
-- RM: corrigido de RM->SM para RM->M (padrão BuscaBR)
-- Fonte: BuscaBR - RM tem som nasal M em português brasileiro
testar('RM->M (fix)', 'ARMANDO', 'AMADO');
testar('RM->M (nome)', 'HERMANO', 'ERMANO');
-- SM: novo dígrafo SM->M (padrão BuscaBR)
-- Fonte: BuscaBR - SM reduz ao som nasal M
testar('SM->M', 'ESMERALDA', 'EMERARDA');
DBMS_OUTPUT.put_line('');
DBMS_OUTPUT.put_line('=== EQUIVALENCIAS FONETICAS (busca fuzzy) ===');
-- Nomes que devem produzir o mesmo código fonético
DECLARE
v1 VARCHAR2(200);
v2 VARCHAR2(200);
PROCEDURE comparar(p_nome1 IN VARCHAR2, p_nome2 IN VARCHAR2) IS
BEGIN
vtotal := vtotal + 1;
v1 := pkg_util.foneticabr(p_nome1);
v2 := pkg_util.foneticabr(p_nome2);
IF v1 = v2 THEN
vok := vok + 1;
DBMS_OUTPUT.put_line('OK ' || p_nome1 || ' ~ ' || p_nome2 || ' => ' || v1);
ELSE
DBMS_OUTPUT.put_line('DIFS ' || p_nome1 || '(' || v1 || ') # ' || p_nome2 || '(' || v2 || ')');
END IF;
END;
BEGIN
comparar('RAFAEL', 'RAPHAEL'); -- PH=F
comparar('WALTER', 'VALTER'); -- W=V (BuscaBR) vs U (FoneticaBR)
comparar('QUEIJO', 'KEIJO'); -- QUE=KE
comparar('CECILIA', 'SESILIA'); -- CE=S, CI=S
comparar('GONZAGA', 'GONSAGA'); -- Z=S
comparar('CHRISTIANO','CRISTIANO'); -- CHR=KR
comparar('THIAGO', 'TIAGO'); -- TH=T
END;
DBMS_OUTPUT.put_line('');
DBMS_OUTPUT.put_line('=== RESULTADO: ' || vok || '/' || vtotal || ' testes OK ===');
END;