OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [go/] [token/] [serialize_test.go] - Blame information for rev 848

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2011 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
 
5
package token
6
 
7
import (
8
        "bytes"
9
        "encoding/gob"
10
        "fmt"
11
        "testing"
12
)
13
 
14
// equal returns nil if p and q describe the same file set;
15
// otherwise it returns an error describing the discrepancy.
16
func equal(p, q *FileSet) error {
17
        if p == q {
18
                // avoid deadlock if p == q
19
                return nil
20
        }
21
 
22
        // not strictly needed for the test
23
        p.mutex.Lock()
24
        q.mutex.Lock()
25
        defer q.mutex.Unlock()
26
        defer p.mutex.Unlock()
27
 
28
        if p.base != q.base {
29
                return fmt.Errorf("different bases: %d != %d", p.base, q.base)
30
        }
31
 
32
        if len(p.files) != len(q.files) {
33
                return fmt.Errorf("different number of files: %d != %d", len(p.files), len(q.files))
34
        }
35
 
36
        for i, f := range p.files {
37
                g := q.files[i]
38
                if f.set != p {
39
                        return fmt.Errorf("wrong fileset for %q", f.name)
40
                }
41
                if g.set != q {
42
                        return fmt.Errorf("wrong fileset for %q", g.name)
43
                }
44
                if f.name != g.name {
45
                        return fmt.Errorf("different filenames: %q != %q", f.name, g.name)
46
                }
47
                if f.base != g.base {
48
                        return fmt.Errorf("different base for %q: %d != %d", f.name, f.base, g.base)
49
                }
50
                if f.size != g.size {
51
                        return fmt.Errorf("different size for %q: %d != %d", f.name, f.size, g.size)
52
                }
53
                for j, l := range f.lines {
54
                        m := g.lines[j]
55
                        if l != m {
56
                                return fmt.Errorf("different offsets for %q", f.name)
57
                        }
58
                }
59
                for j, l := range f.infos {
60
                        m := g.infos[j]
61
                        if l.Offset != m.Offset || l.Filename != m.Filename || l.Line != m.Line {
62
                                return fmt.Errorf("different infos for %q", f.name)
63
                        }
64
                }
65
        }
66
 
67
        // we don't care about .last - it's just a cache
68
        return nil
69
}
70
 
71
func checkSerialize(t *testing.T, p *FileSet) {
72
        var buf bytes.Buffer
73
        encode := func(x interface{}) error {
74
                return gob.NewEncoder(&buf).Encode(x)
75
        }
76
        if err := p.Write(encode); err != nil {
77
                t.Errorf("writing fileset failed: %s", err)
78
                return
79
        }
80
        q := NewFileSet()
81
        decode := func(x interface{}) error {
82
                return gob.NewDecoder(&buf).Decode(x)
83
        }
84
        if err := q.Read(decode); err != nil {
85
                t.Errorf("reading fileset failed: %s", err)
86
                return
87
        }
88
        if err := equal(p, q); err != nil {
89
                t.Errorf("filesets not identical: %s", err)
90
        }
91
}
92
 
93
func TestSerialization(t *testing.T) {
94
        p := NewFileSet()
95
        checkSerialize(t, p)
96
        // add some files
97
        for i := 0; i < 10; i++ {
98
                f := p.AddFile(fmt.Sprintf("file%d", i), p.Base()+i, i*100)
99
                checkSerialize(t, p)
100
                // add some lines and alternative file infos
101
                line := 1000
102
                for offs := 0; offs < f.Size(); offs += 40 + i {
103
                        f.AddLine(offs)
104
                        if offs%7 == 0 {
105
                                f.AddLineInfo(offs, fmt.Sprintf("file%d", offs), line)
106
                                line += 33
107
                        }
108
                }
109
                checkSerialize(t, p)
110
        }
111
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.