Plan 9 from Bell Labs’s /usr/web/sources/contrib/ericvh/go-plan9/test/switch.go

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func assert(cond bool, msg string) {
	if !cond {
		print("assertion fail: ", msg, "\n");
		panic(1);
	}
}

func main() {
	i5 := 5;
	i7 := 7;
	hello := "hello";

	switch true {
	case i5 < 5: assert(false, "<");
	case i5 == 5: assert(true, "!");
	case i5 > 5: assert(false, ">");
	}

	switch {
	case i5 < 5: assert(false, "<");
	case i5 == 5: assert(true, "!");
	case i5 > 5: assert(false, ">");
	}

	switch x := 5; true {
	case i5 < x: assert(false, "<");
	case i5 == x: assert(true, "!");
	case i5 > x: assert(false, ">");
	}

	switch x := 5; true {
	case i5 < x: assert(false, "<");
	case i5 == x: assert(true, "!");
	case i5 > x: assert(false, ">");
	}

	switch i5 {
	case 0: assert(false, "0");
	case 1: assert(false, "1");
	case 2: assert(false, "2");
	case 3: assert(false, "3");
	case 4: assert(false, "4");
	case 5: assert(true, "5");
	case 6: assert(false, "6");
	case 7: assert(false, "7");
	case 8: assert(false, "8");
	case 9: assert(false, "9");
	default: assert(false, "default");
	}

	switch i5 {
	case 0,1,2,3,4: assert(false, "4");
	case 5: assert(true, "5");
	case 6,7,8,9: assert(false, "9");
	default: assert(false, "default");
	}

	switch i5 {
	case 0:
	case 1:
	case 2:
	case 3:
	case 4: assert(false, "4");
	case 5: assert(true, "5");
	case 6:
	case 7:
	case 8:
	case 9:
	default: assert(i5 == 5, "good");
	}

	switch i5 {
	case 0: dummy := 0; _ = dummy; fallthrough;
	case 1: dummy := 0; _ = dummy; fallthrough;
	case 2: dummy := 0; _ = dummy; fallthrough;
	case 3: dummy := 0; _ = dummy; fallthrough;
	case 4: dummy := 0; _ = dummy; assert(false, "4");
	case 5: dummy := 0; _ = dummy; fallthrough;
	case 6: dummy := 0; _ = dummy; fallthrough;
	case 7: dummy := 0; _ = dummy; fallthrough;
	case 8: dummy := 0; _ = dummy; fallthrough;
	case 9: dummy := 0; _ = dummy; fallthrough;
	default: dummy := 0; _ = dummy; assert(i5 == 5, "good");
	}

	fired := false;
	switch i5 {
	case 0: dummy := 0; _ = dummy; fallthrough;  // tests scoping of cases
	case 1: dummy := 0; _ = dummy; fallthrough;
	case 2: dummy := 0; _ = dummy; fallthrough;
	case 3: dummy := 0; _ = dummy; fallthrough;
	case 4: dummy := 0; _ = dummy; assert(false, "4");
	case 5: dummy := 0; _ = dummy; fallthrough;
	case 6: dummy := 0; _ = dummy; fallthrough;
	case 7: dummy := 0; _ = dummy; fallthrough;
	case 8: dummy := 0; _ = dummy; fallthrough;
	case 9: dummy := 0; _ = dummy; fallthrough;
	default: dummy := 0; _ = dummy; fired = !fired; assert(i5 == 5, "good");
	}
	assert(fired, "fired");

	count := 0;
	switch i5 {
	case 0: count = count + 1; fallthrough;
	case 1: count = count + 1; fallthrough;
	case 2: count = count + 1; fallthrough;
	case 3: count = count + 1; fallthrough;
	case 4: count = count + 1; assert(false, "4");
	case 5: count = count + 1; fallthrough;
	case 6: count = count + 1; fallthrough;
	case 7: count = count + 1; fallthrough;
	case 8: count = count + 1; fallthrough;
	case 9: count = count + 1; fallthrough;
	default: assert(i5 == count, "good");
	}
	assert(fired, "fired");

	switch hello {
	case "wowie": assert(false, "wowie");
	case "hello": assert(true, "hello");
	case "jumpn": assert(false, "jumpn");
	default: assert(false, "default");
	}

	fired = false;
	switch i := i5 + 2; i {
	case i7: fired = true;
	default: assert(false, "fail");
	}
	assert(fired, "var");
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].