                 .Identifier("a"), .Character("+"), .Identifier("b")
             ]
         )
-
-        assertStringToTokens(
-            "extern atan2(a b)",
-            [
-                .Extern, .Identifier("atan2"),
-                .Character("("), .Identifier("a"), .Identifier("b"), .Character(")")
-            ]
-        )
-
-
+    }
+    
+    func testWhitespaceAtStart() {
         assertStringToTokens(
             "\textern atan2(y x);",
             [

        assertUnmatched(identifierToken, "2name".characters)
        assertUnmatched(identifierToken, "2".characters)
    }

    func testTokenizer() {
        assertStringToTokens("a+b", [.Identifier("a"), .Character("+"), .Identifier("b")])

        assertStringToTokens(
            "def add(a b) a + b",
            [

            ]
        )
    }
}

class TokenToExpressionParserTests: XCTestCase {
    func testParser() {
        assertTokensToExpression(
            [.Extern, .Identifier("sin"), .Character("("), .Identifier("angle"), .Character(")"), .EndOfStatement],
            .Prototype(name: "sin", args: ["angle"])
        )
    }
}

class StringToExpressionParserTests: XCTestCase {
    func testExtern() {
        assertStringToExpression(
            "extern sin(angle);",
            .Prototype(name: "sin", args: ["angle"])
        )
    }
    
    func testBinaryOperator() {
        assertStringToExpression(
            "a + b;",
            .BinaryOperator(
