about summary refs log tree commit diff stats
path: root/tutorial/task10-hint2.mu
blob: 97ccfc51332d58d40a0b1e3b5f1fd95545664029 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
fn to-km miles: float -> _/xmm1: float {
  var result/xmm1: float <- copy miles
  # fill in the blanks to compute miles * 1.609
  # 1.609 = 1609 / 1000 (use function `rational`)
  # 1609 = 0x649 in hex
  # 1000 = 0x3e8 in hex

  return result
}

fn test-to-km {
  # 0 miles = 0 km
  var zero: float  # Mu implicitly initializes variables in memory to 0
  var result/xmm1: float <- to-km zero
  compare result, zero
  {
    break-if-=
    draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "F - 0 miles = 0 km\n", 3/fg 0/bg
    count-test-failure
  }
  # 1 mile = 1.609 km approximately
  var one/eax: int <- copy 1
  var one-float/xmm0: float <- convert one
  result <- to-km one-float
  var lower-bound/xmm0: float <- rational 0x649, 0x3e8  # 1609/1000 in hex
  {
    compare result, lower-bound
    break-if-float>=
    draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "F - 1 mile > 1.609 km\n", 3/fg 0/bg
    count-test-failure
  }
  var upper-bound/xmm0: float <- rational 0x64a, 0x3e8  # 1610/1000 in hex
  {
    compare result, upper-bound
    break-if-float<=
    draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "F - 1 mile < 1.610 km\n", 3/fg 0/bg
    count-test-failure
  }
  # 2 miles = 3.218 km approximately
  var two/eax: int <- copy 2
  var two-float/xmm0: float <- convert two
  result <- to-km two-float
  var lower-bound/xmm0: float <- rational 0xc92, 0x3e8  # 3218/1000 in hex
  {
    compare result, lower-bound
    break-if-float>=
    draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "F - 2 miles > 3.218 km\n", 3/fg 0/bg
    count-test-failure
  }
  var upper-bound/xmm0: float <- rational 0xc93, 0x3e8  # 3219/1000 in hex
  {
    compare result, upper-bound
    break-if-float<=
    draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "F - 2 miles < 3.219 km\n", 3/fg 0/bg
    count-test-failure
  }
}

fn main {
}