1// Copyright 2017 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package main
6
7import (
8	"log"
9	"plugin"
10
11	"testplugin/iface_i"
12)
13
14func main() {
15	a, err := plugin.Open("iface_a.so")
16	if err != nil {
17		log.Fatalf(`plugin.Open("iface_a.so"): %v`, err)
18	}
19	b, err := plugin.Open("iface_b.so")
20	if err != nil {
21		log.Fatalf(`plugin.Open("iface_b.so"): %v`, err)
22	}
23
24	af, err := a.Lookup("F")
25	if err != nil {
26		log.Fatalf(`a.Lookup("F") failed: %v`, err)
27	}
28	bf, err := b.Lookup("F")
29	if err != nil {
30		log.Fatalf(`b.Lookup("F") failed: %v`, err)
31	}
32	if af.(func() interface{})() != bf.(func() interface{})() {
33		panic("empty interfaces not equal")
34	}
35
36	ag, err := a.Lookup("G")
37	if err != nil {
38		log.Fatalf(`a.Lookup("G") failed: %v`, err)
39	}
40	bg, err := b.Lookup("G")
41	if err != nil {
42		log.Fatalf(`b.Lookup("G") failed: %v`, err)
43	}
44	if ag.(func() iface_i.I)() != bg.(func() iface_i.I)() {
45		panic("nonempty interfaces not equal")
46	}
47}
48