Skip to content

Commit

Permalink
fix unit converter applying incorrect conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
jmaralo committed Apr 13, 2024
1 parent 7f49e56 commit 49c2943
Showing 1 changed file with 67 additions and 37 deletions.
104 changes: 67 additions & 37 deletions backend/pkg/transport/packet/data/converter.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,55 +13,85 @@ type Operation struct {
func newConvertNumeric[N numeric](podConversion, displayConversion ConversionDescriptor) valueConverter {
return func(value Value) Value {
numeric := value.(NumericValue[N])
for _, operation := range append(podConversion, displayConversion...) {
switch operation.Operator {
case "+":
numeric.inner += N(operation.Operand)
case "-":
numeric.inner -= N(operation.Operand)
case "*":
numeric.inner *= N(operation.Operand)
case "/":
numeric.inner /= N(operation.Operand)
}
}
numeric.inner = applyOperations(numeric.inner, podConversion)
numeric.inner = revertOperations(numeric.inner, displayConversion)
return numeric
}
}

func newRevertNumeric[N numeric](podConversion, displayConversion ConversionDescriptor) valueReverter {
return func(value Value) Value {
numeric := value.(NumericValue[N])
for i := len(displayConversion) - 1; i >= 0; i-- {
operation := displayConversion[i]
switch operation.Operator {
case "+":
numeric.inner -= N(operation.Operand)
case "-":
numeric.inner += N(operation.Operand)
case "*":
numeric.inner /= N(operation.Operand)
case "/":
numeric.inner *= N(operation.Operand)
}
numeric.inner = applyOperationsInv(numeric.inner, displayConversion)
numeric.inner = revertOperationsInv(numeric.inner, podConversion)
return numeric
}
}

func applyOperations[N numeric](original N, conversion ConversionDescriptor) N {
for _, operation := range conversion {
switch operation.Operator {
case "+":
original += N(operation.Operand)
case "-":
original -= N(operation.Operand)
case "*":
original *= N(operation.Operand)
case "/":
original /= N(operation.Operand)
}
}
return original
}

for i := len(podConversion) - 1; i >= 0; i-- {
operation := podConversion[i]
switch operation.Operator {
case "+":
numeric.inner -= N(operation.Operand)
case "-":
numeric.inner += N(operation.Operand)
case "*":
numeric.inner /= N(operation.Operand)
case "/":
numeric.inner *= N(operation.Operand)
}
func revertOperations[N numeric](original N, conversion ConversionDescriptor) N {
for _, operation := range conversion {
switch operation.Operator {
case "+":
original -= N(operation.Operand)
case "-":
original += N(operation.Operand)
case "*":
original /= N(operation.Operand)
case "/":
original *= N(operation.Operand)
}
}
return original
}

return numeric
func applyOperationsInv[N numeric](original N, conversion ConversionDescriptor) N {
for i := len(conversion) - 1; i >= 0; i-- {
operation := conversion[i]
switch operation.Operator {
case "+":
original += N(operation.Operand)
case "-":
original -= N(operation.Operand)
case "*":
original *= N(operation.Operand)
case "/":
original /= N(operation.Operand)
}
}
return original
}

func revertOperationsInv[N numeric](original N, conversion ConversionDescriptor) N {
for i := len(conversion) - 1; i >= 0; i-- {
operation := conversion[i]
switch operation.Operator {
case "+":
original -= N(operation.Operand)
case "-":
original += N(operation.Operand)
case "*":
original /= N(operation.Operand)
case "/":
original *= N(operation.Operand)
}
}
return original
}

func convertBoolean(value Value) Value {
Expand Down

0 comments on commit 49c2943

Please sign in to comment.