165 lines
2.3 KiB
Go
165 lines
2.3 KiB
Go
package analyzer
|
|
|
|
import "testing"
|
|
|
|
func TestTypedefUniqueErr (test *testing.T) {
|
|
testStringErr (test,
|
|
"Hello already declared at stream0.fspl:2:1", 3, 1,
|
|
`
|
|
Hello: *Int
|
|
Hello: (x:Int y:Int)
|
|
`)
|
|
}
|
|
|
|
func TestTypedefUniqueErrShadowPrimitive (test *testing.T) {
|
|
testStringErr (test,
|
|
"cannot shadow primitive U8", 2, 1,
|
|
`
|
|
U8: Int
|
|
`)
|
|
}
|
|
|
|
func TestTypedefUniqueErrShadowBuiltin (test *testing.T) {
|
|
testStringErr (test,
|
|
"cannot shadow builtin String", 2, 1,
|
|
`
|
|
String: Int
|
|
`)
|
|
}
|
|
|
|
func TestTypedefUnique (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Hello: *Int
|
|
World: (x:Int y:Int)
|
|
`)
|
|
}
|
|
|
|
func TestTypedefRecursiveErr (test *testing.T) {
|
|
testStringErr (test,
|
|
"type List cannot be used in this context", 4, 9,
|
|
`
|
|
List: (
|
|
value: Int
|
|
next: List)
|
|
`)
|
|
}
|
|
|
|
func TestTypedefRecursive (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
List: (
|
|
value: Int
|
|
next: *List)
|
|
`)
|
|
}
|
|
|
|
func TestTypeNamedErrMissing (test *testing.T) {
|
|
testStringErr (test,
|
|
"no type named Missing", 2, 10,
|
|
`
|
|
Present: Missing
|
|
`)
|
|
}
|
|
|
|
func TestTypeNamed (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Example: Int
|
|
AllBuiltin: (
|
|
int: Int
|
|
uint: UInt
|
|
byte: Byte
|
|
rune: Rune
|
|
string: String
|
|
i8: I8
|
|
i16: I16
|
|
i32: I32
|
|
i64: I64
|
|
u8: U8
|
|
u16: U16
|
|
u32: U32
|
|
u64: U64
|
|
f32: F32
|
|
f64: F64
|
|
bool: Bool)
|
|
[main] = {
|
|
example:Example
|
|
allBuiltin:AllBuiltin
|
|
}
|
|
`)
|
|
}
|
|
|
|
func TestTypePointer (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Ptr: *Int
|
|
PtrPtr: **Int
|
|
PtrPtrPtr: *PtrPtr
|
|
ArrPtr: *5:Int
|
|
SlicePtr: **:Int
|
|
`)
|
|
}
|
|
|
|
func TestTypeSlice (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Slice: *:Int
|
|
RaggedSlice: *:*:Int
|
|
`)
|
|
}
|
|
|
|
func TestTypeArrayErrSizeZero (test *testing.T) {
|
|
testStringErr (test,
|
|
"array length must be > 0", 2, 8,
|
|
`
|
|
Array: 0:Int
|
|
`)
|
|
}
|
|
|
|
func TestTypeArray (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Array: 5:Int
|
|
Matrix: 5:6:Int
|
|
`)
|
|
}
|
|
|
|
func TestTypeStructMemberUniqueErr (test *testing.T) {
|
|
testStringErr (test,
|
|
"x already listed in struct at stream0.fspl:3:2", 6, 2,
|
|
`
|
|
Bird: (
|
|
x:Int
|
|
y:Int
|
|
z:Int
|
|
x:U8)
|
|
`)
|
|
}
|
|
|
|
func TestTypeStructMemberUnique (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Bird: (
|
|
x:Int
|
|
y:Int
|
|
z:Int
|
|
a:U8)
|
|
`)
|
|
}
|
|
|
|
func TestTypeInterfaceBehaviorUniqueErr (test *testing.T) {
|
|
testStringErr (test,
|
|
"fly already listed in interface at stream0.fspl:2:8", 2, 14,
|
|
`
|
|
Bird: ([fly] [fly])
|
|
`)
|
|
}
|
|
|
|
func TestTypeInterfaceBehaviorUnique (test *testing.T) {
|
|
testString (test,
|
|
`
|
|
Bird: ([fly] [land])
|
|
`)
|
|
}
|