Mesh.vertices and Mesh.uv Clarification

I am trying to make random shapes with a mesh, but my first step is to learn how to make a mesh programmatically. My question is simple. Why does A work, but B does not?

A (should be right triangle with right angle at top left and it works):

void Start () {
    gameObject.AddComponent("MeshFilter");
    gameObject.AddComponent("MeshRenderer");
    Mesh mesh = GetComponent<MeshFilter>().mesh;
    mesh.Clear();
    mesh.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0) };
    mesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1) };
    mesh.triangles = new int[] { 0, 1, 2 };
}

B (should be right triangle with right angle at bottom right…but nothing draws):

void Start () {
    gameObject.AddComponent("MeshFilter");
    gameObject.AddComponent("MeshRenderer");
    Mesh mesh = GetComponent<MeshFilter>().mesh;
    mesh.Clear();
    mesh.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(1, 1, 0) };
    mesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1) };
    mesh.triangles = new int[] { 0, 1, 2 };
}

Triangles are one sided. You have to wrap them in the correct order (clockwise). So given your points, the display side of the triangle is opposite in B from A. To fix the problem, you can: 1) rotate the game object, 2) reorder the vertices, 3) reorder the triangle. For example, change line 8 in B to:

    mesh.triangles = new int[] {0,2,1};