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_9
|
||||||
import com.sadellie.unitto.data.KEY_DIVIDE
|
import com.sadellie.unitto.data.KEY_DIVIDE
|
||||||
import com.sadellie.unitto.data.KEY_DOT
|
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_LEFT_BRACKET
|
||||||
import com.sadellie.unitto.data.KEY_MINUS
|
import com.sadellie.unitto.data.KEY_MINUS
|
||||||
import com.sadellie.unitto.data.KEY_MULTIPLY
|
import com.sadellie.unitto.data.KEY_MULTIPLY
|
||||||
@ -309,16 +310,18 @@ class MainViewModel @Inject constructor(
|
|||||||
_deleteButtonEnabled.update { true }
|
_deleteButtonEnabled.update { true }
|
||||||
|
|
||||||
when (symbolToAdd) {
|
when (symbolToAdd) {
|
||||||
KEY_PLUS, KEY_DIVIDE, KEY_MULTIPLY -> {
|
KEY_PLUS, KEY_DIVIDE, KEY_MULTIPLY, KEY_EXPONENT -> {
|
||||||
when {
|
when {
|
||||||
// Don't need expressions that start with zero
|
// 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
|
* 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
|
* "50+". We don't add "/' here. User will click "/" second time and the input
|
||||||
* will be "50/".
|
* will be "50/".
|
||||||
*/
|
*/
|
||||||
(lastSecondSymbol in OPERATORS) and (lastSymbol == KEY_MINUS)-> {
|
(lastSecondSymbol in OPERATORS) and (lastSymbol == KEY_MINUS) -> {
|
||||||
deleteDigit()
|
deleteDigit()
|
||||||
}
|
}
|
||||||
// Don't allow multiple operators near each other
|
// Don't allow multiple operators near each other
|
||||||
|
@ -98,10 +98,11 @@ class MainViewModelTest {
|
|||||||
*/
|
*/
|
||||||
`test 0`()
|
`test 0`()
|
||||||
`test digits from 1 to 9`()
|
`test digits from 1 to 9`()
|
||||||
`test plus, divide and multiply operators`()
|
`test plus, divide, multiply and exponent operators`()
|
||||||
`test dot`()
|
`test dot`()
|
||||||
`test minus`()
|
`test minus`()
|
||||||
`test brackets`()
|
`test brackets`()
|
||||||
|
`test square root`()
|
||||||
|
|
||||||
Dispatchers.resetMain()
|
Dispatchers.resetMain()
|
||||||
}
|
}
|
||||||
@ -184,7 +185,7 @@ class MainViewModelTest {
|
|||||||
viewModel.clearInput()
|
viewModel.clearInput()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun `test plus, divide and multiply operators`() {
|
private fun `test plus, divide, multiply and exponent operators`() {
|
||||||
// 0 | +++ | 0
|
// 0 | +++ | 0
|
||||||
viewModel.processInput(KEY_PLUS)
|
viewModel.processInput(KEY_PLUS)
|
||||||
assertEquals("0", viewModel.inputValue.value)
|
assertEquals("0", viewModel.inputValue.value)
|
||||||
@ -222,6 +223,24 @@ class MainViewModelTest {
|
|||||||
assertEquals("1+", viewModel.inputValue.value)
|
assertEquals("1+", viewModel.inputValue.value)
|
||||||
assertEquals("1+", viewModel.mainFlow.value.inputValue)
|
assertEquals("1+", viewModel.mainFlow.value.inputValue)
|
||||||
viewModel.clearInput()
|
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`() {
|
private fun `test dot`() {
|
||||||
@ -303,6 +322,26 @@ class MainViewModelTest {
|
|||||||
assertEquals("√-", viewModel.inputValue.value)
|
assertEquals("√-", viewModel.inputValue.value)
|
||||||
assertEquals("√–", viewModel.mainFlow.value.inputValue)
|
assertEquals("√–", viewModel.mainFlow.value.inputValue)
|
||||||
viewModel.clearInput()
|
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`() {
|
private fun `test brackets`() {
|
||||||
@ -330,6 +369,17 @@ class MainViewModelTest {
|
|||||||
viewModel.processInput(KEY_RIGHT_BRACKET)
|
viewModel.processInput(KEY_RIGHT_BRACKET)
|
||||||
assertEquals("√(10+2)", viewModel.inputValue.value)
|
assertEquals("√(10+2)", viewModel.inputValue.value)
|
||||||
assertEquals("√(10+2)", viewModel.mainFlow.value.inputValue)
|
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
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user