Skip to content

Commit 49c2943

Browse files
committed
fix unit converter applying incorrect conversion
1 parent 7f49e56 commit 49c2943

1 file changed

Lines changed: 67 additions & 37 deletions

File tree

backend/pkg/transport/packet/data/converter.go

Lines changed: 67 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,55 +13,85 @@ type Operation struct {
1313
func newConvertNumeric[N numeric](podConversion, displayConversion ConversionDescriptor) valueConverter {
1414
return func(value Value) Value {
1515
numeric := value.(NumericValue[N])
16-
for _, operation := range append(podConversion, displayConversion...) {
17-
switch operation.Operator {
18-
case "+":
19-
numeric.inner += N(operation.Operand)
20-
case "-":
21-
numeric.inner -= N(operation.Operand)
22-
case "*":
23-
numeric.inner *= N(operation.Operand)
24-
case "/":
25-
numeric.inner /= N(operation.Operand)
26-
}
27-
}
16+
numeric.inner = applyOperations(numeric.inner, podConversion)
17+
numeric.inner = revertOperations(numeric.inner, displayConversion)
2818
return numeric
2919
}
3020
}
3121

3222
func newRevertNumeric[N numeric](podConversion, displayConversion ConversionDescriptor) valueReverter {
3323
return func(value Value) Value {
3424
numeric := value.(NumericValue[N])
35-
for i := len(displayConversion) - 1; i >= 0; i-- {
36-
operation := displayConversion[i]
37-
switch operation.Operator {
38-
case "+":
39-
numeric.inner -= N(operation.Operand)
40-
case "-":
41-
numeric.inner += N(operation.Operand)
42-
case "*":
43-
numeric.inner /= N(operation.Operand)
44-
case "/":
45-
numeric.inner *= N(operation.Operand)
46-
}
25+
numeric.inner = applyOperationsInv(numeric.inner, displayConversion)
26+
numeric.inner = revertOperationsInv(numeric.inner, podConversion)
27+
return numeric
28+
}
29+
}
30+
31+
func applyOperations[N numeric](original N, conversion ConversionDescriptor) N {
32+
for _, operation := range conversion {
33+
switch operation.Operator {
34+
case "+":
35+
original += N(operation.Operand)
36+
case "-":
37+
original -= N(operation.Operand)
38+
case "*":
39+
original *= N(operation.Operand)
40+
case "/":
41+
original /= N(operation.Operand)
4742
}
43+
}
44+
return original
45+
}
4846

49-
for i := len(podConversion) - 1; i >= 0; i-- {
50-
operation := podConversion[i]
51-
switch operation.Operator {
52-
case "+":
53-
numeric.inner -= N(operation.Operand)
54-
case "-":
55-
numeric.inner += N(operation.Operand)
56-
case "*":
57-
numeric.inner /= N(operation.Operand)
58-
case "/":
59-
numeric.inner *= N(operation.Operand)
60-
}
47+
func revertOperations[N numeric](original N, conversion ConversionDescriptor) N {
48+
for _, operation := range conversion {
49+
switch operation.Operator {
50+
case "+":
51+
original -= N(operation.Operand)
52+
case "-":
53+
original += N(operation.Operand)
54+
case "*":
55+
original /= N(operation.Operand)
56+
case "/":
57+
original *= N(operation.Operand)
6158
}
59+
}
60+
return original
61+
}
6262

63-
return numeric
63+
func applyOperationsInv[N numeric](original N, conversion ConversionDescriptor) N {
64+
for i := len(conversion) - 1; i >= 0; i-- {
65+
operation := conversion[i]
66+
switch operation.Operator {
67+
case "+":
68+
original += N(operation.Operand)
69+
case "-":
70+
original -= N(operation.Operand)
71+
case "*":
72+
original *= N(operation.Operand)
73+
case "/":
74+
original /= N(operation.Operand)
75+
}
76+
}
77+
return original
78+
}
79+
80+
func revertOperationsInv[N numeric](original N, conversion ConversionDescriptor) N {
81+
for i := len(conversion) - 1; i >= 0; i-- {
82+
operation := conversion[i]
83+
switch operation.Operator {
84+
case "+":
85+
original -= N(operation.Operand)
86+
case "-":
87+
original += N(operation.Operand)
88+
case "*":
89+
original /= N(operation.Operand)
90+
case "/":
91+
original *= N(operation.Operand)
92+
}
6493
}
94+
return original
6595
}
6696

6797
func convertBoolean(value Value) Value {

0 commit comments

Comments
 (0)