mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 00:35:26 +02:00
Improved support for exponent and square root in input processing
This commit is contained in:
parent
7d2917d942
commit
ffd4284f55
@ -40,6 +40,7 @@ import com.sadellie.unitto.data.KEY_8
|
||||
import com.sadellie.unitto.data.KEY_9
|
||||
import com.sadellie.unitto.data.KEY_DIVIDE
|
||||
import com.sadellie.unitto.data.KEY_DOT
|
||||
import com.sadellie.unitto.data.KEY_EXPONENT
|
||||
import com.sadellie.unitto.data.KEY_LEFT_BRACKET
|
||||
import com.sadellie.unitto.data.KEY_MINUS
|
||||
import com.sadellie.unitto.data.KEY_MULTIPLY
|
||||
@ -309,16 +310,18 @@ class MainViewModel @Inject constructor(
|
||||
_deleteButtonEnabled.update { true }
|
||||
|
||||
when (symbolToAdd) {
|
||||
KEY_PLUS, KEY_DIVIDE, KEY_MULTIPLY -> {
|
||||
KEY_PLUS, KEY_DIVIDE, KEY_MULTIPLY, KEY_EXPONENT -> {
|
||||
when {
|
||||
// Don't need expressions that start with zero
|
||||
(inputValue.value == KEY_0) or (inputValue.value == KEY_MINUS) -> {}
|
||||
(inputValue.value == KEY_0) -> {}
|
||||
(inputValue.value == KEY_MINUS) -> {}
|
||||
(lastSymbol == KEY_SQRT) -> {}
|
||||
/**
|
||||
* For situations like "50+-", when user clicks "/" we delete "-" so it becomes
|
||||
* "50+". We don't add "/' here. User will click "/" second time and the input
|
||||
* will be "50/".
|
||||
*/
|
||||
(lastSecondSymbol in OPERATORS) and (lastSymbol == KEY_MINUS)-> {
|
||||
(lastSecondSymbol in OPERATORS) and (lastSymbol == KEY_MINUS) -> {
|
||||
deleteDigit()
|
||||
}
|
||||
// Don't allow multiple operators near each other
|
||||
|
@ -98,10 +98,11 @@ class MainViewModelTest {
|
||||
*/
|
||||
`test 0`()
|
||||
`test digits from 1 to 9`()
|
||||
`test plus, divide and multiply operators`()
|
||||
`test plus, divide, multiply and exponent operators`()
|
||||
`test dot`()
|
||||
`test minus`()
|
||||
`test brackets`()
|
||||
`test square root`()
|
||||
|
||||
Dispatchers.resetMain()
|
||||
}
|
||||
@ -184,7 +185,7 @@ class MainViewModelTest {
|
||||
viewModel.clearInput()
|
||||
}
|
||||
|
||||
private fun `test plus, divide and multiply operators`() {
|
||||
private fun `test plus, divide, multiply and exponent operators`() {
|
||||
// 0 | +++ | 0
|
||||
viewModel.processInput(KEY_PLUS)
|
||||
assertEquals("0", viewModel.inputValue.value)
|
||||
@ -222,6 +223,24 @@ class MainViewModelTest {
|
||||
assertEquals("1+", viewModel.inputValue.value)
|
||||
assertEquals("1+", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
|
||||
// 0 | ^^^ | 0
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
assertEquals("0", viewModel.inputValue.value)
|
||||
assertEquals("0", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
|
||||
// 12 | ^^^ | 12^
|
||||
viewModel.processInput(KEY_1)
|
||||
viewModel.processInput(KEY_2)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
assertEquals("12^", viewModel.inputValue.value)
|
||||
assertEquals("12^", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
}
|
||||
|
||||
private fun `test dot`() {
|
||||
@ -303,6 +322,26 @@ class MainViewModelTest {
|
||||
assertEquals("√-", viewModel.inputValue.value)
|
||||
assertEquals("√–", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
|
||||
// √ | /// | √
|
||||
viewModel.processInput(KEY_SQRT)
|
||||
viewModel.processInput(KEY_DIVIDE)
|
||||
viewModel.processInput(KEY_DIVIDE)
|
||||
viewModel.processInput(KEY_DIVIDE)
|
||||
assertEquals("√", viewModel.inputValue.value)
|
||||
assertEquals("√", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
|
||||
// 12^- | --- | 12^-
|
||||
viewModel.processInput(KEY_1)
|
||||
viewModel.processInput(KEY_2)
|
||||
viewModel.processInput(KEY_EXPONENT)
|
||||
viewModel.processInput(KEY_MINUS)
|
||||
viewModel.processInput(KEY_MINUS)
|
||||
viewModel.processInput(KEY_MINUS)
|
||||
assertEquals("12^-", viewModel.inputValue.value)
|
||||
assertEquals("12^–", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
}
|
||||
|
||||
private fun `test brackets`() {
|
||||
@ -330,6 +369,17 @@ class MainViewModelTest {
|
||||
viewModel.processInput(KEY_RIGHT_BRACKET)
|
||||
assertEquals("√(10+2)", viewModel.inputValue.value)
|
||||
assertEquals("√(10+2)", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
}
|
||||
|
||||
private fun `test square root`() {
|
||||
// 0 | √√√ | √√√
|
||||
viewModel.processInput(KEY_SQRT)
|
||||
viewModel.processInput(KEY_SQRT)
|
||||
viewModel.processInput(KEY_SQRT)
|
||||
assertEquals("√√√", viewModel.inputValue.value)
|
||||
assertEquals("√√√", viewModel.mainFlow.value.inputValue)
|
||||
viewModel.clearInput()
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user