[squeak-dev] The Trunk: KernelTests-nice.270.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon May 12 22:30:02 UTC 2014
Nicolas Cellier uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-nice.270.mcz
==================== Summary ====================
Name: KernelTests-nice.270
Author: nice
Time: 13 May 2014, 12:29:32.57 am
UUID: 6b9c8bc1-8328-4722-9416-461c68aac39a
Ancestors: KernelTests-eem.269
Document the new possibility to specify a ScaledDecimal with implicit scale like 12.34s
Rather than duplicating NumberParsingTest job, document current behavior of (Integer readFrom: stringOrStream) which is far from obvious
For example:
(Fraction readFrom: '4e3') -> 4000 but (Integer readFrom: '4e3') -> 4
(Fraction readFrom: '2r101') -> 5 but (Integer readFrom: '2r101') -> 2
IMO, this should be changed, old behavior is still accessible thru (Integer readFrom: '4e3' base: 10)
Remove other redundant number parsing tests from IntegerTest (a deeper refactoring of number parsing tests would be welcome)
=============== Diff against KernelTests-eem.269 ===============
Item was changed:
----- Method: IntegerTest>>testReadFrom (in category 'tests - instance creation') -----
testReadFrom
"Ensure remaining characters in a stream are not lost when parsing an integer."
+ #(
+ ('12' 12 '')
+ ('-350' -350 '')
+ ('+27' 27 '')
+ ('2r101 embedded radix are not allowed' 2 'r101 embedded radix are not allowed')
+ ('25e3 exponent is ignored' 25 'e3 exponent is ignored')
+ ('25s2 scale is ignored' 25 's2 scale is ignored')
+ ('25. decimal separator is ignored' 25 '. decimal separator is ignored')
+ ('25.30 fraction part is ignored' 25 '.30 fraction part is ignored')
+ ('123r is not a radix specification' 123 'r is not a radix specification')
+ ) do: [:each |
+ [:string :numericValue :expectedRest |
+ | readStream result rest |
+ readStream := string readStream.
+ result := Integer readFrom: readStream.
+ rest := readStream upToEnd.
+ self assert: result isInteger.
+ self assert: result = numericValue.
+ self assert: rest = expectedRest.
+ ] valueWithArguments: each]!
- | rs i s |
- rs := ReadStream on: '123s could be confused with a ScaledDecimal'.
- i := Number readFrom: rs.
- self assert: (i isInteger and: [ i = 123 ]).
- s := rs upToEnd.
- self assert: 's could be confused with a ScaledDecimal' = s.
-
- rs := ReadStream on: '123.s could be confused with a ScaledDecimal'.
- i := Number readFrom: rs.
- self assert: i = 123.0.
- s := rs upToEnd.
- self assert: 's could be confused with a ScaledDecimal' = s
- !
Item was removed:
- ----- Method: IntegerTest>>testStringAsNumber (in category 'tests - instance creation') -----
- testStringAsNumber
- "This covers parsing in Number>>readFrom:
- Trailing decimal points should be ignored."
-
- #(
- ('123' isInteger 123)
- ('-123' isInteger -123)
- ('123.' isFloat 123)
- ('-123.' isFloat -123)
- ('123This is not to be read' isInteger 123)
- ('123s could be confused with a ScaledDecimal' isInteger 123)
- ('123e could be confused with a Float' isInteger 123)) do: [ :each |
- [ :string :typeSelector :numericValue |
- | result |
- result := string asNumber.
- self assert: (result perform: typeSelector).
- self assert: result = numericValue ] valueWithArguments: each ]!
Item was changed:
----- Method: NumberParsingTest>>testIntegerFromString (in category 'tests - Integer') -----
testIntegerFromString
+ "This covers parsing in Number>>readFrom:"
- "This covers parsing in Number>>readFrom:
- Trailing decimal points should be ignored."
#(
+ ('123' 123)
+ ('-123' -123)
+ ('123.' 123.0)
+ ('-123.' -123.0)
+ ('123This is not to be read' 123)
+ ('123s is a ScaledDecimal' 123s0)
+ ('123sin is not a ScaledDecimal, s could be part of message sin' 123)
+ ('123e could be confused with a Float' 123)) do: [ :each |
+ [ :string :numericValue |
- ('123' isInteger 123)
- ('-123' isInteger -123)
- ('123.' isFloat 123)
- ('-123.' isFloat -123)
- ('123This is not to be read' isInteger 123)
- ('123s could be confused with a ScaledDecimal' isInteger 123)
- ('123e could be confused with a Float' isInteger 123)) do: [ :each |
- [ :string :typeSelector :numericValue |
| result |
result := string asNumber.
+ self assert: result = numericValue.
+ self assert: result class = numericValue class] valueWithArguments: each ]
- self assert: (result perform: typeSelector).
- self assert: result = numericValue ] valueWithArguments: each ]
!
Item was changed:
----- Method: NumberParsingTest>>testIntegerReadFrom (in category 'tests - Integer') -----
testIntegerReadFrom
"Ensure remaining characters in a stream are not lost when parsing an integer."
+ #(
+ ('13r96 has a radix specification' 123 ' has a radix specification')
+ ('123r is not a radix specification here' 123 'r is not a radix specification here')
+ ('-123e has no exponent' -123 'e has no exponent')
+ ('-123.e has no exponent' -123.0 'e has no exponent')
+ ('-123e2 has an exponent' -12300 ' has an exponent')
+ ('123This is not to be read' 123 'This is not to be read')
+ ('123s is a ScaledDecimal' 123s0 ' is a ScaledDecimal')
+ ('-123.s is a ScaledDecimal' -123s0 ' is a ScaledDecimal')
+ ('123sin is not a ScaledDecimal, s could be part of message sin' 123 'sin is not a ScaledDecimal, s could be part of message sin')
+ ('123.sin is not a ScaledDecimal, s could be part of message sin' 123.0 'sin is not a ScaledDecimal, s could be part of message sin')
+ ) do: [ :each |
+ [ :string :numericValue :expectedRest |
+ | readStream result rest |
+ readStream := string readStream.
+ result := Number readFrom: readStream.
+ rest := readStream upToEnd.
+ self assert: result = numericValue.
+ self assert: result class = numericValue class.
+ self assert: rest = expectedRest] valueWithArguments: each ]
- | rs i s |
- rs := ReadStream on: '123s could be confused with a ScaledDecimal'.
- i := Number readFrom: rs.
- self assert: (i isInteger and: [ i = 123 ]).
- s := rs upToEnd.
- self assert: 's could be confused with a ScaledDecimal' = s.
- rs := ReadStream on: '123.s could be confused with a ScaledDecimal'.
- i := Number readFrom: rs.
- self assert: i = 123.
- s := rs upToEnd.
- self assert: 's could be confused with a ScaledDecimal' = s.
- rs := ReadStream on: '123sA has unary message sA'.
- i := Number readFrom: rs.
- self assert: (i isInteger and: [ i = 123 ]).
- s := rs upToEnd.
- self assert: 'sA has unary message sA' = s.
- rs := ReadStream on: '123sB has unary message sB'.
- i := Number readFrom: rs.
- self assert: (i isInteger and: [ i = 123 ])..
- s := rs upToEnd.
- self assert: 'sB has unary message sB' = s.
!
Item was changed:
----- Method: SqNumberParserTest>>testFloatReadError (in category 'tests - Float') -----
testFloatReadError
"This covers parsing in Number>>readFrom:"
| rs num |
rs := '1e' readStream.
num := SqNumberParser parse: rs.
self assert: 1 = num.
self assert: rs upToEnd = 'e'.
- rs := '1s' readStream.
- num := SqNumberParser parse: rs.
- self assert: 1 = num.
- self assert: rs upToEnd = 's'.
-
rs := '1.' readStream.
num := SqNumberParser parse: rs.
self assert: 1 = num.
self assert: num isInteger.
self assert: rs upToEnd = '.'.
rs := '' readStream.
self should: [SqNumberParser parse: rs] raise: Error.
rs := 'foo' readStream.
self should: [SqNumberParser parse: rs] raise: Error.
rs := 'radix' readStream.
self should: [SqNumberParser parse: rs] raise: Error.
rs := '.e0' readStream.
self should: [SqNumberParser parse: rs] raise: Error.
rs := '-.e0' readStream.
self should: [SqNumberParser parse: rs] raise: Error.
rs := '--1' readStream.
self should: [SqNumberParser parse: rs] raise: Error.!
Item was changed:
----- Method: SqNumberParserTest>>testIntegerReadFrom (in category 'tests - Integer') -----
testIntegerReadFrom
"Ensure remaining characters in a stream are not lost when parsing an integer."
| rs i s |
- rs := ReadStream on: '123s could be confused with a ScaledDecimal'.
- i := SqNumberParser parse: rs.
- self assert: (i isInteger and: [ i = 123 ]).
- s := rs upToEnd.
- self assert: 's could be confused with a ScaledDecimal' = s.
rs := ReadStream on: '123.s could be confused with a ScaledDecimal'.
i := SqNumberParser parse: rs.
self assert: (i isInteger and: [ i = 123 ]).
s := rs upToEnd.
self assert: '.s could be confused with a ScaledDecimal' = s
!
Item was added:
+ ----- Method: SqNumberParserTest>>testScaledDecimalWithImplicitScale (in category 'tests - ScaledDecimal') -----
+ testScaledDecimalWithImplicitScale
+ "Implicit scale is automatically adjusted to the number of fractional digits specified"
+
+ #(
+ ('123s' 123s0)
+ ('0.5s' 0.5s1)
+ ('1.60s' 1.60s2)
+ ('23.070s' 23.070s3)
+ ) do: [:each |
+ [:string :scaledDecimal |
+ | value |
+ value := SqNumberParser parse: string readStream.
+ self assert: value = scaledDecimal.
+ self assert: value class = scaledDecimal class.
+ self assert: value scale = scaledDecimal scale] valueWithArguments: each]!
More information about the Squeak-dev
mailing list
|