123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- discard """
- exitCode: 0
- outputsub: '''42 is greater than 0'''
- """
- if 42 >= 0:
- echo "42 is greater than 0"
- echo("Output: ",
- 5)
- echo(5 +
- 5)
- # --- Removed code that is supposed to fail here. Not going to test those. ---
- # Single-line comment
- #[
- Multiline comment
- ]#
- when false:
- echo("Commented-out code")
- let decimal = 42
- let hex = 0x42
- let octal = 0o42
- let binary = 0b101010
- let a: int16 = 42
- let b = 42'i8
- let c = 1'f32 # --- Changed names here to avoid clashes ---
- let d = 1.0e19
- let e = false
- let f = true
- let g = 'A'
- let h = '\109'
- let i = '\x79'
- let text = "The book title is \"Nim in Action\""
- let filepath = "C:\\Program Files\\Nim"
- # --- Changed name here to avoid clashes ---
- let filepath1 = r"C:\Program Files\Nim"
- let multiLine = """foo
- bar
- baz
- """
- echo multiLine
- import strutils
- # --- Changed name here to avoid clashes ---
- let multiLine1 = """foo
- bar
- baz
- """
- echo multiLine1.unindent
- doAssert multiLine1.unindent == "foo\nbar\nbaz\n"
- proc fillString(): string =
- result = ""
- echo("Generating string")
- for i in 0 .. 4:
- result.add($i) #<1>
- const count = fillString()
- var
- text1 = "hello"
- number: int = 10
- isTrue = false
- var 火 = "Fire"
- let ogień = true
- var `var` = "Hello"
- echo(`var`)
- proc myProc(name: string): string = "Hello " & name
- discard myProc("Dominik")
- proc bar(): int #<1>
- proc foo(): float = bar().float
- proc bar(): int = foo().int
- proc noReturn() = echo("Hello")
- proc noReturn2(): void = echo("Hello")
- proc noReturn3 = echo("Hello")
- proc message(recipient: string): auto =
- "Hello " & recipient
- doAssert message("Dom") == "Hello Dom"
- proc max(a: int, b: int): int =
- if a > b: a else: b
- doAssert max(5, 10) == 10
- proc max2(a, b: int): int =
- if a > b: a else: b
- proc genHello(name: string, surname = "Doe"): string =
- "Hello " & name & " " & surname
- # -- Leaving these as asserts as that is in the original code, just in case
- # -- somehow in the future `assert` is removed :)
- assert genHello("Peter") == "Hello Peter Doe"
- assert genHello("Peter", "Smith") == "Hello Peter Smith"
- proc genHello2(names: varargs[string]): string =
- result = ""
- for name in names:
- result.add("Hello " & name & "\n")
- doAssert genHello2("John", "Bob") == "Hello John\nHello Bob\n"
- proc getUserCity(firstName, lastName: string): string =
- case firstName
- of "Damien": return "Tokyo"
- of "Alex": return "New York"
- else: return "Unknown"
- proc getUserCity(userID: int): string =
- case userID
- of 1: return "Tokyo"
- of 2: return "New York"
- else: return "Unknown"
- doAssert getUserCity("Damien", "Lundi") == "Tokyo"
- doAssert getUserCity(2) == "New York" # -- Errata here: missing closing "
- import sequtils
- let numbers = @[1, 2, 3, 4, 5, 6]
- let odd = filter(numbers, proc (x: int): bool = x mod 2 != 0)
- doAssert odd == @[1, 3, 5]
- import sequtils, sugar
- let numbers1 = @[1, 2, 3, 4, 5, 6]
- let odd1 = filter(numbers1, (x: int) -> bool => x mod 2 != 0)
- assert odd1 == @[1, 3, 5]
- proc isValid(x: int, validator: proc (x: int): bool) =
- if validator(x): echo(x, " is valid")
- else: echo(x, " is NOT valid")
- import sugar
- proc isValid2(x: int, validator: (x: int) -> bool) =
- if validator(x): echo(x, " is valid")
- else: echo(x, " is NOT valid")
- var list: array[3, int]
- list[0] = 1
- list[1] = 42
- assert list[0] == 1
- assert list[1] == 42
- assert list[2] == 0 #<1>
- echo list.repr #<2>
- # echo list[500]
- var list2: array[-10 .. -9, int]
- list2[-10] = 1
- list2[-9] = 2
- var list3 = ["Hi", "There"]
- var list4 = ["My", "name", "is", "Dominik"]
- for item in list4:
- echo(item)
- for i in list4.low .. list4.high:
- echo(list4[i])
- var list5: seq[int] = @[]
- doAssertRaises(IndexDefect):
- list5[0] = 1
- list5.add(1)
- assert list5[0] == 1
- doAssertRaises(IndexDefect):
- echo list5[42]
- # -- Errata: var list: seq[int]; echo(list[0]). This now creates an exception,
- # -- not a SIGSEGV.
- block:
- var list = newSeq[string](3)
- assert list[0].len == 0
- list[0] = "Foo"
- list[1] = "Bar"
- list[2] = "Baz"
- list.add("Lorem")
- block:
- let list = @[4, 8, 15, 16, 23, 42]
- for i in 0 ..< list.len:
- stdout.write($list[i] & " ")
- var collection: set[int16]
- doAssert collection == {}
- block:
- let collection = {'a', 'x', 'r'}
- doAssert 'a' in collection
- block:
- let collection = {'a', 'T', 'z'}
- let isAllLowerCase = {'A' .. 'Z'} * collection == {}
- doAssert(not isAllLowerCase)
- let age = 10
- if age > 0 and age <= 10:
- echo("You're still a child")
- elif age > 10 and age < 18:
- echo("You're a teenager")
- else:
- echo("You're an adult")
- let variable = "Arthur"
- case variable
- of "Arthur", "Zaphod", "Ford":
- echo("Male")
- of "Marvin":
- echo("Robot")
- of "Trillian":
- echo("Female")
- else:
- echo("Unknown")
- let ageDesc = if age < 18: "Non-Adult" else: "Adult"
- block:
- var i = 0
- while i < 3:
- echo(i)
- i.inc
- block label:
- var i = 0
- while true:
- while i < 5:
- if i > 3: break label
- i.inc
- iterator values(): int =
- var i = 0
- while i < 5:
- yield i
- i.inc
- for value in values():
- echo(value)
- import os
- for filename in walkFiles("*.nim"):
- echo(filename)
- for item in @[1, 2, 3]:
- echo(item)
- for i, value in @[1, 2, 3]: echo("Value at ", i, ": ", value)
- doAssertRaises(IOError):
- proc second() =
- raise newException(IOError, "Somebody set us up the bomb")
- proc first() =
- second()
- first()
- block:
- proc second() =
- raise newException(IOError, "Somebody set us up the bomb")
- proc first() =
- try:
- second()
- except:
- echo("Cannot perform second action because: " &
- getCurrentExceptionMsg())
- first()
- block:
- type
- Person = object
- name: string
- age: int
- var person: Person
- var person1 = Person(name: "Neo", age: 28)
- block:
- type
- PersonObj = object
- name: string
- age: int
- PersonRef = ref PersonObj
- # proc setName(person: PersonObj) =
- # person.name = "George"
- proc setName(person: PersonRef) =
- person.name = "George"
- block:
- type
- Dog = object
- name: string
- Cat = object
- name: string
- let dog: Dog = Dog(name: "Fluffy")
- let cat: Cat = Cat(name: "Fluffy")
- block:
- type
- Dog = tuple
- name: string
- Cat = tuple
- name: string
- let dog: Dog = (name: "Fluffy")
- let cat: Cat = (name: "Fluffy")
- echo(dog == cat)
- block:
- type
- Point = tuple[x, y: int]
- Point2 = (int, int)
- let pos: Point = (x: 100, y: 50)
- doAssert pos == (100, 50)
- let pos1: Point = (x: 100, y: 50)
- let (x, y) = pos1 #<1>
- let (left, _) = pos1
- doAssert x == pos1[0]
- doAssert y == pos1[1]
- doAssert left == x
- block:
- type
- Color = enum
- colRed,
- colGreen,
- colBlue
- let color: Color = colRed
- block:
- type
- Color {.pure.} = enum
- red, green, blue
- let color = Color.red
|