FunSig.k 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. invoke {
  2. function f (x: Int) -> Int {
  3. return x + 1
  4. }
  5. function f (x: String) -> String {
  6. return x + '1'
  7. }
  8. class F {
  9. init (x: String) {
  10. do nothing
  11. }
  12. create (x: Int) {
  13. return F(str(x))
  14. }
  15. }
  16. assert f is $<Int><Int>
  17. assert f is $<String><String>
  18. assert F is $<Int><?>
  19. assert F is $<String><?>
  20. assert lambda{} is $<><Any>
  21. assert lambda(x){} is $<Any><Any>
  22. assert lambda(x){} is not $<><Any>
  23. assert lambda(x){} is not $<Int><Any>
  24. assert lambda(x){} is not $<Any><Int>
  25. assert lambda(x){} is not $<Any,Any><Any>
  26. assert lambda(x,y){} is $<Any,Any><Any>
  27. assert lambda {} is $<><?>
  28. assert lambda {} is not $<?><?>
  29. assert lambda()->Int { return 1 } is $<><?>
  30. assert lambda(x: Int)->Int { return x } is $<?><?>
  31. assert lambda(x: Int)->Int { return x } is not $<?,?><?>
  32. assert lambda(x: String, y: Int)->Int { return y } is $<?,Int><?>
  33. assert lambda()->Int { return 1 } is $<><Int>
  34. assert lambda(x:Int)->Int { return x } is $<Int><Int>
  35. assert lambda(x:Int, y:String)->Int { return x } is $<Int,String><Int>
  36. assert lambda(x:Maybe<Int>) { return x } is $<Maybe<Int>><Any>
  37. assert lambda(x:Maybe<Int>, y: Int) -> Void {} is $<Maybe<Int>, Int><Void>
  38. assert $<><Any> ~~ $<><Any>
  39. assert $<><Any> <=> $<><Any>
  40. assert $<Any><Any> !~ $<><Any>
  41. assert $<><?> ~~ $<><?>
  42. assert $<?,Int><Int> ~~ $<?,Int><Int>
  43. assert $<><?> !~ $<><Any>
  44. assert $<Any><Any> <!=> $<><Any>
  45. assert $<Int><Any> !~ $<Any><Any>
  46. assert $<Int><Any> !~ $<Int><Int>
  47. assert $<Any><Int> !~ $<?><Int>
  48. assert $<Int,Int><Int> ~~ $<Int,Int><Int>
  49. assert $<Maybe<Int>,Int><Int> ~~ $<Maybe<Int>,Int><Int>
  50. assert $<(Int|String)><Int> ~~ $<(String|Int)><(Int&Int)>
  51. }